我正在尝试对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中的图是:
R一:
为什么R一个在图的开始和结尾显示这些变化?
答案 0 :(得分:0)
我很直觉,不同之处在于每个版本处理最终效应瞬态的方式。
您的信号具有较大的DC偏移(~875
)。如果您认为信号在录制前后为零0
。信号开始处的跳变由滤波器处理,被视为伪像或最终效果。这些最终效果是您在R版本的滤波信号中看到的。
从filtfilt
起的R文档中,该版本较旧,可能不会使结束瞬变最小化(R 'filtfilt' docs)。另一方面,filtfilt
的MATLAB版本也可以。引用MATLAB文档:
“ filtfilt通过匹配初始条件来最小化启动和结束瞬态。请勿将'filtfilt'与微分器和Hilbert FIR滤波器一起使用,因为这些滤波器的操作很大程度上取决于其相位响应。” FILTFILT Documentation