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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт лабораторної роботи № 2 з дисципліни: «Проектування комп’ютерних засобів обробки сигналів та зображень» на тему: «Діагностика роботи цифрових фільтрів шляхом аналізу їх амплітудно-частотної характеристики» Мета роботи Дослідити і проаналізувати параметри амплітудно-частотної характеристики та вплив віконної обробки при спектральному аналізі сигналів. Варіант завдання до лабораторної роботи № Вар N L Sm Sp S A № Вагової функції  59 28 124 -32 44 8 14 15   Номер Функції Назва Тип функції  15  w(n) = 0.25 + 0,75 cos [ ((n-16)/32]   Хід роботи 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) згідно варіанту завдання. Для вагової функції №42 обчислення виконується згідно виразу:  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; using System.Numerics; namespace ll2 { public partial class Form1 : Form { int N = 0; public Form1() { InitializeComponent(); } private void zedGraph_Load(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; masterPane.Add(pane); masterPane.Add(pane1); // Установим размеры шрифтов для меток вдоль осей 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); } 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); 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[1536]; double[] cos0 = new double[1536]; double[] sin1 = new double[1536]; double[] cos1 = new double[1536]; double Re = 0; double Im = 0; double[] y = new double[1536]; double[] yw = new double[1536]; 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]; } Complex complex2 = new Complex(Re, Im); y[r] = Complex.Abs(complex2); 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[1536]; double[] cos0 = new double[1536]; double[] sin1 = new double[1536]; double[] cos1 = new double[1536]; double Re = 0; double Im = 0; double[] y = new double[1536]; double[] yw = new double[1536]; 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]; } Complex complex1 = new Complex(Re, Im); y[r] = Complex.Abs(complex1); 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); //if (n <= N / 2) // { Return 0.25 +0.75* (Math.Cos(Math.PI * (n -16)/ 32)); // } // else 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, Complex.Abs(a)); } return U; } private void button1_Click_1(object sender, EventArgs e) { DrawGraph(); } } Висновок: Виконавши дану лабораторну роботу, я дослідив і проаналізував параметри амплітудно-частотної характеристики та вплив віконної обробки при спектральному аналізі сигналів.
Антиботан аватар за замовчуванням

14.12.2016 18:10

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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