我在仿真的情况下,用C67x的dsplib里的DSPF_sp_fftSPxSP做1024点的浮点fft:
1. 先将采样数据以实部和虚部交叉的形式存放在数组里;
2. 用tw_gen()产生旋转因子;
3. 调用DSPF_sp_fftSPxSP()做FFT。
请问我的过程有错误没?为什么做出来的结果和matlab里的结果不一样,差别很大。并且我发现每当程序运行到tw_gen()的时候,输入数组里的采样数据就会发生变化,请问大神们,到底是怎么回事?
fengchen shen:
原来这个论坛是没有人回答这么菜的问题的啊!失望了!
Lin Jia-Hung:
回复 fengchen shen:
有时间跑一下, 修改了DSPF_sp_fftSPxSP_d.c的程序代码
Matlab 的输入由test_fft.c所产生
产生出结果存放在fft_ti_data.m
在比较matlab结果
附上部分程序
N = 1024;for (i = 0; i < N; i++) {x_array[2 * i]= sin (2 * 3.1415 *50 * i / (double) N);x_array[2 * i + 1] = sin (2 * 3.1415 * 100 * i / (double) N); } tw_gen (w_array, N); DSPF_sp_fftSPxSP (N, x_array, w_array, y_array, brev, rad, 0, N);Matlab code:
N = 1024; x_array = reshape (input_fft, 2, N); x_cpx = complex(x_array(1,:), x_array(2,:)); y_cpx = fft(x_cpx); % complex array to array of one domain result = zeros(2, N); result(1,:) = real(y_cpx); result(2,:) = imag(y_cpx); result = reshape(result, 1, 2*N); diff = max(abs(output_fft-result))
fengchen shen:
回复 Lin Jia-Hung:
十分感谢您的回答,我现在已经找到问题了,我把旋转因子矩阵的大小设置错了。现在改成w[2*N]就OK了!
gang liu10:
大哥,我调用DSPF_sp_fftSPxSP()做FFT,得到的结果和matlab仿真不一致,比如说我输入是1KHZ的正弦波,得到的结果是主瓣副瓣都集中在最前面的几个点,第1-10.您有遇到过这个问题么。