为什么这个Butterworth过滤器在R和Matlab中显示不同的结果?

时间:2018-12-27 19:35:54

标签: r matlab filter butterworth

我正在尝试对R中的数据使用20Hz低通滤波器,但是当我使用filtfilt函数时,绘图与matlab不同。

我在R中使用以下代码:

fc<-20
fs<-100
Wn<-pi*fc/(2*fs)
testar<- butter(5, Wn, type="low")
L2<- signal::filtfilt(testar,Tabela$posicao)
plot(Tabela$tempo, L2, type = "l", col="red")

matlab代码为:

fc=20;
fs=100;
Wn=pi*fc/(2*fs);
[b,a] = butter(5,Wn,'low');
posfilt= filtfilt(b,a,Tabela.posicao);

在matlab中的图是:

matlab plot

R一:

R plot

为什么R一个在图的开始和结尾显示这些变化?

1 个答案:

答案 0 :(得分:0)

我很直觉,不同之处在于每个版本处理最终效应瞬态的方式。

您的信号具有较大的DC偏移(~875)。如果您认为信号在录制前后为零0。信号开始处的跳变由滤波器处理,被视为伪像或最终效果。这些最终效果是您在R版本的滤波信号中看到的。

filtfilt起的R文档中,该版本较旧,可能不会使结束瞬变最小化(R 'filtfilt' docs)。另一方面,filtfilt的MATLAB版本也可以。引用MATLAB文档:

filtfilt通过匹配初始条件来最小化启动和结束瞬态。请勿将'filtfilt'与微分器和Hilbert FIR滤波器一起使用,因为这些滤波器的操作很大程度上取决于其相位响应。” FILTFILT Documentation