Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_rog.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.09 Mб
Скачать

Проектирование бих-фильтра в графической среде fdaTool

Для проверки истинности результатов проведем синтез КИХ-фильтра в графической среде FDATool.

При этом приведем основные характеристики фильтра.

АЧХ фильтра, сходится с рассчитанной ранее

ФЧХ фильтра, так же сходится

Импульсная, переходная характеристики и диаграмму полюсов и нулей так же соответствуют полученным ранее в расчете.

Импульсная характеристика

Переходная характеристика

Диаграмма нулей и полюсов

Фильтры рассчитанные в среде FDAtool и с помощью системы MatLab идентичны.

Matlab-программа синтеза бих-фильтра

close all;

clear all;

clc;

f_d = 30000; w_d = 2*pi*f_d; %Частота дискретизации

F_p = 1000; w_p = 2*pi*F_p; %Частота среза

R_p = 0.7; R_s = 55; %Заданные допуски на ЛАЧХ

F_s = 7000; w_s = 2*pi*F_s; %Граничная частота

[N, W_0] = cheb1ord(w_p,w_s,R_p,R_s,'s'); %Расчитываем минемально необходимый порядок и частоту среза фильтра

[b, a] = cheby1(N,R_p,W_0,'s'); %Рассчитаем коэфф. передаточной функции АФ

W = 0:5:w_d/2;

H = freqs(b,a,W); %Вычисление отсчетов комплексной АЧХ

ACH = abs(H); %Вычисление АЧХ

LACH = 20*log10(ACH); %Вычисление логарифмической АЧХ

FCH = unwrap(angle(H))*180/pi; %Вычисление ФЧХ

%Построение частотных характеристик

figure('name','Частотные характеристики');

subplot(2,1,1);

plot(W/(2*pi),ACH);

hold on;

plot([0 W_0/(2*pi) 1.00001*W_0/(2*pi) w_d/(4*pi)], [1 1 0 0], '-.r');

grid on;

legend('ACH AF','ACH IdealF');

title('ACH');

xlabel('f, Hz');

ylabel('Amplitude');

subplot(2,1,2);

plot(W/(2*pi),FCH);

grid on;

title('FCH');

xlabel('f, Hz');

ylabel('Fase(gradus)');

%Построение ЛАЧХ

figure('name','Логарифмическая АЧХ');

plot(W/(2*pi),LACH);

grid on;

title('LACH');

xlabel('f, Hz');

ylabel('Amplitude(dB)');

%Построение диаграммы полюсов

figure('name', 'Диаграмма полюсов АФ');

[z, p, k] = zplane(b,a);

grid on;

xlabel('Real');

ylabel('Imag');

%БП

[z, p, k] = tf2zp(b, a);

z_CF = (2*f_d+z)./(2*f_d-z);

p_CF = (2*f_d+p)./(2*f_d-p);

k_CF = k * prod(2*f_d - z)/prod(2*f_d - p);

Num = length(z) - length(p);

switch (Num > 0)

case 0

z_CF = [z_CF; ones(abs(Num),1)*(-1)];

case 1

p_CF = [p_CF; ones(abs(Num),1)*(-1)];

end

[bz, az]=zp2tf(z_CF, p_CF, k_CF);

[bz1, az1] = bilinear(b,a,f_d);

[zz, pz, kz] = bilinear(z, p, k, f_d);

%Построение диаграммы нулей и полюсов ЦФ

figure('name', 'Диаграмма нулей и полюсов ЦФ');

zplane(bz, az);

grid on;

xlabel('Real');

ylabel('Imag');

%Решение разностного уравнения методом итерационной процедуры

x=ones(1, 100);

h1 = impz(bz,az,100);

x1=zeros(1,length(h1)-20);

x1 = [x,x1];

for n = 1:length(h1)

y(n) = 0;

for m=1:n

y1= x1(m)*h1(n-m+1);

y(n)=y(n)+y1;

end;

end;

figure('name', 'Кривая переходного процесса');

stem(0:length(x)-1, y(1:length(x)));

grid on;

%Построение переходной и импульсной характеристики

figure('name', 'Переходная и импульсная х-ки');

pereh = filter(bz, az, ones(1, length(h1)));

subplot(2,1,1);

stem((0:length(h1)-1), h1);

grid on;

title('Impulsnaja');

xlabel('n');

ylabel('Amplitude');

xlim([0 length(h1)]);

subplot(2,1,2);

stem((0:length(pereh)-1), pereh);

grid on;

title('Perehodnaja');

xlabel('n');

ylabel('Amplitude');

xlim([0 length(h1)]);

%Построение реакции фильтра на различные входные сигналы

figure('name', 'Реакция фильтра на различные входные сигналы');

f1 = 400;

f2 = 2500;

t_sign = 0:1/f_d:0.01;

signal_1 = 10*sin(2*pi*f1*t_sign);

signal_2 = 10*sin(2*pi*f2*t_sign);

vyx1 = filtfilt(bz, az, signal_1);

vyx2 = filtfilt(bz, az, signal_2);

subplot(2,2,1);

plot(t_sign, signal_1, 'r-');

grid on;

title('800 Hz');

subplot(2,2,2);

plot(t_sign, vyx1, 'k-');

grid on;

subplot(2,2,3);

plot(t_sign, signal_2, 'r-');

grid on;

title('2000 Hz');

subplot(2,2,4);

plot(t_sign, vyx2, 'k-');

grid on;

%Построение частотных характеристик ЦФ

figure('name', 'Частотные характеристики фильтра');

[H_CF W_CF] = freqz(bz,az);

ACH_CF = abs(H_CF);

LACH_CF = 20*log10(ACH_CF);

FCH_CF = angle(H_CF);

FCH_CF = unwrap(FCH_CF); %Устранение скачков

subplot(2,1,1);

plot(W_CF*f_d/(2*pi),ACH_CF,'k');

grid on;

hold on;

plot(W/(2*pi),ACH,'-.g')

title('ACH');

xlabel('f, Hz');

ylabel('Amplitude');

legend('ACH CF','ACH AF');

subplot(2,1,2);

plot(W_CF*f_d/(2*pi),FCH_CF*180/pi,'k');

grid on;

hold on;

plot(W/(2*pi),FCH,'-.g')

title('FCH');

xlabel('f, Hz');

ylabel('Fase(gradus)');

legend('FCH CF','FCH AF');

figure('name', 'Логарифмическая АЧХ');

plot(W_CF*f_d/(2*pi),LACH_CF);

hold on;

%построение границы полос пропускания и задержки

plot([F_s, F_s], [-250, -R_s], 'r--');

plot([F_s, max(W_CF*f_d/(2*pi))], [-R_s, -R_s], 'r--');

plot([F_p, F_p], [50, -R_p], 'r--');

plot([0, F_p], [-R_p, -R_p], 'r--');

hold off;

grid on;

xlabel('f, Hz');

ylabel('Amplitude(dB)');

%Построение ЛАЧХ ЦФ в функции абсолютной псевдочастоты

lam = 2*f_d*tan(W_CF*f_d/(4*f_d));

lam_p = 2*f_d*tan(w_p/(2*f_d));

lam_s = 2*f_d*tan(w_s/(2*f_d));

figure('name', 'Логарифмическая АЧХ в функции абсолютной псевдочастоты');

plot(lam,LACH_CF);

hold on;

%построение границы полос пропускания и задержки

plot([lam_s, lam_s], [-215, -R_s], 'r--');

plot([lam_s, max(lam)], [-R_s, -R_s], 'r--');

plot([lam_p, lam_p], [50, -R_p], 'r--');

plot([0, lam_p], [-R_p, -R_p], 'r--');

hold off;

axis([0 lam(length(lam)) LACH_CF(length(LACH_CF)) 50]);

grid on;

xlabel('lam');

ylabel('Amplitude(dB)');

[sos,g] = tf2sos(bz,az)