почему этот фильтр Баттерворта дает разные результаты в R и Matlab? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь использовать фильтр низких частот 20 Гц для данных в R, но когда я использую функцию filterfilt, график отличается от 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 one:

R plot

почему R one представляет эти вариации в начале и в конце графика?

1 Ответ

0 голосов
/ 30 декабря 2018

Я догадываюсь, что разница в том, как каждая версия обрабатывает переходные процессы конечного эффекта.

Ваш сигнал имеет большое смещение постоянного тока (~875).Если вы считаете сигнал нулевым 0 до и после записи.Прыжок в начале сигнала обрабатывается фильтром и рассматривается как артефакт или конечный эффект.Эти конечные эффекты - то, что вы видите в версии R отфильтрованного сигнала.

Из документации R от filtfilt эта версия старая и, вероятно, не минимизирует конечные переходные процессы ( R 'фильтруемый' документ ).С другой стороны, версия MATLAB filtfilt делает;Цитирование из документации MATLAB:

" filtfilt сводит к минимуму начальные и конечные переходные процессы путем сопоставления начальных условий. Не используйте фильтрат с фильтрами дифференциатора и КИХ-Гильберта, поскольку работа этихфильтры сильно зависят от их фазового отклика. " ФИЛЬТФИЛЬТ Документация

...