我正在使用LomontFFT算法进行C#。 Matlab中的代码如下:
idx = 3000 : 5048;
figure
hold on
plot(abs(fft(a_eeg1_raw(idx))), 'y')
%Title,xlabel,ylabel etc
所以我尽力在C#中做同样的事情:
int idx_start = 3000 + 1;
int idx_end = 5048;
LomontFFT my_fft = new LomontFFT();
double[] temp = new double[idx_end - idx_start + 1];
for (int i = idx_start, j = 0; i < idx_end + 1; i++, j++)
temp[j] = a_eeg1_raw[i];
my_fft.RealFFT(temp, true); // With (A,B) (1,-1) - signal processing
for (int i = 3, j = 1; i < temp.Count() - 1; i = i + 2, j++) // as long as first to entries have only real parts I'm starting from 3rd entry (imaginary part)
series_a_eeg1_fft.Points.Add(new DataPoint(Convert.ToDouble(j), Math.Abs(temp[i])));
for (int i = temp.Count() - 1, j = seria_a_eeg1_raw.Points.Count() - 1; i > 2; i = i - 2, j++)
series_a_eeg1_fft.Points.Add(new DataPoint(Convert.ToDouble(j), Math.Abs(temp[i])));
model_tab1.PlotModel.Series.Add(series_a_eeg1_fft);
我从这段代码中获得的值与Matlab中的值大不相同。情节的形状并没有太大的不同,无论如何它都不一样。我很确定我忘记了一些重要的事情,但是在盯着这段代码3小时之后,我无法找到问题所在。有人能帮助我吗?
答案 0 :(得分:1)
abs(fft(x))
与abs(real(fft(x)))
不同。你没有正确地组合实部和虚部。
计算数据的正向或反向傅立叶变换,用
仅包含实际价值数据的数据。 输出很复杂 在前两个条目之后计算,存储在交替的实际中 和想象中的部分。前两个返回的条目是真实的 来自共轭对称的第一个和最后一个值的部分
输出,必然是真实的