В данной работе было осуществлено проектирование цифрового фильтра верхних частот Чебышева первого типа, который удовлетворяет спецификациям, указанным в задании. В качестве метода проектирования был выбран переход от аналогового прототипа непосредственно к цифровому фильтру путем билинейного преобразования. Результаты проектирования представлены в виде графиков амплитудно-частотной, фазочастотной характеристик, а также диаграммы нулей и полюсов, которые являются доказательством того, что фильтр соответствует заданной спецификации. Небольшие отклонения имеют граничные частоты полосы пропускания и полосы задерживания, но при этом уменьшается переходная полоса фильтра, что является весьма желательным. В ходе анализа методов реализации фильтров, была выбрана последовательная (каскадная) реализация, поскольку реальные цифровые фильтры имеют ограничения по количеству разрядов в коэффициентах, а такой метод позволяет заметно снизить погрешности, оказываемые квантованием и округлением.
Тестирование реализованного фильтра показало, что фильтр работает именно так, как требовалось: пропускает высокочастотные составляющие сигнала и подавляет низкочастотные. К тому же программное представление фильтра доказало быстродействие операции фильтрации, поэтому можно смело сказать, что такой фильтр может быть использован по назначению в больших вычислительных программах, не замедляя при этом всего процесса.
1. Доц. Щетинин Ю.И. Конспект лекций по курсу «Теории и обработки сигналов». Лекции №24-28. 2005-2006 учебный год.
2. Богнер Р., Константинидис А. Введение в цифровую фильтрацию. М.: Мир,1976 – 216 с.
3. Применение цифровой обработки сигналов. Под ред. Э.Оппенгейма. М.:Мир,1980–552с.
4. Голышев Н.В., Щетинин Ю.И. Теория и обработка сигналов, часть 2. - Учебное пособие. - Новосибирск: НГТУ 1998. -115 с.
Приложение 1. Программа фильтра на С++.
Листинг кода программы:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#include <windows.h>
int N=1000,M=14,Fd=5000; //количество отсчетов, порядок фильтра и частота //дискретизации
double pi=3.141592653589;
double b,var,a,var1, //обозначение промежуточных переменных
x[10000], //отсчеты входного сигнала фильтра
y[10000], //отсчеты выходного сигнала фильтра
out1[10000],
out2[10000],
out3[10000],
out4[10000],
out5[10000],
out6[10000],
out7[10000],
//формирование передаточных функций звеньев второго порядка:
num1[3]={1,- 2.1054687500. 1.1054687500},
den1[3]={1, 0.710937500, 0.2851562500},
num2[3]={1-2.06250000, 1.0625000000},
den2[3]={1, -0.28906250, 0.582031250},
num3[3]={1-1.902343750, 0.902343750},
den3[3]={1, -0.96093750,0.734375000},
num4[3]={1-1.996093750, 0.89843750.},
den4[3]={1,0.03125000,0.816406250},
num5[3]={1-1.937500, 0.937500},
den5[3]={1-1.433593750, 0.9687500},
//описание функции filter(), осуществляющей фильтрацию
double filter(double x[],int n, double numc[],double denc[])
{
for(int i=0;i<M+1;i++)
{
var=numc[i]*x[n-i]; //вычисление суммы элементов bk*x(n-k)
b=var+b;
}
for(i=1;i<M+1;i++)
{
var1=denc[i]*y[n-i]; //вычисление суммы элементов ak*y(n-k)
a=var1+a;
}
y[n]=b-a; //вычисление выходного сигнала фильтра
//по уравнению y(n)=bk*x(n-k)-ak*y(n-k)
return y[n];
}
void main()
{
for(int n=0;n<N;n++)
{ //формирование отсчетов входного сигнала
x[n]=2*cos((2*pi*100*n)*1/Fd)+cos((2*pi*1500*n)*1/Fd);
}
double time,time1;
time=GetTickCount(); //определение текущего времени
for(n=0;n<N;n++) //фильтрация входного сигнала
{ //постепенное прохождение входного сигнала через все звенья системы:
out1[n]=filter(x,n,num1,den1);
out2[n]=filter(out1,n,num2,den2);
out3[n]=filter(out2,n,num2,den2);
out4[n]=filter(out3,n,num2,den2);
out5[n]=filter(out4,n,num2,den2);
out6[n]=filter(out5,n,num2,den2);
out7[n]=filter(out6,n,num2,den2);
}
time1=GetTickCount()-time; //определение времени выполнения фильтрации
cout<<"Number of samples : ";
cout<<"N="<<N<<endl;
cout<<"Time of filtering : ";
cout<<time1<<" ms"<<endl;
cout<<"Time of filtering one sample: ";
cout<<(time1)/N<<" ms"<<endl;
getch();
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.