DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЕОМ ЗВІТ до лабораторної роботи №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:45

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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