本人使用CCS3.3平台TMS320C55xx(Simulator)仿真程序,使用的是DSPlib中的RFFT程序。
用matlab生成10HZ信号,程序使用采样频率128HZ,采样点128个。
相应的在RFFT的例程上进行修改,对输入信号使用GHAPH中的FFT-Mag观测,最大的幅值出现在10HZ位置上,这点没问题。
但是当经过 rfft(x,NX,SCALE)变换后,使用GHAPH对FFT后的结果进行观测,频谱最大的幅值出现在21HZ位置上。
不明白为什么会出现这种问题,请问如何解决?附图如下
Shine:
看到截图里代码编译出错,运行的是修改代码后生成的新的.out文件?
user3636798:
回复 Shine:
那个是我后来随便改的,编译信息和该提问无关。
user3636798:
回复 Shine:
我又重新做了一遍,采样频率未变,更换了采样点数,由上面的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)各参数也没问题,期待官方解答!
user3636798:
回复 Shine:
试了几组新数据,其中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有关。现在实在是搞不懂了,期待答复。
user5739360:
回复 user3636798:
您好,请问您怎么解决的,我计算后的幅值完全不对,分布都不对,0频处能量特别大,我保证已经换算成真实频率了。