2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Не могу разобраться в работе цифровых фильтров
Сообщение09.04.2023, 21:51 


19/11/20
307
Москва
Существуют КИХ и БИХ цифровые фильтры. ИХ передаточные функции можно представить в виде отношения полиномов, только у КИХ фильтра в знаменателе единица. Также фильтр можно описать с помощью импульсной характеристики. Прохождение сигнала через цифровой фильтр можно представить в виде свертки входного сигнала с импульсной характеристикой фильтра или в виде произведения их Z-отображений. С помощью filterDesigner на MatLab делаю КИХ фильтр (Fs=1500Hz, Fpass=2Hz, Fstop=49Hz, Apass=1dB, Astop=40dB), вот его передаточная функция:
Код:
Numerator:                               
0.01119255071394242156967990808880131226
0.005285121732642928359113820846459930181
0.006453581365537312992952667656254561734
0.007725825762473693958387599423076608218
0.009090659071237384980523899002946563996
0.010538722323502534156114407437598856632
0.012060116080200685567680451981686928775
0.013639614943877510430669808272341470001
0.015262795458380436913747857374801242258
0.016906176170626591170886854342825245112
0.018548456419688535284917563217277347576
0.020175528355832212518139456847166002262
0.021770156456097790320658447171808802523
0.02329706838380501965346525139466393739
0.024739992763880815085375530770761542954
0.026098068501571158178675702288273896556
0.027318053088047904164437085228200885467
0.028411008662171853555999945228904834948
0.029343935698295488950781972903314454015
0.030107215108137921899533751002309145406
0.030691429274293541978879673592928156722
0.031086098153798483872956026630163250957
0.031282384974124929910566095259127905592
0.031282384974124929910566095259127905592
0.031086098153798483872956026630163250957
0.030691429274293541978879673592928156722
0.030107215108137921899533751002309145406
0.029343935698295488950781972903314454015
0.028411008662171853555999945228904834948
0.027318053088047904164437085228200885467
0.026098068501571158178675702288273896556
0.024739992763880815085375530770761542954
0.02329706838380501965346525139466393739
0.021770156456097790320658447171808802523
0.020175528355832212518139456847166002262
0.018548456419688535284917563217277347576
0.016906176170626591170886854342825245112
0.015262795458380436913747857374801242258
0.013639614943877510430669808272341470001
0.012060116080200685567680451981686928775
0.010538722323502534156114407437598856632
0.009090659071237384980523899002946563996
0.007725825762473693958387599423076608218
0.006453581365537312992952667656254561734
0.005285121732642928359113820846459930181
0.01119255071394242156967990808880131226

Далее делаю фильтр с такими же характеристиками, но уже БИХ:
Код:
Numerator:                               
1                                         
2                                         
1                                         
Denominator:                             
1                                       
-1.970873147296126504102176113519817590714
0.971291288216304504743447978398762643337

Для КИХ фильтра коэффициенты при z в передаточной функции совпадают с импульсной характеристикой фильтра. Получается, что для КИХ фильтра я могу посчитать свёртку входного сигнала и импульсной характеристики и получить выходной сигнал? Вот пример, написанный на MatLab (и выходной график ниже):
Код:
Ts = 1/1500;
t = 0 : Ts : 3;
f = 50;
phi = pi/2;
s = 5 + 2.5*sin(2*pi*f*t + phi); %Входной сигнал
h = [0.01119255071394242156967990808880131226  %Импульсная хар-ка КИХ-фильтра
0.005285121732642928359113820846459930181
0.006453581365537312992952667656254561734
0.007725825762473693958387599423076608218
0.009090659071237384980523899002946563996
0.010538722323502534156114407437598856632
0.012060116080200685567680451981686928775
0.013639614943877510430669808272341470001
0.015262795458380436913747857374801242258
0.016906176170626591170886854342825245112
0.018548456419688535284917563217277347576
0.020175528355832212518139456847166002262
0.021770156456097790320658447171808802523
0.02329706838380501965346525139466393739
0.024739992763880815085375530770761542954
0.026098068501571158178675702288273896556
0.027318053088047904164437085228200885467
0.028411008662171853555999945228904834948
0.029343935698295488950781972903314454015
0.030107215108137921899533751002309145406
0.030691429274293541978879673592928156722
0.031086098153798483872956026630163250957
0.031282384974124929910566095259127905592
0.031282384974124929910566095259127905592
0.031086098153798483872956026630163250957
0.030691429274293541978879673592928156722
0.030107215108137921899533751002309145406
0.029343935698295488950781972903314454015
0.028411008662171853555999945228904834948
0.027318053088047904164437085228200885467
0.026098068501571158178675702288273896556
0.024739992763880815085375530770761542954
0.02329706838380501965346525139466393739
0.021770156456097790320658447171808802523
0.020175528355832212518139456847166002262
0.018548456419688535284917563217277347576
0.016906176170626591170886854342825245112
0.015262795458380436913747857374801242258
0.013639614943877510430669808272341470001
0.012060116080200685567680451981686928775
0.010538722323502534156114407437598856632
0.009090659071237384980523899002946563996
0.007725825762473693958387599423076608218
0.006453581365537312992952667656254561734
0.005285121732642928359113820846459930181
0.01119255071394242156967990808880131226 ]';
s_out = conv(s, h); %Свертка входного сигнала и импульсной хар-ки фильтра
s_out2 = filter(h, 1, s);

figure
subplot(3, 1, 1)
plot(s)
grid on
xlabel('t')
ylabel('s')
title('Входной сигнал')
subplot(3, 1, 2)
plot(s_out)
grid on
xlabel('t')
ylabel('s')
title('Выходной сигнал (conv)')
subplot(3, 1, 3)
plot(s_out2)
grid on
xlabel('t')
ylabel('s')
title('Выходной сигнал (filter)')

Изображение
В описании сказано, что функция filter выдаёт вектор той же длины, что и входной сигнал, то есть, видимо, просто обрубает конец. Но в принципе понятно, что программа выдаёт рабочий фильтр и что функция filter работает адекватно. НО по чему для КИХ фильтра такой коэффициент подавления для постоянной составляющей? Было 5 а стало 4.5, то есть получается, что в этом плане КИХ фильтр хуже (просто далее для БИХ фильтров такого не наблюдается, там в полосе пропускания всё хорошо)? Конечно, по АЧХ фильтра можно этот коэффициент подавления достать и потом скомпенсировать, но неужели нельзя этого избежать? Или, может, то особенность выбранного типа фильтра (Equiripple)?
Переходим к БИХ, вот пример на MatLab:
Код:
Ts = 1/1500;
t = 0 : Ts : 3;
f = 50;
phi = pi/2;
s = 5 + 2.5*sin(2*pi*f*t + phi); %Входной сигнал
b = [1 2 1];
a = [1 -1.971 0.971];
s_out = filter(b, a, s);

figure
subplot(2, 1, 1)
plot(s)
grid on
xlabel('t')
ylabel('s')
title('Входной сигнал')
subplot(2, 1, 2)
plot(s_out)
grid on
xlabel('t')
ylabel('s')
title('Выходной сигнал (filter)')

Изображение
Что я сделал не так? В программе написано, что фильтр устойчив, с этим проблем быть не должно.

 Профиль  
                  
 
 Re: Не могу разобраться в работе цифровых фильтров
Сообщение13.04.2023, 10:56 
Заслуженный участник
Аватара пользователя


11/03/08
10007
Москва
Kevsh в сообщении #1589043 писал(а):
Denominator:
1
-1.970873147296126504102176113519817590714
0.971291288216304504743447978398762643337

Kevsh в сообщении #1589043 писал(а):
a = [1 -1.971 0.971];


?

 Профиль  
                  
 
 Re: Не могу разобраться в работе цифровых фильтров
Сообщение13.04.2023, 14:03 
Заслуженный участник
Аватара пользователя


11/03/08
10007
Москва
Фильтр НЧ? И вообще, как генерировался фильтр?

 Профиль  
                  
 
 Re: Не могу разобраться в работе цифровых фильтров
Сообщение24.04.2023, 14:30 


19/11/20
307
Москва
Евгений Машеров
Да, действительно, из-за округления фильтр потерял устойчивость. Я почему-то думал, что округлить можно (у меня просто пока что только в планах разобраться, как все эти фильтры создаются, так что я не до конца понимаю, что влияет на устойчивость). Фильтр разрабатывался с помощью filterDesigner в MatLab.

 Профиль  
                  
 
 Re: Не могу разобраться в работе цифровых фильтров
Сообщение24.04.2023, 20:24 
Заслуженный участник
Аватара пользователя


11/03/08
10007
Москва
А посмотрите, где (по отношению к единичной окружности) нули полинома с исходными и округлёнными коэффициентами.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group