TJ球 发表于 2008-7-9 18:31

hann视窗数学上的定义为何

我有一组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(); grid;

Galaxy163 发表于 2008-7-9 20:12

参考这里
http://forum.vibunion.com/forum/attachment.php?aid=22548

TestGuru 发表于 2008-7-9 20:58

hann(n)=0.5-0.5cos(2*Pi*n/N), n=0, 1, 2, ..........N-1

TJ球 发表于 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 编辑 ]

TJ球 发表于 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

但我把您提供的公式套入计算发现似乎不太一样,是我哪算错了吗?

TestGuru 发表于 2008-7-10 10:18

是一样的, 第四或第五位有效数字不同就算误差吧,跟Pi的取值有关。

[ 本帖最后由 TestGuru 于 2008-7-10 10:22 编辑 ]

yangzj 发表于 2008-7-10 10:53

matlab里hann有两个参数,第二个参数可取'symmetric' 或 'periodic',默认是对称的'symmetric',当取'periodic'时就跟上面的公式一样.

TJ球 发表于 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
误差怎麽如此大?

yangzj 发表于 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'的

songzy41 发表于 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。

TJ球 发表于 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'了

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


大陆同胞果然个个是高手
页: [1]
查看完整版本: hann视窗数学上的定义为何