Python 相当于 Matlab 的 resample()

问题描述 投票:0回答:3

是否有一个Python函数可以像MATLAB的resample()那样实现重采样?我研究了 scikits.samplerate 的重新采样函数,但我没有得到类似的结果。

python matlab signal-processing
3个回答
3
投票

有一篇博客“Python 中的音频重采样”与此相关。 resampy 和 scipy.signal 都有不同方式的重采样函数实现。


0
投票

看了太久之后,这是与 matlab 的 resample(x,p,q) 最好的等效:

x_resampled = resampy.resample(x, q, p, filter='sinc_window', window=scipy.signal.flattop)

与我看到的 MATLAB 结果相比,方差为 96.59(长度 > 5000)。作为我使用 scipy 的“重新采样”时的比较,

resample_len = int(len(x) * p / q)+1    
x_resampled  = resample(x, resample_len , t=None, axis=0, window=None, domain='time')

我得到的方差为 4,281。

进一步探索 MATLAB 方法,描述如下:

y = resample(x,p,q) 对输入序列 x 以 p/q 乘以 原始采样率。重新采样应用 FIR 抗锯齿低通 对 x 进行滤波并补偿滤波器引入的延迟。 该函数沿着第一个数组维度进行操作,大小为 大于1。

FIR滤波器在哪里:

p = 3;
q = 2;
maxpq = max(p,q);
fc = 1/maxpq;
n = 10;
order = 2*n*maxpq;
beta = 5;
b = fir1(order,fc,kaiser(order+1,beta));
b = p*b/sum(b);

我没有发现真正的一对一替代品,也没有在网上或 ChatGPT 中找到。

使用 window=scipy.signal.some_window 应用所有窗口,这是名称和方差:

boxcar          150.06
triang          102.92
blackman        107.66
hamming         117.09
hann            115.33
bartlett        102.91
flattop         96.59
parzen          103.51
bohman          106.08
blackmanharris  102.41
nuttall         102.71
barthann        111.97
cosine          127.05
exponential     13535.85
tukey           144.04

如您所见,平顶表现最接近。如果有人可以更好地关联 MATLAB 的方法,请发布它。


-1
投票

相当于 MATLAB resample 的最佳函数是这样的:

MATLAB:

resample(  Data_Low_Freq_v, Upsample_n ,Downsample_n );

Python:

import scipy.signal as ssg    
ssg.resample_poly(Data_Low_Freq_v, Upsample_n, Downsample_n)
© www.soinside.com 2019 - 2024. All rights reserved.