У меня вопрос по поводу фильтров в matlab.
- Интересно, почему порядок фильтров в MATLAB ограничен
n_order = floor(length(t)/3)-1
, как в примере ниже? Это числовое требование для работы фильтра?
- Кроме того,
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);