声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1631|回复: 10

[FFT] hann视窗数学上的定义为何

[复制链接]
发表于 2008-7-9 18:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我有一组adc点数,
我将它读出并做FFT运算,
发现谐波太小,
所以加了hann视窗,
我知道加了hann它会把我的adc数值各乘上一组数字,
例如我有4096个点数,
hann系数则为,
0.000000589
0.000002357
0.000005302
0.000009426
.
.
.
.
我试着将这组数字整理出一个公式,
但就是找不出,
只知道它跟我取的点数有关,
是否有高人知道hann的公式为何呢??
謝謝!
以下是我的soures code

x=load('bb.txt');
M=length(x);
x=x.*hann(M);
N=4095;
fs=96000;
y=fft(x,N);
fn=0:N-1;
f=fs*fn/N;
plot( f(1:N/2),20*log10(abs( y(1:N/2))));
axis([0 10000 -5 5]); grid;
回复
分享到:

使用道具 举报

发表于 2008-7-9 20:12 | 显示全部楼层
发表于 2008-7-9 20:58 | 显示全部楼层
hann(n)=0.5-0.5cos(2*Pi*n/N), n=0, 1, 2, ..........N-1
 楼主| 发表于 2008-7-10 09:23 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-12 13:47 编辑
原帖由 Galaxy163 于 2008-7-9 20:12 发表
参考这里
http://www.chinavib.com/forum/attachment.php?aid=22548

根据您paper里的公式我并不是很懂该怎使用,如果可以的话能否请您举个例子,谢谢!

[ 本帖最后由 TJ球 于 2008-7-10 09:26 编辑 ]
clip_image001.gif
 楼主| 发表于 2008-7-10 09:24 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-12 13:48 编辑
原帖由 TestGuru 于 2008-7-9 20:58 发表
hann(n)=0.5-0.5cos(2*Pi*n/N), n=0, 1, 2, ..........N-1

matlab显示
C=hann(4096);
C(1:3)
ans =
1.0e-005 *
0
0.0589
0.2354

但我把您提供的公式套入计算发现似乎不太一样,是我哪算错了吗?
发表于 2008-7-10 10:18 | 显示全部楼层
是一样的, 第四或第五位有效数字不同就算误差吧,跟Pi的取值有关。

[ 本帖最后由 TestGuru 于 2008-7-10 10:22 编辑 ]
发表于 2008-7-10 10:53 | 显示全部楼层
matlab里hann有两个参数,第二个参数可取'symmetric' 或 'periodic',默认是对称的'symmetric',当取'periodic'时就跟上面的公式一样.
 楼主| 发表于 2008-7-10 11:10 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-12 13:48 编辑
原帖由 TestGuru 于 2008-7-10 10:18 发表
是一样的, 第四或第五位有效数字不同就算误差吧,跟Pi的取值有关。

可是在hann(44)时,
matlab会显示=0.0011
但我用公式计算的话
hann(n)=0.5-0.5cos(2*Pi*n/N)
hann(44)=0.5-0.5cos(2*3.14159265358979323846*44/4096)
hann(44)=0.5-0.5cos(2*3.14159265358979323846*44/4096)
hann(44)=0.5-0.5cos(0.0674951546669682141075390625)
hann(44)=0.5-0.5cos(0.0674951546669682141075390625)
hann(44)=0.5-0.5(0.99999930614314537930023019412351)
hann(44)=0.5-0.49999965307157268965011509706175
hann(44)=0.000000346928427310349884902939
误差怎麽如此大?
发表于 2008-7-10 11:22 | 显示全部楼层

回复 8楼 的帖子

首先,要注意公式里的n是从0开始的,另外,0.5-0.5cos(2*3.14159265358979323846*44/4096)算出来也是0.001138466677904呀,你用hann(4096,'symmetric')取45个数是0.001139022562245,用hann(4096,'periodic')取第45个数是0.001138466677904.
加窗时,最好是加'periodic'的
发表于 2008-7-10 11:49 | 显示全部楼层
在hann(n)=0.5-0.5cos(2*Pi*n/N) 中,n=0~N-1,但在MATLAB中下标从1开始,所以上式应改为
hann(n)=0.5-0.5cos(2*Pi*(n-1)/N) ,  n=1~N
这样有
hann(44)=0.5-0.5*cos(2*3.14159265358979323846*43/4096)
计算出也是0.0011。
 楼主| 发表于 2008-7-10 11:52 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-12 13:48 编辑
原帖由 yangzj 于 2008-7-10 11:22 发表
首先,要注意公式里的n是从0开始的,另外,0.5-0.5cos(2*3.14159265358979323846*44/4096)算出来也是0.001138466677904呀,你用hann(4096,'symmetric')取45个数是0.001139022562245,用hann(4096,'periodic')取第45个数是 ...

不好意思
刚刚验算一下
真的是我算错了
我程式也依照您的指正改成'periodic'了

现在我总算会了
谢谢各位提供宝贵知识及不吝指教
非常感谢


大陆同胞果然个个是高手
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-11 20:51 , Processed in 0.076759 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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