Дискретное преобразование Фурье
Расчет реальной амплитудно-частотной характеристики рекурсивного однородного фильтра путем подачи на вход дельта функции и путем анализа спектра с помощью быстрого преобразования Фурье. Применение однородного нерекурсивного фильтра к реальному сигналу.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 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