сравнение отфильтрованных данных: полосовая функция Matlab и функция фильтра

Я пытаюсь понять, как функция полосы пропускания выполняет фильтрацию, и натыкаюсь на эту строку (после создания фильтра).

y = signal.internal.filteringfcns.filterData(x,opts);

x — это данные, а opts имеет структуру фильтра. Я искал вокруг и не смог найти ничего о функции signal.internal.filteringfcns.filterData. Я сравнил этот вывод с filter(opts.FilterObject,x), и они не совпадают.

Далее приведен минимальный рабочий пример (data2.txt).

load('data2.txt')

srate=64;
freqrange=[0.4 3.5];

var{1}=freqrange;
var{2}=srate;

m=numel(data2);
x=data2;
R=0.1;%10% of signal
Nr=50;
NR=min(round(m*R),Nr);%At most 50 points
x1=2*x(1)-flipud(x(2:NR+1));%maintain continuity in level and slope
x2=2*x(end)-flipud(x(end-NR:end-1));
x=[x1;x;x2];

opts=signal.internal.filteringfcns.parseAndValidateInputs(x,'bandpass',var);
opts = designFilter(opts);

xx = signal.internal.filteringfcns.filterData(x,opts);
x_fil=xx(NR+1:end-NR);

xx = filter(opts.FilterObject,x);
x_fil2=xx(NR+1:end-NR);

plot([data x_fil x_fil2])
legend('raw','filterData','filter')

Вот сюжет:

данные

А вот psd-график обоих отфильтрованных сигналов (сначала filtData).

filtData filter

Итак, какая-нибудь помощь по этой функции ...filtData или я делаю что-то не так в своем анализе?


person kurokirasama    schedule 14.11.2019    source источник
comment
Я бы удалил подфункции, которые вы скопировали из bandpass.m, так как это защищенный авторским правом код из The MathWorks.   -  person rinkert    schedule 15.11.2019
comment
@rinkert новый вопрос: stackoverflow.com/questions/58958392/   -  person kurokirasama    schedule 20.11.2019


Ответы (1)


Привет еще раз :) Если вы наберете edit signal.internal.filteringfcns.filterData, вы даже можете посмотреть, что находится внутри этой функции filterData. Вы увидите, что эта функция (в зависимости от параметров opts) будет либо,

  • правый ноль дополняет сигнал N/2 нулями и вызывает filter
  • позвонить filtfilt по сигналу

Это также описано в документах bandpass. Так что, вероятно, это заполнение нулями объясняет, почему ваш вывод filter(opts.FilterObject,x) отличается.

Вы не можете найти описание этой функции в документации Matlab, так как она является частью внутренних функций набора инструментов обработки сигналов.

person rinkert    schedule 14.11.2019