Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python和Matlab中,汉宁窗口值不匹配_Python_Matlab_Numpy_Scipy_Signal Processing - Fatal编程技术网

在Python和Matlab中,汉宁窗口值不匹配

在Python和Matlab中,汉宁窗口值不匹配,python,matlab,numpy,scipy,signal-processing,Python,Matlab,Numpy,Scipy,Signal Processing,我一直在使用低通滤波器,它应该是使用Hann窗口和一些自定义数字滤波器过滤.wav文件 我为Matlab编写了全部代码,今天我确实用Python编写了它,但是当我开始比较Python x Matlab中hann函数的值时,它与 蟒蛇汉宁 汉宁10 数组[0,0.1169778,0.41317591,0.75,0.96984631,0.96984631,0.75,0.41317591,0.1169778,0] %汉宁 汉宁10 %ans= % 0.0794 % 0.2923 %

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

我为Matlab编写了全部代码,今天我确实用Python编写了它,但是当我开始比较Python x Matlab中hann函数的值时,它与

蟒蛇汉宁 汉宁10 数组[0,0.1169778,0.41317591,0.75,0.96984631,0.96984631,0.75,0.41317591,0.1169778,0] %汉宁 汉宁10 %ans= % 0.0794 % 0.2923 % 0.5712 % 0.8274 % 0.9797 % 0.9797 % 0.8274 % 0.5712 % 0.2923 % 0.0794 在scipy.signal中,不推荐使用函数hanning。要使用的函数是scipy.signal.hann

numpy.hanning和scipy.signal.hann计算相同的窗口。 函数包括窗口末尾的零值。要匹配问题中显示的Matlab函数的输出,请在scipy.signal.hann的参数中添加2,然后丢弃末端的零:

In [1]: from scipy.signal import hann                                                                                                                                           

In [2]: hann(12)                                                                                                                                                                
Out[2]: 
array([0.        , 0.07937323, 0.29229249, 0.57115742, 0.82743037,
       0.97974649, 0.97974649, 0.82743037, 0.57115742, 0.29229249,
       0.07937323, 0.        ])

In [3]: hann(12)[1:-1]                                                                                                                                                          
Out[3]: 
array([0.07937323, 0.29229249, 0.57115742, 0.82743037, 0.97974649,
       0.97974649, 0.82743037, 0.57115742, 0.29229249, 0.07937323])
在scipy.signal中,不推荐使用函数hanning。要使用的函数是scipy.signal.hann

numpy.hanning和scipy.signal.hann计算相同的窗口。 函数包括窗口末尾的零值。要匹配问题中显示的Matlab函数的输出,请在scipy.signal.hann的参数中添加2,然后丢弃末端的零:

In [1]: from scipy.signal import hann                                                                                                                                           

In [2]: hann(12)                                                                                                                                                                
Out[2]: 
array([0.        , 0.07937323, 0.29229249, 0.57115742, 0.82743037,
       0.97974649, 0.97974649, 0.82743037, 0.57115742, 0.29229249,
       0.07937323, 0.        ])

In [3]: hann(12)[1:-1]                                                                                                                                                          
Out[3]: 
array([0.07937323, 0.29229249, 0.57115742, 0.82743037, 0.97974649,
       0.97974649, 0.82743037, 0.57115742, 0.29229249, 0.07937323])
TL;西铁:

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

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

m = n/2;
w = .5*(1 - cos(2*pi*(1:m).'/(n+1)))
然后得到完整的窗口w=[w;wend:-1:1]。除了数值精度问题,这可能是Matlab只计算一半然后镜像它的原因,这相当于

w = .5*(1 - cos(2*pi*(1:n).'/(n+1)));
在Numpy,根据,公式是不同的。在Matlab语法中,它对应于

w = .5*(1 - cos(2*pi*(0:n-1).'/(n-1)));
这是Matlab的hannn,如its中所述。

TL;西铁:

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

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

m = n/2;
w = .5*(1 - cos(2*pi*(1:m).'/(n+1)))
然后得到完整的窗口w=[w;wend:-1:1]。除了数值精度问题,这可能是Matlab只计算一半然后镜像它的原因,这相当于

w = .5*(1 - cos(2*pi*(1:n).'/(n+1)));
在Numpy,根据,公式是不同的。在Matlab语法中,它对应于

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

这是Matlab的hannn,如its中所述。

请用两种语言编写代码。Matlab信号处理工具箱中有hann和hamming。MATLAB没有汉宁函数。这是你自己编写的函数,还是从其他第三方来源获得的函数?事实上,你的MATLAB输出看起来像来自hamming,是你使用的吗?@Cris MATLAB是汉宁的,只是没有文档记录,而且可能deprecated@Luis:如果我在文档中找不到它,它就不存在了!:请用这两种语言编写代码。MATLAB信号处理工具箱中有hann和hamming。MATLAB没有汉宁函数。这是你自己编写的函数,还是从其他第三方来源获得的函数?事实上,你的MATLAB输出看起来像来自hamming,是你使用的吗?@Cris MATLAB是汉宁的,只是没有文档记录,而且可能deprecated@Luis:如果我在文档中找不到它,它就不存在了!:P