Уважаемые! Поясните пожалуйста, почему после децимирующего FIR "классический" анализ ответа фильтра на ступеньку (единичная функция) выдаёт неправильные результаты. А анализ ответа на ГКЧ (или просто на набор синусоид) -- правильные.
Вот код MATLAB, где я моделирую подобное измерение:
Код
% классическая ступенька
x = [zeros(1, 1024*m) ones(1, 1024*m)];
% Фильтр на ~1/4 исходной полосы, с подавлением 100 dB
Fp = 0.20;
Fst = 0.25;
Ap = 0.0001;
Ast = 100;
hf = design(fdesign.lowpass('Fp,Fst,Ap,Ast', Fp, Fst, Ap, Ast));
% Фильтруем сигнал
y = filter(hf, x);
% Децимируем в 4 раза (имеем право, теорема Котла не нарушена, отрезали
% всё что выше с помощью FIR фильтра)
k = 4;
y_decim = downsample(y, k);
% классика жанра: FFT от дифференциала ответа на ступеньку
PRy = 20*log10(abs(fft(diff(y))));
% и для децимированного сигнала
PRy_decim = 20*log10(abs(fft(diff(y_decim))));
% Рисуем спектр
Fx = [0:length(PRy)-1] / length(PRy) * 2;
Fx_decim = [0:length(PRy_decim)-1] / length(PRy_decim) / k * 2;
plot(Fx, PRy, Fx_decim, PRy_decim);
x = [zeros(1, 1024*m) ones(1, 1024*m)];
% Фильтр на ~1/4 исходной полосы, с подавлением 100 dB
Fp = 0.20;
Fst = 0.25;
Ap = 0.0001;
Ast = 100;
hf = design(fdesign.lowpass('Fp,Fst,Ap,Ast', Fp, Fst, Ap, Ast));
% Фильтруем сигнал
y = filter(hf, x);
% Децимируем в 4 раза (имеем право, теорема Котла не нарушена, отрезали
% всё что выше с помощью FIR фильтра)
k = 4;
y_decim = downsample(y, k);
% классика жанра: FFT от дифференциала ответа на ступеньку
PRy = 20*log10(abs(fft(diff(y))));
% и для децимированного сигнала
PRy_decim = 20*log10(abs(fft(diff(y_decim))));
% Рисуем спектр
Fx = [0:length(PRy)-1] / length(PRy) * 2;
Fx_decim = [0:length(PRy_decim)-1] / length(PRy_decim) / k * 2;
plot(Fx, PRy, Fx_decim, PRy_decim);
И получается, что после децимации дифференциал ответа на ступеньку даёт завал АЧХ в конце где-то на 3 dB. Если поэкспериментировать с децимацией (например, сделать в два раза), то завал уменьшится.

Собственно вопрос: почему так происходит?
И попутный вопрос: как исследовать характеристики фильтра "в живой природе"? Получается, что если фильтр децимирующий, то исследовать его характеристики методом подачи "единичной функции" нельзя? В более общем случае: если я не знаю характеристики системы и мне нужно построить её АЧХ, то я не имею права исследовать воздействуя на неё единичной функцией и получая спектр дифференциала ответа?