This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

调用FFT后,频率不对的问题。

本人使用CCS3.3平台TMS320C55xx(Simulator)仿真程序,使用的是DSPlib中的RFFT程序。

用matlab生成10HZ信号,程序使用采样频率128HZ,采样点128个。

相应的在RFFT的例程上进行修改,对输入信号使用GHAPH中的FFT-Mag观测,最大的幅值出现在10HZ位置上,这点没问题。

但是当经过 rfft(x,NX,SCALE)变换后,使用GHAPH对FFT后的结果进行观测,频谱最大的幅值出现在21HZ位置上。

不明白为什么会出现这种问题,请问如何解决?附图如下

  • 看到截图里代码编译出错,运行的是修改代码后生成的新的.out文件?
  • 那个是我后来随便改的,编译信息和该提问无关。

  • 我又重新做了一遍,采样频率未变,更换了采样点数,由上面的128个变为256个。结果频谱最大的幅值出现在41HZ位置上!

    具体过程如下:

    matlab使用一下生成采样点

    fs=128;N=256;   %采样频率和数据点数

    n=0:N-1;

    t=n/fs;   %时间序列

    x=32766*(0+0*sin(2*pi*5*t)+1*sin(2*pi*10*t)+0*sin(2*pi*20*t)); %模拟输入信号

    调用RFFT函数结果如图,频谱最大的幅值出现在41HZ(采样点数256),比之前提问时的21HZ(采样点数128)又增大了,现在怀疑与采样点数有关,可是都是完全按照文档进行编写的,rfft(x,NX,SCALE)各参数也没问题,期待官方解答!

  • 试了几组新数据,其中f为单频信号的频率,fs为采样频率,n为采样点数,fmax为fft后频谱最大处的频率。

    f=10Hz, fs=64Hz, n=64, fmax=21Hz.(是f的2倍)

    f=10Hz, fs=64Hz, n=128, fmax=41Hz.(是f的4倍)

    f=10Hz, fs=64Hz, n=256, fmax=81Hz.(是f的8倍)

    f=10Hz, fs=128Hz, n=64, fmax=11Hz.(有1Hz偏差,可能与我正弦信号取整所影响)

    f=10Hz, fs=128Hz, n=128, fmax=21Hz.(是f的2倍)

    f=10Hz, fs=128Hz, n=256, fmax=41Hz.(是f的4倍)

    f=20Hz, fs=64Hz, n=64, fmax=41Hz.(是f的2倍)

    f=20Hz, fs=128Hz, n=64, fmax=21Hz.(有1Hz偏差,可能与我正弦信号取整所影响)

    以上我用matlab仿真,数据结果都没有问题。可是使用CCS就是出现了上述问题,即最大频谱的频率点不等于单频信号的频率f,还与采样频率fs、采样点数n有关。现在实在是搞不懂了,期待答复。

  • 结题。已查明原因:没有理解对fft函数输出的涵义,GRAPH显示的只是复数数组,图像与频谱有一定的对应关系。
  • 您好,请问您怎么解决的,我计算后的幅值完全不对,分布都不对,0频处能量特别大,我保证已经换算成真实频率了。