Skip to main content
 首页 » 编程设计

python之汉宁窗值在 Python 和 Matlab 中不匹配

2025年05月04日13mengfanrong

我一直在研究低通滤波器,它应该使用 Hann 窗口和一些自定义数字滤波器来过滤 .wav 文件。

我为 Matlab 编写了整个代码,今天我确实用 Python 编写了它,但是当我开始在 Python x Matlab 中比较 hann 函数的值时,它没有任何事情要做...

#python hanning 
hanning(10) 
# array([0., 0.11697778, 0.41317591, 0.75, 0.96984631, 0.96984631, 0.75, 0.41317591, 0.11697778, 0.]) 
%matlab hanning 
hanning(10) 
% ans = 
%    0.0794 
%    0.2923 
%    0.5712 
%    0.8274 
%    0.9797 
%    0.9797 
%    0.8274 
%    0.5712 
%    0.2923 
%    0.0794 

请您参考如下方法:

长话短说:

他们使用不同的定义。 Matlab 相当于 Numpy 的 hanning 是 hann,而不是 hanning。


在 Matlab 中,hanning(n) 创建了一个对称窗口。根据文件 hanning.m 中的代码,对于偶数 n,此窗口的前半部分计算为

m = n/2; 
w = .5*(1 - cos(2*pi*(1:m).'/(n+1))) 

然后得到完整的窗口作为w = [w; w(结束:-1:1)]。除了数值精度问题(这可能是 Matlab 只计算一半然后镜像它的原因),这相当于

w = .5*(1 - cos(2*pi*(1:n).'/(n+1))); 

在 Numpy 中,根据 documentation ,公式不同。在 Matlab 语法中它对应于

w = .5*(1 - cos(2*pi*(0:n-1).'/(n-1))); 

这是 Matlab 的 hann(n),如其 documentation 中所述.