我一直在研究低通滤波器,它应该使用 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 中所述.
关于python - 汉宁窗值在 Python 和 Matlab 中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485663/