精通MATLAB和FFT的DSP高手进来看下

[复制链接]
 楼主| 小研究 发表于 2007-7-6 22:49 | 显示全部楼层 |阅读模式
搞了好几年的MATLAB,今天突然有点迷了(我常常在自己熟悉的领域里犯迷@_@)。今天用MATLAB中的FFT函数,做了个简单的FFT仿真,比如128点FFT,得到的结果中总是有点数的倍数。下面附上几条MATLAB程序,有兴趣的朋友可以试一下。本来为1的直流量得到却是128,本来为1的基波得到64,本为0.2的三次谐波得到12.8。也就是说MATLAB中的FFT函数算完之后还是需要处理的,且这个处理跟点数有关,比如128点,直流分量需要除以128,而其他次数的分析结果则需要除以64。我现在必须知道的是,通常TI给出的FFT程序(我以前搞ADSP时的FFT程序结果是直接可以用来算幅值的)的结果是否也包含了这样一个点数的倍数?这个结果是否可以直接用来算幅值,或者是象MATLAB的结果这样需要除以点数之后才能算幅值?<br /><br />function&nbsp;ffttry<br />clc<br />for&nbsp;m=0:1:50*128-1<br />x(m+1)=1+cos(2*pi/128*m)+0.2*cos(2*pi*3*m/128+pi/4)+0.1*cos(2*pi*63*m/128+pi/6);<br />end<br />figure&nbsp;<br />k=[0:50*128-1];<br />plot(k,x)<br />fft(x,128)<br /><br />先行谢过了。
田宏亮 发表于 2007-7-7 06:25 | 显示全部楼层

RE

如果输入信号是实数,FFT的结果是幅值的N/2倍。如果输入信号是复数,FFT的结果是幅值的N倍,N是每周期的采样点数。请参考信号与系统或数字信号处理方面的书关于DFT的定义,是有1/N的。TI的FFT函数使用Q15格式,是可以算幅值的。
 楼主| 小研究 发表于 2007-7-7 17:27 | 显示全部楼层

回2楼

我用的是浮点的VC33,我知道用这个DSP的朋友很少,希望精通6000的朋友说说TI给出的6000的FFT程序的结果中是否含有N的倍数?<br />谢谢
 楼主| 小研究 发表于 2007-7-7 17:50 | 显示全部楼层

2楼的朋友,FFT的结果跟格式没什么关系吧

关键是看是否在FFT的结果中做了点数的处理,我现在看汇编看的头大,总看不出个所以然来,所以才问各路高手。
wowow 发表于 2007-7-7 18:07 | 显示全部楼层

a

&quot;直流分量需要除以128,而其他次数的分析结果则需要除以64&quot;,实际上都要除以128的,谐波能量少了一半是因为有一半到负频率域了。<br /><br />DSP的FFT的函数好像有选项是否要除N吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

153

主题

869

帖子

8

粉丝
快速回复 返回顶部 返回列表