Почему порядок фильтра Matlab ограничен одной третью длины данных минус один? - PullRequest
0 голосов
/ 26 апреля 2018

У меня вопрос по поводу фильтров в matlab.

  1. Интересно, почему порядок фильтров в MATLAB ограничен n_order = floor(length(t)/3)-1, как в примере ниже? Это числовое требование для работы фильтра?
  2. Кроме того, n_order равен размеру окна, поэтому этот предел позволяет создавать 3 окна с максимальным размером заказа. Есть ли способ создать больше окон с таким же порядком фильтра?

Код, приведенный ниже, просто для примера.

t = linspace(0,4*pi,1000);
rng default  %initialize random number generator
x = sin(t) + 0.25*rand(size(t));
dt = t(2)-t(1);
Fs = 1/dt;   % Sampling frequency
f_band = [0.01 2];
n_order = floor(length(t)/3)-1; % max order (will result in 3 windows)
n_wind_filtLen = n_order+1; % step-length of windows
df = Fs/n_wind_filtLen; % frequency bin size
b = fir1(n_order,f_band/(Fs/2),'bandpass',hamming(n_order+1)); % a=1;
x_fil = filtfilt(b,1,x); % a=1;
figure;
plot(t, x,'-k','linewidth',2); hold on;
plot(t, x_fil,'-.r','linewidth',2);

1 Ответ

0 голосов
/ 08 ноября 2018

Это требование исходит от функции filtfilt. Вы можете найти документацию здесь .

Набрав help filtfilt, вы можете прочитать:

Длина входа X должна быть более чем в три раза больше фильтра порядок, определенный как max (длина (B) -1, длина (A) -1).

Это ограничение подтверждается в исходном коде функции:

nb = numel(b);
nfilt = max(nb,na);   
nfact = max(1,3*(nfilt-1));  % length of edge transients
if Npts <= nfact             % input data too short
    error(message('signal:filtfilt:InvalidDimensionsDataShortForFiltOrder',num2str(nfact)));
end

Если вы хотите увеличить порядок, вам нужно увеличить длину ваших данных.

Другое ограничение исходит от функции fir1:

Вектор окна должен иметь n + 1 элементов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...