Дискретное преобразование Фурье

Расчет реальной амплитудно-частотной характеристики рекурсивного однородного фильтра путем подачи на вход дельта функции и путем анализа спектра с помощью быстрого преобразования Фурье. Применение однородного нерекурсивного фильтра к реальному сигналу.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид лабораторная работа
Язык русский
Дата добавления 14.12.2019
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

[Введите текст]

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФГБОУ ВО АЛТАЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Физико-технический факультет

Кафедра вычислительной техники и электроники (ВТиЭ)

Лабораторная работа № 3

Дискретное преобразование Фурье (ДПФ)

Барнаул 2019

В данной лабораторной я работаю с различными типами фильтров и получаю для них основные характеристики.

Расчет параметров для нерекурсивного фильтра. Порядок фильтра L=10.

В данном пункте я рассчитываю параметры для однородного нерекурсивного фильтра путем обычной подстановки значений в данную формулу и тем самым получаются теоретически рассчитанные значения AЧХ, а второй частью этого задания будет получение реальных значений АЧХ путем подачи на вход фильтра дельта функции, а так же пропуская рассчитанные значения через быстрое преобразование Фурье, в конце по рассчитанным коэффициентам строятся следующие графики:

Рис. 1 - График теоретически рассчитанной АЧХ

Рис. 2 - График реальной рассчитанной АЧХ

На данных графиках ясно видно, что средняя амплитуда сигнала по мере возрастания частоты сигнала будет уменьшаться, поэтому данный фильтр является фильтром нижних частот.

Расчет параметров для рекурсивного фильтра. Порядок фильтра L=12.

В данном пункте я рассчитываю параметры для рекурсивного фильтра путем обычной подстановки в формулу значений, тем самым получаются значения по которым строится следующий график.

Рис. 3 - График теоретически рассчитанной АЧХ

Данный график характеризуется спадом амплитуды по мере увеличения частоты следовательно это фильтр нижних частот.

В данном пункте я рассчитываю реальную АЧХ рекурсивного однородного фильтра путем подачи на вход дельта функции и путем анализа спектра с помощью быстрого преобразования Фурье.

Рис. 4 - График реальной АЧХ ОРФ

В данном пункте я работаю непосредственно с фильтром и сигналам которые необходимо подавить.

Я пропустил сигнал частотой 190 Гц, который теоретически обязан быть подавленным фильтром и получил следующее:

Рис. 5 - График исходного сигнала

Рис. 6 - График сигнала пропущенного через однородный нерекурсивный фильтр

Рис. 7 - График реальной АЧХ фильтра высоких частот

В данном пункте я работаю с фильтром высоких частот

Я пускаю на вход фильтра верхних частот дельта функцию, а затем анализирую с помощью быстрого преобразования Фурье.

Рис. 8 - График теоретической АЧХ фильтра высоких частот

В данном пункте я работаю с триангулярным фильтром

Я подаю на вход триангулярного фильтра дельта функцию и тем самым получаю значения импульсной характеристики.

Рис. 9 - График реальной АЧХ однородного фильтра

сигнал фильтр частота

В данном пункте я собственно осуществляю применение однородного нерекурсивного фильтра к реальному сигналу с шумом.

Рис. 10 - График реальной АЧХ однородного фильтра

Рис. 11 - График исходного сигнала с шумом

Рис. 12 - График отфильтрованного сигнала

Спектр исходного сигнала с шумом

Рис. 14 - Спектр отфильтрованного сигнала

Приложение 1

#include "stdafx.h"

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

ofstream afcrealf("afcreal.txt");

ofstream afcidealf("afcideal.txt");

double w = 0, afcreal = 0, afcideal = 0, afcrealm[500];

int i = 500, j = 0, count = 0, L = 10,l;

for (j = 0; j < i; j++)

{

if (j == 1)

afcrealm[1] = 1;

else

afcrealm[j] = 0;

}

for (j = 0; j < i; j++)

{

for (l = 0; l <L; l++)

{

if (j - l>=0)

afcreal += afcrealm[j - l];

}

cout<< afcreal / L << endl;

afcrealf << afcreal / L << endl;

afcreal = 0;

}

for (w = 0; w <= 1; w += 0.002)

{

for (count = 0; count <= (L / 2 - 1); count++)

{

afcideal += cos(2 * 3.14*w*count - 3.14*w*(L - 1));

}

//cout << 2 * afcideal / l << endl;

afcidealf << 2 * afcideal / L << endl;

afcideal = 0;

}

system("pause");

return 0;

}

Команды использованные в Octave

load afcideal.txt

load afcreal.txt

y=fft(afcreal)

plot(0.002:0.002:1,real(abs(y)),"r",0.002:0.002:1,real(abs(afcideal))+0.01,"g") сдвиг на 0.01 нужен для того чтобы графики не сливались.

Приложение 2

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <fstream>

#include <stdio.h>

using namespace std;

int main()

{

ofstream afcrealf("afcreal2.txt");

ofstream afcidealf("afcideal2.txt");

double w = 0, x = 0, afcideal = 0, input[1000], yn[1000], L = 20;

int i = 0, j = 0,n, l;

while (i<500)

{

if (i == 1)

input[i] = 1;

else

input[i] = 0;

yn[i] = 0;

i++;

}

for (n = 0; n < i; n++)

{

for (l = 0; l<L; l++) {

if (n - l > 0)

yn[n] = yn[n - 1] + input[n] - input[n - l];

}

yn[n]=yn[n] / L;

afcrealf << yn[n] << endl;

cout<< yn[n] << endl;

}

for (w = 0.001; w <= 1.001; w += 0.001)

{

afcideal = sin(3.1415*L*w) / sin(3.1415*w) / L;

afcidealf << afcideal << endl;

//cout << afcideal << endl;

afcideal = 0;

}

system("pause");

return 0;

}

Команды использованные в Octave

load afcreal2.txt

load afcideal2.txt

y=fft(afcreal2)

plot(0.001:0.001:1,real(abs(afcideal2)),"r")

plot(0.002:0.002:1,real(abs(y)),"r")

Приложение 3

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <fstream>

#include <stdio.h>

using namespace std;

int main()

{

ofstream sinout("sinout.txt");

ofstream sinf("sin.txt");

double yout = 0, ysin[1000], buffer[1000], L = 10,k=0;

int i = 0, j = 0,l;

while (i<100)

{

k += 0.001;

ysin[i] = sin(2 * 3.14159265 * 190 * k ); //частота 200гц

//cout << afcrealm[i] << endl;

sinf << ysin[i] << endl;

i++;

}

for (j = 0; j < i; j++)

{

for (l = 0; l <L; l++)

{

if ((j - l) >= 0) {

yout += ysin[j - l];

}

}

cout << yout / L << endl;

sinout << yout / L << endl;

yout = 0;

}

system("pause");

return 0;

}

Команды использованные в Octave

load sinout.txt

load sin.txt

plot(0.001:0.001:0.1,sin,"r")

plot(0.001:0.001:0.1,sinout,"r")

Приложение 4

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <fstream>

#include <stdio.h>

#include <cmath>

using namespace std;

int main()

{

ofstream real("real.txt");

double w = 0, afcreal = 0, afcideal = 0, afcrealm[100], L = 10;

int i = 0, j = 0, l = 0;

while (i<50)

{

if (i == 0)

afcrealm[i] = 1;

else

afcrealm[i] = 0;

i++;

}

for (j = 0; j < i; j++)

{

for (l = 0; l <L; l++)

{

if ((j - l) >= 0) {

if (!(j % 2 == 0))

afcreal -= afcrealm[j - l];

else

afcreal += afcrealm[j - l];

}

}

//cout<<afcreal/ L <<endl;

real << afcreal / L << endl;

afcreal = 0;

}

system("pause");

return 0;

}

Команды использованные в Octave

load real.txt

y=fft(real)

plot(0.02:0.02:1,abs(y))

for i=1:26;

teor(i,1)=y(i);

endfor

x=0.5:0.02:1

plot(x,abs(teor))

Приложение 5

#include "stdafx.h"

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

ofstream afcrealf("real.txt");

ofstream filterOne("filterOne.txt");

double w = 0, filter = 0, afcideal = 0, input[1000], input2[1000];

int i = 0, j = 0, count = 0, l = 10;

while (i<100)

{

if (i ==0)

input[i] = 1;

else

input[i] = 0;

i++;

}

for (j = 0; j < i; j++)

{

for (count = l-1; count >= 0; count--)

{

if (j - count>=0)

filter += input[j - count];

}

input2[j]= filter / l;

filterOne << filter / l << endl;

filter = 0;

}

for (j = 0; j < i; j++)

{

for (count = l-1; count >= 0; count--)

{

if (j - count>=0)

filter += input2[j - count];

}

afcrealf << filter / l << endl;

cout << filter / l << endl;

filter = 0;

}

system("pause");

return 0;

}

Команды использованные в Octave

load real.txt

load filterOne.txt

y=fft(real)

y0=fft(real)

plot(0.01:0.01:1,abs(y0))

plot(0.01:0.01:1,abs(y))

Приложение к заданию 6

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <fstream>

#include <stdio.h>

using namespace std;

int main()

{

ifstream noize("noised.dat");

ofstream out("output.txt");

ofstream input("input.txt");

float noize_a[500],filter=0;

int i=0, n=0, L=10;

while (i<500)

{

noize >> noize_a[i];

i++;

}

for (n = 0; n < i; n++)

{

for (int l=0; l<= L;l++)

{

if (n - l>=0)

filter += noize_a[n - l];

}

out << filter / L << endl;

input << noize_a[n] << endl;

filter = 0;

}

system("pause");

return 0;

}

Команды в Octave

load output.txt

load input.txt

plot (1:1:500, input)

plot (1:1:500, output)

in=fft(input)

out=fft(output)

bar (1:1:500, real(abs(in)))

bar (1:1:500, real(abs(out)))

Размещено на Allbest.ru


Подобные документы

  • Расчет характеристик фильтра во временной и частотной областях с помощью быстрого преобразования Фурье, выходного сигнала во временной и частотной областях с помощью обратного быстрого преобразования Фурье; определение мощности собственных шумов фильтра.

    курсовая работа [2,8 M], добавлен 28.10.2011

  • Алгоритм расчета фильтра во временной и частотной областях при помощи быстрого дискретного преобразования Фурье (БПФ) и обратного быстрого преобразования Фурье (ОБПФ). Расчет выходного сигнала и мощности собственных шумов синтезируемого фильтра.

    курсовая работа [679,2 K], добавлен 26.12.2011

  • Построение графиков амплитудного и фазового спектров периодического сигнала. Расчет рекурсивного цифрового фильтра, цифрового спектра сигнала с помощью дискретного преобразования Фурье. Оценка спектральной плотности мощности входного и выходного сигнала.

    контрольная работа [434,7 K], добавлен 10.05.2013

  • Испытание синтезированного нерекурсивного и рекурсивного цифрового фильтра стандартными и гармоническими сигналами. Расчет реакции фильтра на четырехточечный входной сигнал. Получение системной функции и частотных характеристик цифрового фильтра.

    курсовая работа [3,0 M], добавлен 19.05.2015

  • Методика анализа преобразования сигналов линейными цепями, их физические процессы в различных режимах. Особенности применения дискретного преобразования Фурье и алгоритма быстрого преобразования Фурье в инженерных расчетах. Выходная реакция линейной цепи.

    курсовая работа [171,1 K], добавлен 19.12.2009

  • Определение импульсной характеристики фильтра. Расчет амплитудно- и фазово-частотной характеристик и методами разложения в ряд Фурье, наименьших квадратов и частотной выборки. Построение графиков и оценка точности аппроксимации (абсолютной погрешности).

    курсовая работа [677,0 K], добавлен 21.12.2012

  • Общая характеристика цифрового фильтра, его описание разностным уравнением. Импульсная характеристика и комплексная частотная характеристика, их связь парой преобразований Фурье. Метод частотной выборки и наименьших квадратов, их сравнение и отличия.

    курсовая работа [138,0 K], добавлен 22.02.2011

  • Проектирование схемы LC-фильтра. Определение передаточной функции фильтра и характеристики его ослабления. Моделирование фильтра на ПК. Составление программы и исчисление параметров элементов ARC-фильтра путем каскадно-развязанного соединения звеньев.

    курсовая работа [824,9 K], добавлен 12.12.2010

  • Нахождение коэффициентов фильтра с помощью программного пакета MatLab. Структурная схема прямой канонической формы фильтра. Листинг программного пакета visual DSP++. Построение амплитудно-частотной характеристики синтезированного фильтра, расчет графика.

    курсовая работа [1,5 M], добавлен 23.04.2013

  • Аппроксимация амплитудно-частотной характеристики фильтра. Определение передаточной функции фильтра нижних частот в области комплексной частоты. Схемотехническое проектирование устройства и его конструкторская реализация в виде узла с печатным монтажом.

    курсовая работа [330,8 K], добавлен 09.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.