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

标签 python matlab numpy scipy signal-processing

我一直在研究低通滤波器,它应该使用 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 的 hanninghann,而不是 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/

相关文章:

python - 在 3d 空间中找到 python numpy.ndarray 的最近邻居

arrays - 具有未知维度的数组的matlab最大值

python - 来自 tf.keras.preprocessing.image.ImageDataGenerator.flow_from_directory 的 tf.data.Dataset?

mysql - 如何将 MATLAB 连接到 mysql?

matlab - Matlab中 `i++`的语法是什么

python - 子类化 numpy.ndarray

Python Numpy : Operation on each sequential element without for loop?

python一次生成多个消息框

Python/ Selenium :Different ways to click this specific button

python - Azure网站对Bottle Python的支持