Моделирование цифрового фильтра верхних частот
Программа выполняет моделирование работы цифрового фильтра высоких частот 6 порядка. По результатам обработки выводятся графики входного аналогового сигнала и выходного цифрового сигнала, полученного в соответствии с заданием на проектирование цифрового фильтра. В данной программе был реализован цифровой фильтр верхних частот, в начале временного отчета была произведении задержка на 20 временных… Читать ещё >
Моделирование цифрового фильтра верхних частот (реферат, курсовая, диплом, контрольная)
Задание
1. Спроектировать цифровой фильтр с заданными характеристиками.
(определить коэффициенты, передаточную функцию и т. д.)
2. Построить АЧХ и ФЧХ цифрового фильтра.
3. Выбрать структуру цифрового фильтра, его параметры (разрядность регистров памяти, АЛУ и др.) и оценить влияние ошибок округления коэффициентов.
4. Разработать программную или аппаратную реализацию спроектированного фильтра. Провести его тестирование.
5. Сделать выводы по работе.
8 кГц, 4 кГц, =19 кГц
=-33дБ.
Расчеты
1) =2*=2*19=38 000 Гц
=2*pi*/=6.28*8000/38 000=1,322 105
=2*pi*/=6.28*4000/38 000=0,661 053
2) С==0,777 793
== 0,777 793 /0,343 113=2,266 871
Найдём n по формуле 10Lg (1+)>=33дБ
35,543>33при n=5
3) Фильтр Баттерворта 5-го порядка обеспечивает требуемое ослабление в полосе затухания. Определим передаточную функцию K (z) цифрового фильтра:
K (p)=1/Bn (p), где Bn (p)-полином степени n. Для n=5
Bn (p)=
Используем билинейное преобразование p=
K (p)=,
K (z)=
Делаем соответствующие математические преобразования в Maple 11 и получаем:
K (z)= ((0.269 699−0.809 097*z^(-1)+0.809 097*z^(-2)-0.269 699*z^(-3))/(z3−0.503 807*z2+0.586 409*z-0.673 772))*((0.349 231*(z-1)^2)/(z2−0.275 919*z
+0.121 006))
K (z)=
4) Построение АЧХ исходной схемы ЦФВЧ.
5) Выбор величины разрядной сетки, для хранения весовых коэффициентов.
4 разряда
Десятичная с.с. | Двоичная с.с. | Десятичная с.с. | |
0.269 699 (а01,а04) | 0.0100 | 0.25 | |
0.809 097 (а02-а03) | 0.1100 | 0.75 | |
0.503 807 (б01) | 0.1000 | 0.5 | |
0.586 409 (б02) | 0.1001 | 0.5625 | |
0.673 772 (б03) | 0.0001 | 0.0625 | |
0.349 231 (а11,а13) | 0.0101 | 0.3125 | |
0.698 462 (а12) | 0.1011 | 0.6875 | |
0.275 919 (б11) | 0.0100 | 0.25 | |
0.121 006 (б12) | 0.0001 | 0.0625 | |
АЧХ схемы с 4 разрядами.
8 разряда
Десятичная с.с. | Двоичная с.с. | Десятичная с.с. | |
0.269 699 (а01,а04) | 0.1 000 101 | 0.26 953 125 | |
0.809 097 (а02-а03) | 0.11 001 111 | 0.80 859 375 | |
0.503 807 (б01) | 0.10 000 000 | 0.5 | |
0.586 409 (б02) | 0.10 010 110 | 0.5 859 375 | |
0.673 772 (б03) | 0.10 001 | 0.6 640 625 | |
0.349 231 (а11,а13) | 0.1 011 001 | 0.34 765 625 | |
0.698 462 (а12) | 0.10 110 010 | 0.6 953 125 | |
0.275 919 (б11) | 0.1 000 110 | 0.2 734 375 | |
0.121 006 (б12) | 0.11 110 | 0.1 171 875 | |
АЧХ схемы с 8 разрядами.
16 разряда
Десятичная с.с. | Двоичная с.с. | Десятичная с.с. | |
0.269 699 (а01,а04) | 0.100 010 100 001 010 | 0.269 683 837 890 625 | |
0.809 097 (а02-а03) | 0.1 100 111 100 100 000 | 0.80 908 203 125 | |
0.503 807 (б01) | 0.1 000 000 011 111 001 | 0.503 799 438 476 563 | |
0.586 409 (б02) | 0.1 001 011 000 011 110 | 0.586 395 263 671 875 | |
0.673 772 (б03) | 0.1 000 100 111 111 | 0.673 675 537 109 375 | |
0.349 231 (а11,а13) | 0.101 100 101 100 111 | 0.349 227 905 273 438 | |
0.698 462 (а12) | 0.1 011 001 011 001 110 | 0.698 455 810 546 875 | |
0.275 919 (б11) | 0.100 011 010 100 010 | 0.275 909 423 828 125 | |
0.121 006 (б12) | 0.1 111 011 111 010 | 0.121 002 197 265 625 | |
АЧХ схемы с 16 разрядами.
АЧХ исходной схемы и схем 4, 8, 16.
6) Разница между АЧХ исходной схемы и АЧХ схемы с 4 разрядами.
Разница в полосе пропускания 5,598−2.996=2,602
Разница в полосе затухания 37,153−35,520=1,633
Разница между АЧХ исходной схемы и АЧХ схемы с 8 разрядами.
Разница в полосе пропускания 3,072−2.996=0.076
Разница в полосе затухания 35,611−35.520=0.091
Разница между АЧХ исходной схемы и АЧХ схемы с 16 разрядами.
Разница в полосе пропускания 2.996−2.996=0
Разница в полосе затухания 35.520−35.518=0.002
Разница между АЧХ исходной схемы и АЧХ схем 4,8,16 разрядами.
Для того чтобы фильтр удовлетворял заданию, нужно чтобы он отвечал следующим условиям:
— в полосе пропускания не будет отличаться от нормального значения 3 дБ не более чем на 0,01 дБ.
— в полосе затухания будет не менее заданного значения -33дБ.
Как видно из графиков наиболее подходящее значение разрядной сетки равно 16 разрядов.
7) Структурная схема реализации фильтра.
Коэффициенты | |
0.269 699 (а01,а04) | |
0.809 097 (а02-а03) | |
0.503 807 (б01) | |
0.586 409 (б02) | |
0.673 772 (б03) | |
0.349 231 (а11,а13) | |
0.698 462 (а12) | |
0.275 919 (б11) | |
0.121 006 (б12) | |
Каноническая форма реализации фильтра:
Вывод В данном курсовом проекте требовалось построить аналоговый ВЧ-фильтр и путём билинейного Z-преобразования перевести его в цифровую форму. Расчёт показал, что для удовлетворения требований задания необходимо и достаточно применить фильтр Баттерворта 5 порядка. Для цифровой реализации фильтра потребовалось осуществить выбор разрядной сетки для хранения коэффициентов передаточной функции. При 16-и разрядах отклонения укладываются в отведённый диапазон (как видно по графику).
8) Программная реализация цифрового фильтра верхних частот.
Программа выполняет моделирование работы цифрового фильтра высоких частот 6 порядка. По результатам обработки выводятся графики входного аналогового сигнала и выходного цифрового сигнала, полученного в соответствии с заданием на проектирование цифрового фильтра.
Пример работы программы представлен ниже:
program Filter1;
uses
Forms,
UFilterOne in 'UFilterOne.pas' {Form1},
UGenerator in 'UGenerator.pas',
{$R *.res}
begin
Application.Initialize;
Application.CreateForm (TForm1, Form1);
Application.Run;
end.
unit UFilterOne;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Buttons, StdCtrls,
ComCtrls, Spin, Ugenerator, Series, Math;
type
TForm1 = class (TForm)
Button1: TButton;
BitBtn1: TBitBtn;
Label2: TLabel;
SpinEdit3: TSpinEdit;
Label7: TLabel;
Memo2: TMemo;
Label8: TLabel;
Chart1: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
procedure Button1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1. Button1Click (Sender: TObject);
var a, c: real;
k: tGen;
i, j: integer;
f1: Tfilter;
x, y, y1,h: real;
res: Comp;
begin
a:=38;
c:=StrToInt (SpinEdit3.text);
K:=tgen.Init1(c, a);
F1:=Tfilter.Init2;
Chart1.Series[0]. Clear;
Chart1.Series[1].Clear;
for i:=0 to 200 do begin
Chart1.Series[0]. AddXY (k.getTime (i), k. getValue (i));
Chart1.Series[1].AddXY (k.getTime (i), F1. getValueP (k.getValue (i)));
end;
for i:=1 to 380 do begin
if x<=k.getValue (i) then
x:=k.getValue (i);
y:=f1.getValueP (k.getValue (i));
if i>20 then
if y1<=y then
y1:=y;
res:=20*log10(abs (y1/x));
memo2.Lines.Add (FloatToStr (res));
end;
end;
end.
unit UGenerator;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Buttons, StdCtrls,
ComCtrls, Spin, Math;
Type
TGen = class (TObject)
Protected
Fample: real; {Амплитуда}
FVhod: real; {Частота входного сигнала}
Fdec: real; {Частота дескретизации}
Public
Constructor Init1(aVhod, adec: real);
Function getValue (ax: integer): real;
Function getTime (ax: integer): real;
end;
type
TFilter = class (Tobject)
Protected
a01, a02, a03, b01, b02: Real;
a11, a12, a13, b11, b12: Real;
a21, a22, a23, b21, b22: Real;
e01,e02,e03,e04,e05,e06,e07,e08,e09,e10,
e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,
e21,e22,e23,e24,e25,e26,e27,x1, x2, y1,y2: real;
Public
Constructor Init2;
Function getValueP (aX: Real) :Real;
end;
implementation
Constructor TFilter. Init2;
begin
Inherited Create;
a01:=0.562 495; a02:=-0.562 495; b01:=-0.12 499;
a11:=0.47 947; a12:=-2*0.47 947; a13:=0.47 947; b11:=0.378 817; b12:=-0.539 061;
a21:=0.349 231; a22:=-2*0.349 231; a23:=0.349 231; b21:=0.275 919; b22:=-0.121 006;
e01:=0;e02:=0;e03:=0;e04:=0;e05:=0;e06:=0;e07:=0;e08:=0;e09:=0;e10:=0;e11:=0;
e12:=0;e13:=0;e14:=0;e15:=0; x1:=0; x2:=0;y1:=0;y2:=0;
end;
Constructor TGen. Init1(aVhod, adec: real);
begin
inherited Create;
Fample:=1;
Fvhod:=aVhod;
Fdec:=adec;
end;
Function TGen. getValue (aX: Integer): Real;
begin
Result := fAmple * sin (2*Pi * (Fvhod*1000) * getTime (aX));
end;
Function TGen. getTime (aX: Integer): Real;
begin
Result := ax/(fdec*1000);
end;
Function TFilter. getValueP (aX: Real): Real;
begin
x2:=x1;
x1:=ax;
y1:=a01*x1+a02*x2-b01*y1;
e03:=e02;
e06:=e03*a13;
e02:=e01;
e05:=e02*a12;
e01:=y1;
e04:=e01*a11;
e09:=e08;
e11:=e09*b12;
e08:=e07;
e10:=e08*b11;
e07:=e04+e05+e06+e10+e11;
e14:=e09*a23;
e13:=e08*a22;
e12:=e07*a21;
e17:=e16;
e19:=e17*b22;
e16:=e15;
e18:=e15*b21;
e15:=e12+e13+e14+e18+e19;
Result:=e15;
end;
end.
Вывод:
В данной программе был реализован цифровой фильтр верхних частот, в начале временного отчета была произведении задержка на 20 временных единиц, чтобы не попасть в зону переходных процессов, при расчете ослабления.
1 Пронин А. С. Лекции — «Спецпроцессоры в цифровой обработке и передаче информации «.
2 Витязев В. В. — «Цифровая частотная селекция сигналов». Радио и связь. 1993 г.
3 http://model.exponenta.ru — Проектирование цифровых фильтров.