FFT加hanning窗的问题
本帖最后由 wdhd 于 2016-9-8 14:46 编辑用Matlab的库函数,可以这样写
w=hanning(512);
但是最后读到的数据,和用C编程出来的是不一样的,我的C程序就是按书上公式编写的。
W(n)=0.5*(1-cos(2*pi*n/N)) n=0,1,.......N-1
大家看看有什么问题,最后求FFT的幅值,怎样去消除hanning的影响?
matlab里改成 w=hanning(512,'periodic')看看
回复 #2 yangzj 的帖子
请问 PREODIC 模式和对称模式什么区别?回复 #3 firecat_2 的帖子
呵呵,顾名思义就行。其是就是离散化的方式不一样,
W(n)=0.5*(1-cos(2*pi*n/N)) n=0,1,.......N-1,就是周期的。
W(n)=0.5*(1-cos(2*pi*n/(N+1))) n=1,2,.......N
一般来说我都会用周期模式,它会有比较好的特性。因为经周期延拓后它与实际的Hanning窗完全一样
[ 本帖最后由 yangzj 于 2007-11-6 22:53 编辑 ] W(n)=0.5*(1-cos(2*pi*(n+1)/N)) n=0,1,2,.......N-1 最后求FFT的幅值,怎样去消除hanning的影响?
回复 #6 libobo2000 的帖子
什么影响,是幅值减半了吗?乘上2就行了. 本帖最后由 wdhd 于 2016-9-8 14:47 编辑原帖由 libobo2000 于 2007-11-7 07:48 发表
W(n)=0.5*(1-cos(2*pi*(n+1)/N)) n=0,1,2,.......N-1
你是说对称hanning窗用的是这个式子吗?这个不是对称窗,只是把周期Hanning窗住后移了一点而已.matlab里的对称hanning窗我昨天仔细看了下,用的是W(n)=0.5*(1-cos(2*pi*n/(N+1))) n=1,2,.......N,实际上是取了长度为(N+1)/fs的hanning窗的中间N点 (fs为采样频率),舍掉了两端为0的点.而周期hanning窗是对长度为N/fs的窗取了前N点,舍掉了末端为0的点 我看到一个程序上是这样写的,后来看下也不对,误差太大。我按照楼上的做了,乘2,也是不对
for(i=0;i<N;i++)
{
han_win=han_win*han_win;
han_win_sum=han_win_sum+han_win;
}
han_win_sum=1/han_win_sum;
//printf("han_win_sum:%f",han_win_sum);
for(i=0;i<N;i++)//消除窗的影响
{
magnitude=magnitude*han_win_sum;//short fft output
}
回复 #9 libobo2000 的帖子
这个求的应该是能量恢复系数。把FFT的结果除以N再乘以4就是单边谱。这样幅值不对那是由于非整周期采样引起的频谱泄露造成的 加hanning窗之后为什么fft的结果要乘4,不是乘2的吗 本帖最后由 wdhd 于 2016-9-8 14:47 编辑
原帖由 witty01 于 2008-1-10 13:56 发表
加hanning窗之后为什么fft的结果要乘4,不是乘2的吗
在加窗和FFT后单边谱的幅值(除N),矩形窗乘2,hanning窗乘4。
页:
[1]