F3=filter(n3,d3,F2);
F4=filter(n4,d4,F3);
F5=filter(n5,d5,F4);
F6=filter(n6,d6,F5);
figure(6)
subplot(2,1,1), plot(n,y2),
set(gca,'FontName','Times New Roman Cyr','FontSize',12),
title('Гармоника 50 Гц');
subplot(2,1,2), plot(n,F6),
set(gca,'FontName','Times New Roman Cyr','FontSize',12),
title('Сигнал на выходе фильтра');
Рис.8. Сигнал с частотой 150Гц и сигнал на выходе фильтра
Рис.9. Сигнал с частотой 150Гц и сигнал
на выходе фильтра (увеличенный масштаб)
По графику видно, что фильтр ослабляет сигнал из полосы задерживания. Ослабление сигнала удовлетворяет заданным требованиям:
20*log10((y2)/(F6))= -73.64039560903301 Дб
5.4. Фильтрация сигнала частотой из полосы пропускания
y3 =cos(2*pi*70*(1/Ft)*n); % 70 Гц (в полосе пропускания)
F1=filter(n1,d1,y3);
F2=filter(n2,d2,F1);
F3=filter(n3,d3,F2);
F4=filter(n4,d4,F3);
F5=filter(n5,d5,F4);
F6=filter(n6,d6,F5);
figure(7)
subplot(2,1,1), plot(n,y3),
set(gca,'FontName','Times New Roman Cyr','FontSize',12),
title('Гармоника 70 Гц');
subplot(2,1,2), plot(n,F6),
set(gca,'FontName','Times New Roman Cyr','FontSize',12),
title('Сигнал на выходе фильтра');
Рис.10. Сигнал с частотой 70Гц и сигнал на выходе фильтра
По графику видно, что сигнал с частотой из полосы пропускания проходит полностью лишь с ослаблением в пределах допустимого:
20*log10(max(y3)/max(F6)) = 0.03971813396194 Дб
6. Программирование фильтра и оценка быстродействия
Для программирования фильтра и анализа его быстродействия полученного фильтра используется программа на языке С++, позволяющая определить время, за которое программный фильтр обрабатывает входной сигнал с заданным количеством отсчетов.
Код программы тестирования фильтра :
#include <stdio.h>
#include <iostream.h>
#include <math.h>
#include <windows.h>
#include <conio.h>
#define N 100000
int por=2, Fd=500; // порядок фильтров для каскадной формы и частота отсчетов
double b,B,a,A,
y[100000], // массив для формирования отсчетов выходного сигнала
x[100000], // массив для формирования отсчетов входного сигнала
F1[100000], // массивы передачи сигнала между элементами каскадной формы фильтра
F2[100000], F3[100000], F4[100000], F5[100000], F6[100000];
double //коэф-ты полиномов числителя и знаменателя :
n1[3]={0.85432024970523, -1.39165963991533, 0.86510055898402},
d1[3]={1.00000000000000, -1.56929016354379, 0.96460591251597},
n2[3]={1.00000000000000, -1.63535353521533, 1.01074516667436},
d2[3]={1.00000000000000, -1.61713397214427, 0.96646927819649},
n3[3]={1.00000000000000, -1.60831824766117, 0.98936049739017},
d3[3]={1.00000000000000, -1.60279010156957, 0.99450138797575},
n4[3]={1.00000000000000, -1.61465680040524, 0.98758101655097},
d4[3]={1.00000000000000, -1.63170546722370, 0.99468540627541},
n5[3]={1.00000000000000, -1.61536620169288, 1.00181177768894},
d5[3]={1.00000000000000, -1.60934397796041, 0.99841911109092},
n6[3]={1.00000000000000, -1.62808518506543, 0.99815733390805},
d6[3]={1.00000000000000, -1.63135243556073, 0.99858549110240};
double Chebishev(double x[],int n, double m1[],double m2[]) // функция расчета выходного //сигнала
{
for(int i=0;i<por+1;i++)
{
b=m1[i]*x[n-i];
B=b+B;
}
for(int i=1;i<por+1;i++)
{
a=m2[i]*y[n-i];
A=a+A;
}
y[n]=B-A;
return y[n];
}
DWORD WINAPI Thread_filter(LPVOID) // поток для фильтрации сигнала
{
double Chebishev(double x[],int n,double m1[],double m2[]);
double count,total;
count = GetTickCount(); // счетчик времени
for(int n=0;n<N;n++) // фильтрация входного сигнала
{
F1[n]=Chebishev(x,n,n1,d1);
F2[n]=Chebishev(F1,n,n2,d2);
F3[n]=Chebishev(F2,n,n3,d3);
F4[n]=Chebishev(F3,n,n4,d4);
F5[n]=Chebishev(F4,n,n5,d5);
F6[n]=Chebishev(F5,n,n6,d6); }
total = GetTickCount() - count; // вычисление времени фильтрации входного //сигнала
cout<<"Time : ";
cout<<total<<" ms"<<endl;
return 0;
}
void main()
{
unsigned long ThreadId;
for(int j=0;j<N;j++)
{
x[j]=2*cos((2*M_PI*150*j)*1/Fd)+cos((2*M_PI*70*j)*1/Fd); // входной сигнал
}
CreateThread(NULL,0,Thread_filter,x,0,&ThreadId); // запуск потока фильтрации //сигнала
getch();
}
На компьютере с процессором Intel Core 2 Duo тактовой частотой 2.40 ГГц время фильтрации входного сигнала, являющегося суммой гармоник частотой 150 и 70 Гц при количестве отсчетов N=100000 составило 797мс = 0.797 секунды, следовательно, один отсчет выполняется за 7.9 мкс.
Максимальная частота, с которой способен работать цифровой фильтр, обратно пропорциональна времени обработки одного отсчета, т.е. fmax= 126,5 КГц.
Заключение
В результате курсовой работы был спроектирован режекторный эллиптический БИХ-фильтр (Чебышева-Кауэра), удовлетворяющий требованиям задания. При проектировании применялся метод аналогового прототипа, а переход к цифровому фильтру был осуществлен с помощью метода билинейного преобразования. Реализация полученного фильтра выполнена в форме последовательного соединения шести каскадов 2-го порядка. Тестирование фильтра показало его работоспособность: он отфильтровывает сигналы с частотами из полосы задерживания и пропускает сигналы с частотами из полосы пропускания. Быстродействие фильтра составляет 7.9 мкс на отсчет, что даёт предельную рабочую частоту 126,5 КГц.
Список используемой литературы
1. Конспект лекций по дисциплине «Теория и обработка сигналов», семестр 6 (2009-2010 учебный год), автор доц. Щетинин Ю.И.
2. Голышев Н.В., Щетинин Ю.И. Теория и обработка сигналов: Учеб. пособие. – Новосибирск. Изд-во НГТУ, 1998. – Ч.2. – 115 с.
3. Голышев Н.В., Щетинин Ю.И. Задачник – практикум по теории и обработке сигналов: Учебное пособие – Новосибирск. Изд-во НГТУ, 2001. – Ч.2. – 80 с.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.