Применение фильтра к дискретной последовательности

kostar
Сообщения: 5
Зарегистрирован: 28 июн 2017, 19:47

Применение фильтра к дискретной последовательности

Сообщение kostar »

Добрый вечер.
Поскажите пожалуйста, как правильно применять разностное уравнение к отсчетам дискретного сигнала, чтобы получался такой же результат, как и с помощью матлабовской функции 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)

kostar
Сообщения: 5
Зарегистрирован: 28 июн 2017, 19:47

Re: Применение фильтра к дискретной последовательности

Сообщение kostar »

Нашёл ответ здесь http://www.cyberforum.ru/matlab/thread5 ... ost3047907
Расписано, как работает функция filter() в матлаб.


Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Применение фильтра к дискретной последовательности

Сообщение Бахурин Сергей »

Код: Выделить всё

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 -1.5905664958 2.0838133003 -1.5326255633 0.8694409155 ...
 0.0008613684 -0.3191759433 0.0820901316 -0.0122466702];

figure; freqz(b,a);
x = [zeros(1, 9) x];
y = zeros(size(x));
for n = length(b):length(x)
 y(n) = x(n:-1:n-8) * b(:) - y(n-1:-1:n-8) * a(2:end)';
end

figure; plot(y);

Y = filter(b,a,x);
figure; plot(Y)

kostar
Сообщения: 5
Зарегистрирован: 28 июн 2017, 19:47

Re: Применение фильтра к дискретной последовательности

Сообщение kostar »

Спасибо, Сергей!

Ответить