Поскажите пожалуйста, как правильно применять разностное уравнение к отсчетам дискретного сигнала, чтобы получался такой же результат, как и с помощью матлабовской функции filter()?
Цифровой ФНЧ Баттерворта 8-го порядка БИХ для частоты дискретизации 1 кГц и частоты среза 200 Гц.
Коэффициенты рассчитаны здесь http://www-users.cs.york.ac.uk/~fisher/ ... /trad.html Выдает сразу все полюса и нули фильтра, гравики и С код.
Код: Выделить всё
Fs = 1000;
T = 1/Fs;
L = 1000;
t = (0:L-1)*T;
x = 5*sin(2*pi*50*t) + 5*sin(2*pi*250*t) + 5*sin(2*pi*400*t);
% Коэффиценты разностного уравнения
b = [1 8 28 56 70 56 28 8 1];
a = [-1.5905664958 2.0838133003 -1.5326255633 0.8694409155 ...
0.0008613684 -0.3191759433 0.0820901316 -0.0122466702];
figure; freqz(b,a);
y = zeros(size(x));
for n = length(b):length(x)
y(n) = x(n-8:n) * b(:) + y(n-8:n-1) * a(:);
end
figure; plot(y);
Y = filter(b,a,x);
figure; plot(Y)