Міністерство Освіти і Науки України
Національний Університет “Львівська Політехніка”
Кафедра ЕОМ
ДІАГНОСТИКА РОБОТИ ЦИФРОВИХ ФІЛЬТРІВ ШЛЯХОМ АНАЛІЗУ ЇХ АМПЛІТУДНО-ЧАСТОТНОЇ ХАРАКТЕРИСТИКИ
Методичні вказівкидо лабораторної роботи № 3 з курсу “Проектування комп’ютерних засобів цифрової обробки сигналів та зображень” для студентів спеціальностей
7.091501 і 8.091501 "Комп'ютерні системи та мережі"
7.091503 і 8.091503 “Спеціалізовані комп'ютерні системи“
Затвердженона засіданні кафедри”Електронних обчислювальних машин”Протокол № 8 від 07.02. 2007 року
Львів – 2007
Діагностика роботи цифрових фільтрів шляхом аналізу їх амплітудно-частотної характеристики: Методичні вказівки до лабораторної роботи № 3 з курсу “Проектування комп’ютерних засобів цифрової обробки сигналів та зображень” для студентів спеціальностей 7.091501 і 8.091501 "Комп'ютерні системи та мережі", 7.091503 і 8.091503 “Спеціалізовані комп'ютерні системи“ / Укладачі: Є. Ваврук, Р. Попович – Львів: Національний університет “Львівська політехніка”, 2007, 12 с.
Укладачі: Є. Ваврук, к.т.н., доцент.
Р. Попович, к.т.н., доцент
Відповідальний за випуск: Мельник А. О., професор, завідувач кафедри
Рецензенти: Тимченко О., д. т. н, професор
Дунець Р.Б., д. т. н, доцент
Мета роботи
Дослідити і проаналізувати параметри амплітудно-частотної характеристики та вплив віконної обробки при спектральному аналізі сигналів.
Теоретичне підґрунтя
Для адекватного відтворення вхідного сигналу, що використовується в системах обробки, які розв’язують задачі спектрального аналізу сигналів, опис вхідного діагностичного сигналу представляється у формалізованому вигляді. Зазначені задачі розв’язуються цифровими методами, на основі швидких дискретних ортогональних перетворень, що представляються узагальненим класом швидких перетворень Фур'є з різними системами базисних функцій. Дані перетворення відносяться до класу лінійних ортогональних перетворень, зв'язаних з обчисленням виразів виду
,
де Х = [Х(0), Х(1), ... , Х(L-1)]Т , х = [х(0), х(1), ... , х(L-1)]Т - вектори, відповідно, вихідних гармонік і початкових відліків, А - відтворююча ортогональна матриця розміром L x L, L- кількість початкових відліків.
Системи, які реалізують ці алгоритми відносяться до стаціонарних систем з частотним коефіцієнтом передачі K(j():
де h(t) - імпульсна характеристика, що має таку інтерпретацію: якщо на вхід системи поступає гармонійний сигнал з відомою частотою ( і комплексною амплітудою , то комплексна амплітуда вихідного сигналу буде рівною:
(1)
Представлення частотного коефіцієнта передачі (див. формулу 1) в показниковій формі має вигляд :
,
де - амплітудно-частотна характеристика (АЧХ).
Оскільки для фільтрів з скінченою імпульсною характеристикою АЧХ є однією з визначальних характеристик, на основі її аналізу визначається достовірність побудови фільтра. Розглянемо варіант перевірки фільтра методом аналізу його АЧХ на прикладі системи опрацювання інформації когерентно-імпульсної РЛС з n каналами погоджених фільтрів. Для процесора, що виконує N-точкове амплітудне дискретне перетворення Фур’є згідно з формулою (2)
, (2)
де N визначає розмір перетворення, n-номер елемента віддалі, l – номер гармоніки, i-номер періоду повторення в межах інтервалу обчислення ДПФ, W(i) вагова функція, вхідний сигнал представимо у вигляді:
, (3)
де А - амплітуда сигналу, S - кількість частотних діапазонів між сусідніми l, Q – визначає смугу перевірки АЧХ (, де m, p - кількість гармонік, в діапазоні яких (відносно l) перевіряється АЧХ, , , si – біжуче значення частотного діапазону між сусідніми l).
Процедура діагностики відбувається таким чином. Для процесора задається значення гармоніки lj. На його інформаційні входи поступає вхідний сигнал . Зміна значень (синфазна і квадратурна складові) на вході процесора відбувається на кожному періоді повторення (по і). Одне значення визначається сумуванням по і (див.формулу 2). Після того змінюється частота поступлення , зміна задається значенням , і вираховується наступне значення .
Повна АЧХ, для заданого lj, отримується після поступлення на вхід S*N значень вхідного сигналу. На практиці обмежуються перевіркою АЧХ для (3l, відносно lj. Після перевірки амплітудно-частотних характеристик для всіх гармонік і елементів віддалі процес діагностики завершується. В ідеальному випадку характеристики всіх АЧХ повинні бути ідентичними.
Тобто, при використанні такого підходу процес перевірки розбивається на три етапи:
- задання значень для отримання числової послідовності вхідних сигналів;
- визначення значень Y(n,l) реальної АЧХ;
- порівняння значень ідеальної і реальної АЧХ в кожній точці виміру.
Застосування підходу дозволяє:
- виявити помилки в роботі з точністю до функціонального вузла, наприклад помилки в заданні вагової функції, при сумуванні, в ОЗП проміжних результатів, при пересиланні інформації між процесорами, конструктивні та технологічні помилки при проектуванні цифрових вузлів і т.п.;
- проводити діагностику в режимі реального часу;
- перевірити правильність функціювання і рівень шумів зовнішніх пристроїв, наприклад, приймача проміжної частоти;
- оцінити вплив різних типів вагових функцій на значення вихідного сигналу;
- перевірити в РРЧ значення інформації, що поступає на вхід системи опрацювання шляхом її запису в ОЗП;
- перевірити точностні параметри роботи процесорів;
- перевірити реакцію фільтра на поступлення збійної інформації.
Найвживаніші вагові функції, що використовуються при обробці наведені в таблиці 1.
Таблиця 1
Номер функції
Назва
Тип функції
Діапазон зміни n
1
Рімана
–N/2 ( n ( N/2 – 1
2
Валле-Пусена
0 ( (n( ( N/4
N/4 ( (n( ( N/2
3
Тюкі
0 ( (n( ( a N/2
a N/2 ( (n( ( N/2
a = 0,25
a = 0,5
a = 0,75
4
Бомана
0 ( (n( ( N/2
5
Пуасона
0 ( (n( ( N/2
5-1 a = 2,0
5-2 a = 3,0
5-3 a = 4,0
6
Хеннінга-Пуасона
0 ( (n( ( N/2
6-1 a = 0,5
6-2 a = 1,0
6-3 a = 2,0
7
Коші
0 ( (n( ( N/2
7-1 a = 3,0
7-2 a = 4,0
7-3 a = 5,0
8
Трикутне
0 ( (n( ( N/2
9
Ханна
(косинус квадрат)
0 ( (n( ( N/2
10
Геммінга
0 ( (n( ( N/2
а = 0,54
11
Блекмана
0 ( (n( ( N/2
12
Гауса
0 ( (n( ( N/2
а = 2,5
13
Cosa
0 ( (n( ( N/2
13-1 a = 1,0
13-2 a = 3,0
13-3 a = 4,0
14
Рісса
0 ( (n( ( N/2
15
w(n) = 0.25 + 0,75 cos [ ((n-16)/32]
16
w(n) = 0.4 + 0,6 cos [((n-15,5)/31].
Примітка: Значення w(n) таблиці 1 відповідає значенню W(i) (див. формулу 2).
Алгоритм формування вхідних даних для формування АЧХ полягають у видачі на кожному етапі обчислень синусоїдальної і косинусоїдальної складової комплексного сигналу, фаза яких відрізняється на значення Q на двох сусідніх періодах, на кожному з яких обчислюється одне значення U (i)
Порядок виконання роботи
Налаштувати фільтр на виконання заданого варіанту - сформувати масив синусоїдальної і косинусоїдальної складової згідно з виразом:
Сформувати вхідний масив (синусоїдальна і косинусоїдальна складові) згідно з формулою 3.
Сформувати масив вагової функції
Скласти процедуру на мові високого рівня для обчислення АЧХ згідно з формулою 2.
Скласти процедуру графічного виводу значень АЧХ: без вагової функції та з ваговою функцією.
Порівняти значення АЧХ, пояснити отримані результати.
Примітка: Передбачити можливість зміни в програмі всіх вхідних параметрів і констант.
Зміст звіту до лабораторної роботи
Завдання на лабораторну роботу.
Теоретичний матеріал.
Лістінг підпрограми і результати формування вхідного масиву (таблиця або графік).
Лістінг підпрограми і результати формування масиву вагової функції (таблиця або графік).
Лістінг програми і результати формування АЧХ (таблиця і графік) для двох випадків: без вагової функції та з ваговою функцією.
Висновки.
Контрольні запитання
Дайте визначення АЧХ.
Фізичний зміст гармоніки?
Опишіть процедуру проведення діагностування.
На якому етапі завершується діагностування?
Які переваги має використання АЧХ для перевірки цифрових фільтрів?
Література
Айфигер, Эммануил С., Джервис, Барри У. Цифровая обработка сигналов: практический поход, 2-е изд.: Пер. с англ. – М.: Издательский дом “Вильямс”, 2004. – 992с.
Бабак В.П., Хандецький А.І., Шрюфер Е. Обробка сигналів: підручник для вузів., К., Либідь, 1996.- 390с.
Цифровая обработка сигналов/ А.Б.Сергиенко – СПб.:Питер, 2002.
Бондарев В.Н., Трестер Г., Чернега В.С. Цифровая обработка сигналов: методы и средства. - Харьков: Конус, 2001 (підручник для вузів).
Л.Рабинер, Б.Гоулд. Теория и применение цифровой обработки сигналов.-М.:Мир, 1978.-848 с.
Варіанти завдань до лабораторної роботи
№ вар
N
l
Sm
Sp
S
A
№ вагової функції
1
16
0; 5
-32
32
16
1
15
2
16
0; 8
-24
24
16
2
16
3
16
7
-48
48
16
3
14
4
16
9
-64
16
16
4
13-1
5
16
4
-16
16
8
5
13-2
6
16
10
-20
16
8
6
13-3
7
16
0; 15
-22
16
8
7
12
8
16
5
-26
16
8
8
11
9
16
0; 7
-28
16
16
9
10
10
16
0; 11
-34
16
16
10
9
11
16
8
-36
16
16
11
8
12
16
6
-38
16
16
12
7-1
13
16
3
-40
16
8
13
7-2
14
16
2
-42
16
8
14
7-3
15
16
0; 12
-44
16
8
15
6-1
16
32
14
-32
32
8
1
6-2
17
32
0; 31
-48
32
24
2
6-3
18
32
0; 15
-48
48
24
3
5-1
19
32
3
-32
48
24
4
5-2
20
32
5
-48
64
24
5
5-3
21
32
7
-48
50
8
6
4
22
32
9
-64
32
8
7
3-3
23
32
11
-64
40
8
8
3-2
24
32
13
-64
42
8
9
3-3
25
32
17
-34
44
16
10
2
26
32
19
-36
44
16
11
1
27
32
21
-38
46
16
12
15
28
32
23
-54
48
16
13
16
29
32
25
-56
60
24
14
14
30
32
27
-58
32
24
15
13-1
Приклад виконання
Завдання:
Проаналізувати амплітудно-частотну характеристику фільтру з такими параметрами сигналу: l = 0,1, ...,31; А = 1, 2,...,100; S = 8, 16; Q = -64...64; N = 0,1, …, 31.
Хід роботи
Згідно поданих вище формул при заданих значення параметрів вхідного сигналу та цифрового фільтру, що тестується будуємо масиви значень синусів та косинусів за таким алгоритмом:
for(i = 0; i < N; i++)
{
sin0[i] = sin(2*pi*i/N);
cos0[i] = cos(2*pi*i/N);
}
for(i = 0; i < SN; i++)
{
sin1[i] = sin(2*pi*i/SN);
cos1[i] = cos(2*pi*i/SN);
}
, де N – розмір перетворення, а SN – добуток N та S .
Далі обчислюється значення дійсної та уявної частини, що утворилися як результат добутку та представлених у тригонометричній формі. Значення синусів та косинусів вибираємо із масивів отриманих на попередньому етапі.:
for(i = 0; i < N; i++)
{
a = (abs(S*l+Qmin)*i)%SN;
b = l*i%N;
Re += A*cos1[a]*cos0[b] + A*sin1[a]*sin0[b];
Im += A*cos1[a]*sin0[b] - A*sin1[a]*cos0[b];
}
Обчислюємо значення координати Y для відображення результату:
Y[j] = sqrt(pow(Re, 2) + pow(Im, 2));
Повний лістинг програми подано у Додатку.
Методика проведення дослідження
При запуску програми з’являється головне вікно (див. рис.1):
Рис.1. Головне вікно програми
На рис.1. наведені основні формули, що використовується при проведенні аналізу та поля, в яких можна задати параметри сигналу та фільтру, що досліджується. Змінювати дані параметри можна натискаючи мишкою на стрілки, що містяться біля кожного поля праворуч.
Для перегляду результату у графічному представленні натисніть клавішу <Vizualize>. Графік АЧХ наведений на рис.2.
Рис.2. Графік АЧХ
Для отримання табличного представлення результату натисніть клавішу <Table>. Фрагмент значень АЧХ наведений в таблиці на рис.3.
Рис.3. Значення АЧХ (фрагмент)
Висновок: Розроблена програма дозволяє провести діагностику цифрових фільтрів шляхом аналізу їх амплітудно-частотної характеристики при широкому спектрі параметрів вхідного сигналу. Графічне представлення результату дозволяє легше сприймати та оцінювати інформацію, а таблиця подає точні результати обчислень на всій смузі перевірки.
Додаток
Program ACH
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Graph); /* TFrame: File Type */
USEFORM("Unit3.cpp", Form3);
USEFORM("Unit4.cpp", Form4);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->Title = "CMP";
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm4), &Form4);
Application->CreateForm(__classid(TGraph), &Graph);
Application->CreateForm(__classid(TForm3), &Form3);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//#define Nv 32//
//#define Sv 8//Edit4->Text.ToInt()
//#define SN (Sv*Nv)//(Edit2->Text.ToInt()*Edit4->Text.ToInt())
//#define lv 1//Edit3->Text.ToInt()
//#define Av 1
double Y[1024];
double sin0[32];
double sin1[512];
double cos0[32];
double cos1[512];
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include "math.h"
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "Unit2"
#pragma resource "*.dfm"
void Apply(void);
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Apply();
Form3->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Apply();
Form4->Show();
Form4->StringGrid1->Cells[0][0]="X";
Form4->StringGrid1->Cells[1][0]="Y";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::QpChange(TObject *Sender)
{
char buf[5];
if(Qp->Text.ToInt()<= Qm->Text.ToInt())
Qp->Text=itoa((Qm->Text.ToInt()+1),buf,10);
Form4->StringGrid1->RowCount=abs(Qm->Text.ToInt())+abs(Qp->Text.ToInt());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::QmChange(TObject *Sender)
{
char buf[5];
if(Qp->Text.ToInt()<= Qm->Text.ToInt())
Qm->Text=itoa((Qp->Text.ToInt()-1),buf,10);
Form4->StringGrid1->RowCount=abs(Qm->Text.ToInt())+abs(Qp->Text.ToInt());
}
//---------------------------------------------------------------------------
void Apply(void)
{
int N = Form1->Edit2->Text.ToInt();
int S = Form1->Edit4->Text.ToInt();
int SN = (S*N);
int l = Form1->Edit3->Text.ToInt();
int A = Form1->Edit1->Text.ToInt();
int Qmin = Form1->Qm->Text.ToInt();
int Qmax = Form1->Qp->Text.ToInt();
//**************************************
char buf[55];
char *buf_ptr;
int j = 0;
int i;
double pi = 3.141592653589793;
double Re = 0;
double Im = 0;
int a;
int b;
//****************************************
Form3->Series1->Clear();
for(i = 0; i < N; i++)
{
sin0[i] = sin(2*pi*i/N);
cos0[i] = cos(2*pi*i/N);
}
for(i = 0; i < SN; i++)
{
sin1[i] = sin(2*pi*i/SN);
cos1[i] = cos(2*pi*i/SN);
}
do
{
for(i = 0; i < N; i++)
{
a = (abs(S*l+Qmin)*i)%SN;
b = l*i%N;
Re += A*cos1[a]*cos0[b] + A*sin1[a]*sin0[b];
Im += A*cos1[a]*sin0[b] - A*sin1[a]*cos0[b];
}
Y[j] = sqrt(pow(Re, 2) + pow(Im, 2));
Re = Im = 0;
buf[0] = ' ';
itoa(Qmin, buf+1, 10);
buf[strlen(buf) + 1]='\0';
buf[strlen(buf)]=' ';
Form3->Series1->AddXY(j, Y[j], (itoa(Qmin, buf+1, 10)-1), clBlue);
Form4->StringGrid1->Cells[1][j+1]=Y[j];
Form4->StringGrid1->Cells[0][j+1]=Qmin;
j++;
}
while(Qmin++ < Qmax);
}
//---------------------------------------------------------------------------