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

Фильтр Чебышева (тип т)

Передаточная функция

  1. Расчет «граничных» частот для ФНЧ:

  1. Расчет параметра преобразования:

  1. Граничная “аналоговая” частота k полосы задерживания аналогового фильтра-прототипа:

;

  1. Передаточная функция АФ типа T:

    1. Модуль коэффициента отражения: %. Этой величине соответствует верхняя граница рабочего затухания в полосе пропускания дБ.

5

10

15

25

50

Δa, дБ

0,011

0,044

0,10

0,28

1,25


Таблица 1.

Модуль коэффициента отражения: %. Этой величине соответствует верхняя граница рабочего затухания в полосе пропускания дБ.

    1. Вспомогательный параметр L определяется для величин % ( дБ) и а0=20 дБ: .

Номограмма 1

    1. Порядок передаточной функции n определяется для величин и из номограммы для фильтров типа Т: n = 3.

Номограмма 2

    1. Общий вид T(s):

В нашем случае, при n = 3, T(s) примет вид:

;

    1. Коэффициенты T(s) найдем из таблицы:

5

0,20025047

1,5633880273

0,7816940137

0,6073139226

10

0,40201513

1,1717182911

0,5858591455

1,3340512791

15

0,60686608

0,9721338860

0,4860669430

1,2078009850

25

1,0327956

0,7433421107

0,3716710553

1,0790820730

50

2,3094011

0,4532218472

0,2266109236

0,9508194004

Таблица 2.

В нашем случае: C=0,40201513; a0=1,1717182911 -; a1= -0,5858591455; b1= 1,3340512791

    1. Передаточная функция аналогового нормированного ФНЧ:

  1. Передаточная функция H(z) цифрового ФНЧ определяется с использованием подстановки:

    1. Расчет АЧХ и затухания аналогового фильтра по программе 1.

Для написания программы используем язык программирования Delphi6.0

Данная программа рассчитывает частоту фильтра, затухания, АЧХ.

Листинг программы:

nit Unit;// Расчет затухания аналогового фильтра.

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Series, ExtCtrls, TeeProcs, Chart, DbChart, jpeg, Menus;

type

TForm1=class(TForm)

Button1: TButton;

Button2: TButton;

Edit1:TEdit;

Edit2:TEdit;

Edit3:TEdit;

Memo1:TMemo;

Label1:TLabel;

Label2:TLabel;

Label3:TLabel;

DBChart1:TDBChart;

Series1:TFastLineSeries;

DBChart2:TDBChart;

Series2:TFastLineSeries;

procedure Button1Click(Sender: TObject);

procedure.Button2Click(Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R . dfm}

procedure TForm1. Button1Click(Sender: TObject);

var

st:string;

q,i:integer;

dm,dw,c,w,w1,h,h1,s1,s2,s3,s4,g1,g2:real;

k,m,l,i,i1:integer;

B:array[1…10]of real; // введение коеффициента В

A:array[1…10]of real; // введение коеффициента A

FF:array[1…10]of real; // введение коеффициента k.

Form2:tform2;

begin

memo1.Clear;

c:=strofloat(edit1.Text); // введение коеффициента C

m:=strofloat(edit3.Text); // введение количества расчетных точек М

Form2:TForm2.Create(Application);

for i:=1 to k do

begin

form2.Label3.Caption:=’B[{‘+inttostr(l)+’,}’+ inttostr(i)+’]’;

form2.Label4.Caption:=’A[{‘+inttostr(l)+’,}’+ inttostr(i)+’]’;

form2.Label5.Caption:=’FF[{‘+inttostr(l)+’,}’+ inttostr(i)+’]’;

if Form2.ShowModal=mrOk then begin

B[i]:=strtofloat(form2.Edit1.Text);

A[i]:=strtofloat(form2.Edit2.Text);

FF[i]:=strtofloat(form2.Edit3.Text);

form2.Edit1.Text:=”;

form2.Edit2.Text:=”;

form2.Edit3.Text:=”;

form2.Label3.Caption := form2.Label3.Caption+#13+floattostr(b[i])+ ‘+floattostr(a[i])+ floattostr(FF[i]);

end;

end;

Dw:=(0.5)/(m-1);

for i1:=1 to k do

begin

w1:=2*3.141592*w;

h:=1;

for i:=1 to k do

begin

a[i]=0; b[i]=0;

begin

a[i]:=a[i]^2;

b[i]:=b[i]^2;

end;

h:=1/0.15171652*(FF[i]^2+2*a[i]*FF[i]+a[i]^2+b[i]^2);

end;

h:=p/sqr(+c^2);

if h<>0 then h1:= - 20ln(h)/(ln(10) else h1:=999;

dbchart1.SeriesList[0].Add(h,floattostr(w),clread);

dbchart2.SeriesList[0].Add(h,floattostr(w),clblue);

st:=floattostr(w)+ ‘ ‘+floattostr(h)+’ ‘+ floattostr(h1)+#13;

memo1.Lines.Add(st);

w:=w+dw;

end:

end;

procedure TForm1. Button2Click(Sender: TObject);

begin

close;

end;

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm2=class(TForm)

Edit1:TEdit;

Button1: TButton;

Edit2:TEdit;

Edit3:TEdit;

Memo1:TMemo;

Label1:TLabel;

Label2:TLabel;

Label3:TLabel;

Label4:TLabel;

Label5:TLabel;

private

{Private declarations}

public

{Public declarations}

end;

var

Form2: TForm2;

implementation

{$R . dfm}

end;

Листинг программы:

nit Unit;// Контрольный расчет АЧХ и затухания БИХ-фильтра по разработанной программе

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Series, ExtCtrls, TeeProcs, Chart, DbChart, jpeg, Menus;

type

TForm1=class(TForm)

Button1: TButton;

Button2: TButton;

Edit1:TEdit;

Edit2:TEdit;

Edit3:TEdit;

Memo1:TMemo;

Label1:TLabel;

Label2:TLabel;

Label3:TLabel;

DBChart1:TDBChart;

Series1:TFastLineSeries;

DBChart2:TDBChart;

Series2:TFastLineSeries;

procedure Button1Click(Sender: TObject);

procedure.Button2Click(Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R . dfm}

procedure TForm1. Button1Click(Sender: TObject);

var

st:string;

q,i:integer;

dm,dw,c,w,w1,h,h1,s1,s2,s3,s4,g1,g2:real;

k,m,l,i,i1:integer;

B:array[1…10]of real; // введение коеффициента В

A:array[1…10]of real; // введение коеффициента A

form2:tform2;

begin

memo1.Clear;

c:=strofloat(edit1.Text); // введение коеффициента C

m:=strofloat(edit3.Text); // введение количества расчетных точек М

k:=strofloat(edit1.Text); // введение количества звеньев К

Form2:TForm2.Create(Application);

for i:=1 to k do

for l:=1 to 3 do

begin

form2.Label3.Caption:=’B[{‘+inttostr(l)+’,}’+ inttostr(i)+’]’;

form2.Label4.Caption:=’A[{‘+inttostr(l)+’,}’+ inttostr(i)+’]’;

if Form2.ShowModal=mrOk then begin

B[l,i]:=strtofloat(form2.Edit1.Text);

A[l,i]:=strtofloat(form2.Edit2.Text);

form2.Edit1.Text:=”;

form2.Edit2.Text:=”;

form2.Label3.Caption := form2.Label3.Caption+#13+floattostr(b[l,i])+ ‘+floattostr(a[l,i]);

end;

end;

Dw:=(0.5)/(m-1);

for i1:=1 to k do

begin

w1:=2*3.141592*w;

h:=1;

for i:=1 to k do

begin

a[i]=0; b[i]=0;

begin

s1:=0; s2:=0; s3:=0; s4:=0;

for l:=1 to 3 do

begin

g1:=cos(1*w1); g2:= sin(1*w1);

s1:=s1+b[l,i]*g1; s2:=s2+b[l,i]*g2;

end;

h:=h*(sqr(s1)+ sqr(s2)/ sqr(s3)+ sqr(s4) ^2);

end;

h:=c*sqrt(h);

if h<>0 then h1:= - 20ln(h)/(ln(10) else h1:=999;

dbchart1.SeriesList[0].Add(h,floattostr(w),clread);

dbchart2.SeriesList[0].Add(h,floattostr(w),clblue);

st:=floattostr(w)+ ‘ ‘+floattostr(h)+’ ‘+ floattostr(h1)+#13;

memo1.Lines.Add(st);

w:=w+dw;

end:

end;

procedure TForm1. Button2Click(Sender: TObject);

begin

close;

end;

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm2=class(TForm)

Edit1:TEdit;

Button1: TButton;

Edit2:TEdit;

Memo1:TMemo;

Label1:TLabel;

Label2:TLabel;

Label3:TLabel;

Label4:TLabel;

private

{Private declarations}

public

{Public declarations}

end;

var

Form2: TForm2;

implementation

{$R . dfm}

end;

Рисунок 1. Изображение окна работающего приложения

Рисунок 2. Изображение графика зависимости АЧХ от частоты

Рисунок 3. Изображение графика зависимости затухания от частоты

Передаточной функции H(z) соответствует схема:

z-1

z-1

z-1

x (nT)

z-1

z-1

z-1

0,174243 0,174243 -0,318486 -0,03

y(nT)

10,5867 37,6471 45,2432 18,5029

Рис 1 «Схема фильтра»

Расчёт аналогового фильтра прототипа:

>> [z, p, k]=cheb2ap(3,40);

>> [b, a]=zp2tf(z, p, k); % преобразование коэффициента усиления

>> h=freqs(b, a, w); % передаточная функция аналогового фильтра

>> figure

>> plot(w, abs(h)), grid

Рис 2. «АЧХ фильтра»

Преобразование фильтра прототипа к заданному типу (ФНЧ):

>> [z, p, k]=cheb2ap(3, 40);

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

>> w0=1;

>> [b, a]=lp2hp(b, a, w0); % преобразование фильтра прототипа к ФНЧ

>> freqz(b, a);

Рис 3 АЧХ и ФЧХ ФНЧ

Синтез дискретных фильтров методом билинейного z-преобразования:

>> Fs=1;

>> [bz, az] = bilinear(b, a, Fs);

>> freqz(bz, az);

Рис 4 АЧХ и ФЧХ дискретного фильтра