Міністерство освіти та науки України
Національний університет „Львівська політехніка”
кафедра ЕОМ
Лабораторна робота №4
Діагностика роботи цифрових фільтрів шляхом аналізу їх амплітудно-частотної характеристики.
Мета роботи: Дослідити параметри амплітудно-частотної характеристики та вплив віконної обробки при спектральному аналізі сигналів.
Завдання:
22
32
13
-64
32
8
7
3-3
Загальні відомості.
Для адекватного відтворення вхідного сигналу, що використовується в системах обробки, які розв’язують задачі спектрального аналізу сигналів, опис вхідного діагностичного сигналу представляється у формалізованому вигляді. Зазначені задачі розв’язуються цифровими методами, на основі швидких дискретних ортогональних перетворень, що представляються узагальненим класом швидких перетворень Фур'є з різними системами базисних функцій. Дані перетворення відносяться до класу лінійних ортогональних перетворень, зв'язаних з обчисленням виразів виду
,
де Х = [Х(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) реальної АЧХ;
- порівняння значень ідеальної і реальної АЧХ в кожній точці виміру.
Застосування підходу дозволяє:
- виявити помилки в роботі з точністю до функціонального вузла, наприклад помилки в заданні вагової функції, при сумуванні, в ОЗП проміжних результатів, при пересиланні інформації між процесорами, конструктивні та технологічні помилки при проектуванні цифрових вузлів і т.п.;
- проводити діагностику в режимі реального часу;
- перевірити правильність функціювання і рівень шумів зовнішніх пристроїв, наприклад, приймача проміжної частоти;
- оцінити вплив різних типів вагових функцій на значення вихідного сигналу;
- перевірити в РРЧ значення інформації, що поступає на вхід системи опрацювання шляхом її запису в ОЗП;
- перевірити точностні параметри роботи процесорів;
- перевірити реакцію фільтра на поступлення збійної інформації.
Bаговa функція, що використовується при обробці наведена в таблиці 1.
Таблиця 1
Номер функції
Назва
Тип функції
Діапазон зміни n
3
Тюкі
0 ( (n( ( a N/2
a N/2 ( (n( ( N/2
a = 0,25
a = 0,5
a = 0,75
Примітка: Значення w(n) таблиці 1 відповідає значенню W(i) (див. формулу 2).
Алгоритм формування вхідних даних для формування АЧХ полягають у видачі на кожному етапі обчислень синусоїдальної і косинусоїдальної складової комплексного сигналу, фаза яких відрізняється на значення Q на двох сусідніх періодах, на кожному з яких обчислюється одне значення U (i)
Лістинг програми:
#define N 128
#define Q_RANGE 256
class Tdoc {
public:
TDoc();
int initU(int Q);//int NN,int l,int Sm,int Sp,int S,int A);
int ach();
complex<double> getResult(int i){ return Y[i];};
complex<double> getResultW(int i){ return YW[i];};
complex<double> getU(int i){ return U[i];};
double W(int n);
void setSm(int p){Sm=p;};
void setSp(int p){Sp=p;};
void setS(int p){S=p;};
void setA(double p){A=p;};
void setL(int p){l=p;};
void setL2(int p){l2=p;};
int getSm(){return Sm;};
int getSp(){return Sp;};
int getS(){return S;};
double getA(){return A;};
int getL(){return l;};
int getL2(){ return l2;};
~TDoc(){};
private:
complex<double> Y[Q_RANGE],YW[Q_RANGE],U[N];
int Sm,Sp,S,l,l2;
double A;
};
TDoc::TDoc(){
for (int i=0;i<N-1;i++){
Y[i]= complex<double>(2.0,0.0);
YW[i] = complex<double>(3.0,0.0);
U[i]= complex<double>(-2.0,0.0);
};
Sm = -64;
Sp = 32;
S = 8;
A = 7.0;
}
int TDoc::ach(){
for(int k=Sm;k<Sp-1;k++){
initU(k);//N,l,-64,42,8,9);
Y[k-Sm] = complex<double>(0.0,0.0);
YW[k-Sm] = complex<double>(0.0,0.0);
for(int i=0;i<N-1;i++){
Y[k-Sm] = Y[k-Sm]+U[i]*exp(complex<double>(0,-2*M_PI*l*i/N));
YW[k-Sm] = Y[k-Sm]+U[i]*W(i)*exp(complex<double>(0,-2*M_PI*l*i/N));
};
};
return 0;
}
double TDoc::W(int n)
{
double a=0.75;
if((abs(n)>=0)&&(abs(n)<=a*N/2)) return 1.0;
else return 0.5*(1.0+cos(M_PI*(n-a*N/2)/(2*(1-a)*N/2)));
}
int TDoc::initU(int Q){
for(int i=0;i<N-1;i++){
U[i] = exp(complex<double>(0,2*M_PI*i*(S*l2+Q)/(S*N)));
};
return 0;
}
Висновок.
На цій лабораторній роботі я дослідив швидкі алгоритми дискретних тригонометричних перетворень і порівняв їх з алгоритмами безпосереднього обчислення тpигонометpних перетворень.