Діагностика роботи цифрових фільтрів шляхом аналізу їх амплітудно-частотної характеристики

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
КСС
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2015
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Проектування комп’ютерних засобів обробки сигналів та зображень

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЕОМ ЗВІТ до лабораторної роботи №2 на тему: «Діагностика роботи цифрових фільтрів шляхом аналізу їх амплітудно-частотної характеристики» з дисципліни: «Проектування комп'ютерних засобів обробки сигналів і зображень» Львів – 2015 Мета роботи: Дослідити і проаналізувати параметри амплітудно-частотної характеристики та вплив віконної обробки при спектральному аналізі сигналів. Завдання: № варіанту N l Sm Sp S A № вагової функції  27 32 21 -38 46 16 12 15   Номер функції Назва Тип функції Діапазон зміни n  15  w(n) = 0.25 + 0,75 cos [ ((n-16)/32]    Теоретичні відомості Для адекватного відтворення вхідного сигналу, що використовується в системах обробки, які розв’язують задачі спектрального аналізу сигналів, опис вхідного діагностичного сигналу представляється у формалізованому вигляді. Зазначені задачі розв’язуються цифровими методами, на основі швидких дискретних ортогональних перетворень, що представляються узагальненим класом швидких перетворень Фур'є з різними системами базисних функцій. Дані перетворення відносяться до класу лінійних ортогональних перетворень, зв'язаних з обчисленням виразів виду , де Х = [Х(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) реальної АЧХ; - порівняння значень ідеальної і реальної АЧХ в кожній точці виміру. Застосування підходу дозволяє: - виявити помилки в роботі з точністю до функціонального вузла, наприклад помилки в заданні вагової функції, при сумуванні, в ОЗП проміжних результатів, при пересиланні інформації між процесорами, конструктивні та технологічні помилки при проектуванні цифрових вузлів і т.п.; - проводити діагностику в режимі реального часу; - перевірити правильність функціювання і рівень шумів зовнішніх пристроїв, наприклад, приймача проміжної частоти; - оцінити вплив різних типів вагових функцій на значення вихідного сигналу; - перевірити в РРЧ значення інформації, що поступає на вхід системи опрацювання шляхом її запису в ОЗП; - перевірити точностні параметри роботи процесорів; - перевірити реакцію фільтра на поступлення збійної інформації. Алгоритм формування вхідних даних для формування АЧХ полягають у видачі на кожному етапі обчислень синусоїдальної і косинусоїдальної складової комплексного сигналу, фаза яких відрізняється на значення Q на двох сусідніх періодах, на кожному з яких обчислюється одне значення U (i). Хід роботи 1. Формуємо масив синусоїдальної і косинусоїдальної складової згідно з виразом і згідно завдання:  for(i = 0; i < N; i++) { sin0[i] = sin(2*pi*i*l/N); cos0[i] = cos(2*pi*i*l/N); } 2. Сформувати вхідний масив (синусоїдальна і косинусоїдальна складові) згідно з формулою 3.  де  for (n=0;n<=Sp-Sm+1;n++) for(i = 0; i <= N; i++) { sin1[n][i] =Asin[2*pi(Sl+Sm+n)i/SN]; cos1[n][i] =Acos[2*pi(Sl+Sm+n)i/SN]; } 3. Сформувати масив вагової функції W(i) згідно варіанту завдання. Для вагової функції №27 обчислення виконується згідно виразу: w(n) = 0.25 + 0,75 cos [ ((n-16)/32] 4. Скласти процедуру на мові високого рівня для обчислення АЧХ згідно з формулою 2  a) з ваговою функцією for (n=0;n<=Sp-Sm+1;n++) for(i = 0; i <= N; i++) { Y0[n]=Y0[n]+W[і]*(Acos1[n][i]*cos0[i]+Asin1[n][i]*sin0[i]) Y1[n]=Y1[n]+W[і]*(Asin1[n][i]*cos0[i]-Acos1[n][i]*sin0[i]) } b) без вагової функції for (n=0;n<=Sp-Sm+1;n++) for(i = 0; i <= N; i++) { Y0[n]=Y0[n]+(Acos1[n][i]*cos0[i]+Asin1[n][i]*sin0[i]) Y1[n]=Y1[n]+(Asin1[n][i]*cos0[i]-Acos1[n][i]*sin0[i]) } 5. Скласти процедуру графічного виводу значень АЧХ з використанням вагової функції і без її використання та порівняти отримані результати. Значення координати Y для відображення результату обчислюємо за формулою: Y[n] = sqrt(pow(Y0[n][l],2) + pow(Y1[n][l],2)); Результати виконання індивідуального завдання  Рис. 1. Результат роботи програми Лістинг програми using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ZedGraph; namespace Zakrevskyi { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void zedGraph_Load(object sender, EventArgs e) { // DrawGraph(); } private void button1_Click(object sender, EventArgs e) { DrawGraph(); } private void DrawGraph() { ZedGraph.MasterPane masterPane = zedGraph.MasterPane; masterPane.PaneList.Clear(); GraphPane pane = new GraphPane(); GraphPane pane1 = new GraphPane(); // GraphPane pane2 = new GraphPane(); int labelsXfontSize = 25; int labelsYfontSize = 20; int titleXFontSize = 25; int titleYFontSize = 20; int legendFontSize = 25; int mainTitleFontSize = 45; // Установим размеры шрифтов для меток вдоль осей pane.XAxis.Scale.FontSpec.Size = labelsXfontSize; pane.YAxis.Scale.FontSpec.Size = labelsYfontSize; // Установим размеры шрифтов для подписей по осям pane.XAxis.Title.FontSpec.Size = titleXFontSize; pane.YAxis.Title.FontSpec.Size = titleYFontSize; pane.Legend.FontSpec.Size = legendFontSize; pane.Title.FontSpec.Size = mainTitleFontSize; pane.Title.FontSpec.IsUnderline = true; pane.XAxis.Title.Text = "X"; pane.YAxis.Title.Text = "Y"; // Установим размеры шрифтов для меток вдоль осей pane1.XAxis.Scale.FontSpec.Size = labelsXfontSize; pane1.YAxis.Scale.FontSpec.Size = labelsYfontSize; // Установим размеры шрифтов для подписей по осям pane1.XAxis.Title.FontSpec.Size = titleXFontSize; pane1.YAxis.Title.FontSpec.Size = titleYFontSize; pane1.Legend.FontSpec.Size = legendFontSize; pane1.Title.FontSpec.Size = mainTitleFontSize; pane1.Title.FontSpec.IsUnderline = true; pane1.XAxis.Title.Text = "X"; pane1.YAxis.Title.Text = "Y"; try { DrawSingleGraph(pane); DrawSingleGraph1(pane1); } catch (Exception ex) { MessageBox.Show("Введіть дані ще раз", ex.Message); } masterPane.Add(pane); masterPane.Add(pane1); using (Graphics g = CreateGraphics()) { masterPane.SetLayout(g, PaneLayout.SingleColumn); } zedGraph.AxisChange(); zedGraph.Invalidate(); } private void DrawSingleGraph(GraphPane pane) { int Sm = Convert.ToInt32(textBoxSm.Text); int Sp = Convert.ToInt32(textBoxSp.Text); int N = Convert.ToInt32(textBoxN.Text); int l = Convert.ToInt32(textBoxl.Text); int S = Convert.ToInt32(textBoxS.Text); int A = Convert.ToInt32(textBoxA.Text); double [] s=new double[105]; for (int k = Sm, j=0; k < Sp - 1; k++, j++) { s[j] = k; } double [] sin0=new double[512]; double [] cos0= new double[512]; double [] sin1=new double[512]; double [] cos1=new double[512]; double Re=0; double Im =0; double [] y=new double[512]; double[] yw = new double[512]; for (int i = 0; i < N; i++) { sin0[i] = Math.Sin(2 * Math.PI * i / N); cos0[i] = Math.Cos(2 * Math.PI * i / N); } for (int i = 0; i < (S*N); i++) { sin1[i] = Math.Sin(2 * Math.PI * i /(S* N)); cos1[i] = Math.Cos(2 * Math.PI * i /(S* N)); } int r = 0; do { for (int i = 0; i < N; i++) { int a = (Math.Abs(S*l + Sm)*i)%(S*N); int 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[r] = (new Complex(Re, Im).Abs()); yw[r] = y[r]*W(r); Re = Im = 0; r++; } while (Sm++ < Sp); BarItem bar = pane.AddBar("Графік AЧX", s, y, Color.Green); pane.BarSettings.MinClusterGap = 0.0f; dataGridView1.ColumnCount = 3; dataGridView1.RowCount = s.Length; dataGridView1.Columns[0].HeaderText = " Х"; dataGridView1.Columns[1].HeaderText = "Y"; dataGridView1.Columns[2].HeaderText = "Yw"; dataGridView1.RowHeadersWidth = 105; for (int i = 0; i < s.Length; i++) { dataGridView1.Rows[i].HeaderCell.Value =""+i; dataGridView1[0, i].Value = s[i]; dataGridView1[1, i].Value = y[i]; dataGridView1[2, i].Value = yw[i]; } } private void DrawSingleGraph1(GraphPane pane) { int Sm = Convert.ToInt32(textBoxSm.Text); int Sp = Convert.ToInt32(textBoxSp.Text); int N = Convert.ToInt32(textBoxN.Text); int l = Convert.ToInt32(textBoxl.Text); int S = Convert.ToInt32(textBoxS.Text); int A = Convert.ToInt32(textBoxA.Text); double[] s = new double[105]; for (int k = Sm, j = 0; k < Sp - 1; k++, j++) { s[j] = k; } double[] sin0 = new double[512]; double[] cos0 = new double[512]; double[] sin1 = new double[512]; double[] cos1 = new double[512]; double Re = 0; double Im = 0; double[] y = new double[512]; double[] yw = new double[512]; for (int i = 0; i < N; i++) { sin0[i] = Math.Sin(2 * Math.PI * i * l / N); cos0[i] = Math.Cos(2 * Math.PI * i * l / N); } for (int i = 0; i < (S * N); i++) { sin1[i] = Math.Sin(2 * Math.PI * (S * l + Sm) * i / (S * N)); cos1[i] = Math.Cos(2 * Math.PI * (S * l + Sm) * i / (S * N)); } int r = 0; do { for (int i = 0; i < N; i++) { int a = (Math.Abs(S * l + Sm) * 2 * i) % (S * N); int b = 2 * 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[r] = (new Complex(Re, Im).Abs()); yw[r] = y[r] * W(r); Re = Im = 0; r++; } while (Sm++ < Sp); BarItem bar = pane.AddBar("Графік AЧX з ваговою функцією", s, yw, Color. Red); pane.BarSettings.MinClusterGap = 0.0f; } private double W(int n) { int N = Convert.ToInt32(textBoxN.Text); double w; for (n = 1; n < N; n++) { w = 0.25 + 0.75 * Math.Cos(Math.PI * ((n - 16) / 32)); return w; } return 0; } private double [] UnitU(int Q) { var U = new double[500]; int N = Convert.ToInt32(textBoxN.Text); int S = Convert.ToInt32(textBoxS.Text); int l = Convert.ToInt32(textBoxl.Text); int A = Convert.ToInt32(textBoxA.Text); for (int i = 0; i < N - 1; i++) { var a = (new Complex(0,2*Math.PI*i*(S*l + Q)/(S*N))); U[i] = A* Math.Pow(Math.E,a.Abs()); } return U; } } } Висновок: Виконавши дану лабораторну роботу, я дослідив і проаналізував параметри амплітудно-частотної характеристики та вплив віконної обробки при спектральному аналізі сигналів.
Антиботан аватар за замовчуванням

11.05.2016 20:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!