Matlab的“smooth”函数和Python的“scipy.signal.savgol_filter”有什么区别?

mum43rcc  于 2022-11-23  发布在  Matlab
关注(0)|答案(1)|浏览(309)

我目前正在翻译一些用Matlab编写的代码,然后用Python重新编写。我在Matlab中有一个函数:

yy = smooth(y, span, 'sgolay', degree)

这个函数是为了平滑信号y,使用Savitzky-Golay计算。

from scipy.signal import savgol_filter
yy = savgol_filter(y, span, degree)

对于相同的输入y,这两个函数会产生相同的输出yy吗?如果不是,有没有Python中的Matlab smooth函数的等价物?
提前感谢您的回答。

8ulbf1ek

8ulbf1ek1#

我会比较两者的脉冲响应函数来回答你的问题。从下面的测试中,我会说认为它们做同样的事情并不是一个坏主意。正如评论中提到的,边界情况,如没有邻居的样本,奇/偶样本等,可以用不同的方式实现。

span=5;
degree=2;
y=zeros(100,1);
y(length(y)/2)=1;
figure,stem(y),hold on, stem(smooth(y, span, 'sgolay', degree))
legend({'input','PSF'})

#%%
import numpy as np
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt

span=5
degree=2
y=np.zeros(100);
y[y.shape[0]//2]=1
yy = savgol_filter(y, span, degree)

plt.stem(y,linefmt='red',label='input')
plt.stem(yy,linefmt='blue',label='PSF')
plt.show()

相关问题