Тема: «Типовые процедуры цифровой обработки сигнала. Цифровые фильтры»




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

Тема: «Спектральное оценивание сигналов»

Задание:

Реализовать программу, моделирующую полигармонический сигнал, и оценивающую его спектр.

Ход работы:

Теория:

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

где А — амплитуда сигнала;

— фаза гармонического сигнала;

— время;

— циклическая частота сигнала;

 

Полигармонический сигнал – сумма гармонических сигналов.

Для спектрального оценивания сигнала используем процедуру вычисления дискретного преобразования Фурье.

Для этого необходимо выполнить следующие 3 шага

1) Вычислить

2) Вычислить

3) Вычислить

 

Программная реализация:

Для реализации поставленной задачи, было решено использовать язык С++ и кроссплатформенный инструментарий для разработки ПО QT.

Рассмотрим, как работает разработанное приложение:

При запуске исполняемого файла открывается главное окно

Рисунок 1 – Главное окно программы

Необходимо ввести данные и нажать кнопку «рассчитать данные», а затем выбрать какой график отрисовывать и нажать кнопку «Отрисовка графика»

Рисунок 2 – Окно программы с построенным графиком

 

Рисунок 3 – Рассчитанный программно спектр гармонического сигнала


 

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

Тема: «Типовые процедуры цифровой обработки сигнала. Цифровые фильтры»

Задание: Реализовать программу, моделирующую работу следующих цифровых фильтров:

· Фильтр Хеннинга

· Параболический фильтр

· Рекурсивный фильтр первого порядка

· НЧФ

· ВЧФ

· Полосовой фильтр

· Режекторный фильтр

Ход работы:

Теория:

Рассмотрим, какие формулы применяются для реализации указанных в задании цифровых фильтров

1) Фильтр Хеннинга.

y(u) = 1/4[x(u) + 2x(u-1) + x (u-2)]

2) Параболический фильтр.

y(u) = 1/35[-3 x(u-2) + 12 x(n-1) + 17x(u) + 12x(u+1) - 3x(u-2)]

 

3) Рекурсивный фильтр первого порядка

y(u) = x(u) + 1/2 * y(u-1)

4) Рекурсивные фильтры второго порядка

y(u) = b0 * x(u) + b1 * x(u-1) + b2 * x(u-2) - a1 * y(u-1) - a2 * y(u-2)


 

Коэффициенты для формулы необходимо брать из следующей таблицы (в зависимости от того, какой фильтр используется).

 

  b1 b2 a1 a2
Низкочастотный     2 r cos()
Полосовой   -1 -2 r cos()
Высокочастотный -2   -2 r cos()
Режекторный -2соs()   -r cos ()

 

 

Программная реализация:

Для реализации поставленной задачи было решено использовать язык С++ и кроссплатформенный инструментарий для разработки программного обеспечений QT.

 

Рассмотрим как работает разработанное приложение:

При запуске исполняемого файла открывается главное окно.

Рисунок 4 – График сигнала с помехами

После ввода в него исходных данных отрисуем график сигнала с помехами.

Далее перейдем к вкладке фильтры и выберем фильтр (например фильтр Хеннинга).

Рисунок 5 – График сигнала до использования фильтра

Применяем фильтр и видим, что график сигнала изменился (помеха уменьшилась).

Рисунок 6 – График сигнала после использования фильтра

 

Для того, чтобы посмотреть амплитудно-частотную характеристику фильтра необходимо открыть вкладку АЧХ.

Рисунок 7 – АЧХ фильтра Хеннинга

Вкладки «спектральная плотность мощности» и «спектр гармонического сигнала» отображают соответственно спектральную плотность мощности и спектр гармонического сигнала.

Рисунок 8 – Спектральная плотность мощности

Рисунок 9 – Спектр гармонического сигнала

Аналогично работают остальные фильтры:

Рисунок 10 - Фильтр первого порядка Рисунок 11 - ВЧФ

Рисунок 12–НЧФ Рисунок 13–Полосовой фильтр

Рисунок 14 – Режекторный фильтр Рисунок 15 Параболический фильтр

Вывод:

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


Кодпрограммы:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include <qmath.h>

#include <QGraphicsTextItem>

#include <QMessageBox>

 

qreal Objects::max_h_sig =0;

qreal Objects::max_w_sig =0;

qreal Objects::max_h_spk =0;

qreal Objects::max_w_spk =0;

qreal Objects::max_h_spk_grm =0;

qreal Objects::max_w_spk_grm =0;

 

QList <QPointF>* Objects::Signal =new QList<QPointF>();

QList <QPointF>* Objects::Signal_s_pomehoi =new QList<QPointF>();

QList <QPointF>* Objects::Pobeha =new QList<QPointF>();

QList <QPointF>* Objects::Filtrovannii_signal =new QList<QPointF>();

 

QList<QPointF>* Objects::Spektr =new QList<QPointF>();

QList<QPointF>* Objects::Spektr_garm =new QList<QPointF>();

 

QList <QPointF>* Objects::Filtr_1 =new QList<QPointF>();

QList <QPointF>* Objects::Filtr_2 =new QList<QPointF>();

QList <QPointF>* Objects::Filtr_3 =new QList<QPointF>();

QList <QPointF>* Objects::Filtr_4 =new QList<QPointF>();

QList <QPointF>* Objects::Filtr_5 =new QList<QPointF>();

QList <QPointF>* Objects::Filtr_6 =new QList<QPointF>();

QList <QPointF>* Objects::Filtr_7 =new QList<QPointF>();

 

QList <QPointF>* Objects::ACH1 =new QList<QPointF>();

QList <QPointF>* Objects::ACH2 =new QList<QPointF>();

QList <QPointF>* Objects::ACH3 =new QList<QPointF>();

QList <QPointF>* Objects::ACH4 =new QList<QPointF>();

QList <QPointF>* Objects::ACH5 =new QList<QPointF>();

QList <QPointF>* Objects::ACH6 =new QList<QPointF>();

QList <QPointF>* Objects::ACH7 =new QList<QPointF>();

 

QList <QPointF>* Spektr;

 

 

inline void MainWindow::DrawACH(int scale)

{

QList<QPointF>* CurrentSignal;

{

if (ui->radioButtonF1->isChecked() == true) CurrentSignal = Objects::ACH1;

if (ui->radioButtonF2->isChecked() == true) CurrentSignal = Objects::ACH2;

if (ui->radioButtonF3->isChecked() == true) CurrentSignal = Objects::ACH3;

if (ui->radioButtonF4->isChecked() == true) CurrentSignal = Objects::ACH4;

if (ui->radioButtonF5->isChecked() == true) CurrentSignal = Objects::ACH5;

if (ui->radioButtonF6->isChecked() == true) CurrentSignal = Objects::ACH6;

if (ui->radioButtonF7->isChecked() == true) CurrentSignal = Objects::ACH7;

 

}

 

QGraphicsScene *scene = new QGraphicsScene();

scene->clear();

ui->graphicsView_4->setScene(scene);

 

 

scene->addLine(0,0,ui->graphicsView->size().width()*scale/100,0);

 

qreal max_x =CurrentSignal->back().rx();

qreal max_y = 0;

 

for (QList<QPointF>::Iterator i = CurrentSignal->begin();i!= CurrentSignal->end();i++)

{

if ((*i).y()>max_y) max_y=(*i).y();

}

 

 

qreal coefficient_x=ui->graphicsView->size().width()*scale/max_x/100;

qreal coefficient_y=ui->graphicsView->size().height()/max_y;

 

 

QPen * colour = new QPen(QColor(255,0,0));

colour->setWidth(2);

 

 

for (QList<QPointF>::iterator CurrObj= CurrentSignal->begin(); CurrObj!=CurrentSignal->end(); CurrObj++)

{

scene->addLine(QLineF((*CurrObj).x()*coefficient_x,

-(*CurrObj).y()*coefficient_y,

(*CurrObj).x()*coefficient_x,

qreal(0.0)),

*colour);

 

 

}

for (int i=0;i<=floor(max_x);i+=(1.0/ui->doubleSpinBox_2->value())/20)

{

scene->addLine(i*coefficient_x,-10,i*coefficient_x,10);

QString Text;

Text.setNum(i);

QGraphicsTextItem *tempText = scene->addText(Text.toLower());

tempText->setPos(i*coefficient_x,10);

}

}

 

 

inline void MainWindow::DrawSignal(int scale)

{

QList<QPointF>* CurrentSignal;

 

if (ui->radioButton1->isChecked()) CurrentSignal = Objects::Signal;

if (ui->radioButton2->isChecked()) CurrentSignal = Objects::Pobeha;

if (ui->radioButton3->isChecked()) CurrentSignal = Objects::Signal_s_pomehoi;

if (ui->radioButton4->isChecked())

{

if (ui->radioButtonF1->isChecked() == true) CurrentSignal = Objects::Filtr_1;

if (ui->radioButtonF2->isChecked() == true) CurrentSignal = Objects::Filtr_2;

if (ui->radioButtonF3->isChecked() == true) CurrentSignal = Objects::Filtr_3;

if (ui->radioButtonF4->isChecked() == true) CurrentSignal = Objects::Filtr_4;

if (ui->radioButtonF5->isChecked() == true) CurrentSignal = Objects::Filtr_5;

if (ui->radioButtonF6->isChecked() == true) CurrentSignal = Objects::Filtr_6;

if (ui->radioButtonF7->isChecked() == true) CurrentSignal = Objects::Filtr_7;

 

}

 

QGraphicsScene *scene = new QGraphicsScene();

scene->clear();

ui->graphicsView->setScene(scene);

 

 

scene->addLine(0,0,ui->graphicsView->size().width()*scale/100,0);

 

qreal coefficient_x=ui->graphicsView->size().width()*scale/Objects::max_w_sig/100;

qreal coefficient_y=ui->graphicsView->size().height()/Objects::max_h_sig/2;

 

 

QPen * colour = new QPen(QColor(255,0,0));

colour->setWidth(2);

 

 

for (QList<QPointF>::iterator CurrObj= CurrentSignal->begin(); CurrObj!=CurrentSignal->end()-1; CurrObj++)

{

scene->addLine(QLineF((*CurrObj).x()*coefficient_x,

(*CurrObj).y()*coefficient_y,

(*(CurrObj+1)).x()*coefficient_x,

(*(CurrObj+1)).y()*coefficient_y),

*colour);

 

}

for (int i=0;i<=floor(Objects::max_w_sig);i++)

{

scene->addLine(i*coefficient_x,-10,i*coefficient_x,10);

QString Text;

Text.setNum(i);

QGraphicsTextItem *tempText = scene->addText(Text.toLower());

tempText->setPos(i*coefficient_x,10);

}

}

 

 

inline void MainWindow::DrawSpektr(int scale)

{

QGraphicsScene *scene = new QGraphicsScene();

scene->clear();

ui->graphicsView_2->setScene(scene);

 

 

scene->addLine(0,0,ui->graphicsView->size().width()*scale/100,0);

 

qreal coefficient_x=ui->graphicsView_2->size().width()*scale/Objects::max_w_spk/100;

qreal coefficient_y=ui->graphicsView_2->size().height()/Objects::max_h_spk/2*-1;

 

 

QPen * colour = new QPen(QColor(255,0,0));

colour->setWidth(2);

 

int step = 1/ui->doubleSpinBox_2->value();

 

 

for (QList<QPointF>::iterator CurrObj= Objects::Spektr->begin(); CurrObj!=Objects::Spektr->end()-1; CurrObj++)

{

scene->addLine(QLineF((*CurrObj).x()*coefficient_x,

(*CurrObj).y()*coefficient_y,

(*(CurrObj+1)).x()*coefficient_x,

(*(CurrObj+1)).y()*coefficient_y),

*colour);

 

}

for (qreal i=0;i<=(Objects::max_w_sig);i+=0.025)

{

scene->addLine(i*coefficient_x,-10,i*coefficient_x,10);

QString Text;

Text.setNum(floor(i/(Objects::max_w_sig) * (1/ui->doubleSpinBox_2->value())));

QGraphicsTextItem *tempText = scene->addText(Text.toLower());

tempText->setPos(i*coefficient_x,10);

}

}

 

inline void MainWindow::DrawSpektrGarm(int scale)

{

QGraphicsScene *scene = new QGraphicsScene();

scene->clear();

ui->graphicsView_3->setScene(scene);

 

 

scene->addLine(0,0,ui->graphicsView->size().width()*scale/100,0);

 

qreal coefficient_x=ui->graphicsView_2->size().width()*scale/Objects::max_w_spk_grm/100;

qreal coefficient_y=ui->graphicsView_2->size().height()/Objects::max_h_spk_grm/2*-1;

 

 

QPen * colour = new QPen(QColor(255,0,0));

colour->setWidth(2);

 

int step = 1/ui->doubleSpinBox_2->value();

 

 

for (QList<QPointF>::iterator CurrObj= Objects::Spektr_garm->begin(); CurrObj!=Objects::Spektr_garm->end()-1; CurrObj++)

{

scene->addLine(QLineF((*CurrObj).x()*coefficient_x,

(*CurrObj).y()*coefficient_y,

(*(CurrObj+1)).x()*coefficient_x,

(*(CurrObj+1)).y()*coefficient_y),

*colour);

 

}

for (qreal i=0;i<=(Objects::max_w_sig);i+=0.025)

{

scene->addLine(i*coefficient_x,-10,i*coefficient_x,10);

QString Text;

Text.setNum(floor(i/(Objects::max_w_sig) * (1/ui->doubleSpinBox_2->value())));

QGraphicsTextItem *tempText = scene->addText(Text.toLower());

tempText->setPos(i*coefficient_x,10);

}

}

 

MainWindow::MainWindow(QWidget *parent):

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

ui->tableWidget->setRowCount(1);

ui->tableWidget->setColumnCount(3);

ui->tableWidget->setHorizontalHeaderItem(0,new QTableWidgetItem("Амплитуда",1));

ui->tableWidget->setHorizontalHeaderItem(1,new QTableWidgetItem("Частота",1));

ui->tableWidget->setHorizontalHeaderItem(2,new QTableWidgetItem("Фаза",1));

 

ui->tableWidget_2->setRowCount(1);

ui->tableWidget_2->setColumnCount(3);

ui->tableWidget_2->setHorizontalHeaderItem(0,new QTableWidgetItem("max амплитуда",1));

ui->tableWidget_2->setHorizontalHeaderItem(1,new QTableWidgetItem("Частота",1));

ui->tableWidget_2->setHorizontalHeaderItem(2,new QTableWidgetItem("Фаза",1));

 

ui->label_5-> setVisible (false);

 

}

 

MainWindow::~ MainWindow ()

{

delete ui;

}

 

void MainWindow::on_spinBox_valueChanged(int arg1)

{

ui->tableWidget->setRowCount(arg1);

}

 

void MainWindow::on_pushButton_clicked()

{

try

{

bool OK = true;

for (int i=0; i<ui->tableWidget->rowCount(); i++)

for (int j=0; j<ui->tableWidget->columnCount(); j++)

{

if (ui->tableWidget->item(i,j)==NULL) throw 1; //Заполненыневсеполя

ui->tableWidget->item(i,j)->text().toDouble(&OK);

}

 

for (int i=0; i<ui->tableWidget_2->rowCount(); i++)

for (int j=0; j<ui->tableWidget_2->columnCount(); j++)

{

if (ui->tableWidget_2->item(i,j)==NULL) throw 1; //Заполненыневсеполя

ui->tableWidget_2->item(i,j)->text().toDouble(&OK);

}

 

if (!OK) throw 2; //Ошибка при вводе данных

ui->horizontalSlider->setEnabled(true);

ui->horizontalSlider->setValue(100);

 

Objects::Signal->clear();

 

Objects::Signal->clear();

for (qreal x=0; x<ui->doubleSpinBox->value(); x+=ui->doubleSpinBox_2->value())

{

QPointF * CurrObj = new QPointF(x,0);

for (int i=0;i<ui->tableWidget->rowCount();i++)

{

qreal A = ui->tableWidget->item(i,0)->text().toDouble();

qreal f = ui->tableWidget->item(i,1)->text().toDouble();

qreal F = ui->tableWidget->item(i,2)->text().toDouble();

 

CurrObj->setY(CurrObj->y()+ A * cos(2 * 3.14 *f * (*CurrObj).x() + F));

}

Objects::Signal->push_back(*CurrObj);

 

}

 

Objects::Pobeha->clear();

for (qreal x=0; x<ui->doubleSpinBox->value(); x+=ui->doubleSpinBox_2->value())

{

QPointF * CurrObj = new QPointF(x,0);

for (int i=0;i<ui->tableWidget_2->rowCount();i++)

{

qreal A = ui->tableWidget_2->item(i,0)->text().toDouble();

qreal f = ui->tableWidget_2->item(i,1)->text().toDouble();

qreal F = ui->tableWidget_2->item(i,2)->text().toDouble();

 

CurrObj->setY(CurrObj->y()+ A *(qrand()%10000) /10000 * cos(2 * 3.14 *f * (*CurrObj).x() + F));

}

Objects::Pobeha->push_back(*CurrObj);

}

Objects::Signal_s_pomehoi->clear();

int i=0;

for (qreal x=0; x<ui->doubleSpinBox->value(); x+=ui->doubleSpinBox_2->value())

{

 

QPointF * CurrObj = new QPointF(x,0);

QList <QPointF>::iterator t1 = Objects::Signal->begin();

QList <QPointF>::iterator t2 = Objects::Pobeha->begin();

 

CurrObj->setY(Objects::Signal->at(i).y() + Objects::Pobeha->at(i).y());

Objects::Signal_s_pomehoi->push_back(*CurrObj);

 

 

i++;

}

 

Objects::max_w_sig = Objects::Signal->at(Objects::Signal->size()-1).x();

Objects::max_h_sig = 0;

 

 

for (QList <QPointF>::iterator j = Objects::Signal_s_pomehoi->begin(); j!=Objects::Signal_s_pomehoi->end(); j++)

{

if ((*j).y()> Objects::max_h_sig) Objects::max_h_sig = (*j).y();

}

 

ui->pushButton_2->setEnabled(true);

 

 

/////////////////

Objects::Spektr->clear();

 

for (int k=0;k<Objects::Signal_s_pomehoi->size();k++)

{

qreal Re=0;

qreal Im=0;

 

for (int n=0;n<Objects::Signal_s_pomehoi->size();n++)

{

Re+= Objects::Signal_s_pomehoi->at(n).y() *cos(-2 * 3.14 * n *k / Objects::Signal_s_pomehoi->size());

Im+= Objects::Signal_s_pomehoi->at(n).y() *sin(-2 * 3.14 * n *k / Objects::Signal_s_pomehoi->size());

}

Objects::Spektr->push_back(QPointF(Objects::Signal_s_pomehoi->at(k).x(),((Re*Re) + (Im*Im))/Objects::Signal_s_pomehoi->size()));

 

}

 

Objects::Spektr_garm->clear();

 

for (int k=0;k<Objects::Signal->size();k++)

{

qreal Re=0;

qreal Im=0;

 

for (int n=0;n<Objects::Signal->size();n++)

{

Re+= Objects::Signal->at(n).y() *cos(-2 * 3.14 * n *k / Objects::Signal->size());

Im+= Objects::Signal->at(n).y() *sin(-2 * 3.14 * n *k / Objects::Signal->size());

}

Objects::Spektr_garm->push_back(QPointF(Objects::Signal->at(k).x(),sqrtf((Re*Re) + (Im*Im))));

 

}

 

Objects::max_w_spk = Objects::Signal->at(Objects::Spektr->size()-1).x();

Objects::max_h_spk = 0;

 

for (QList <QPointF>::iterator j = Objects::Spektr->begin(); j!=Objects::Spektr->end(); j++)

{

if ((*j).y()> Objects::max_h_spk) Objects::max_h_spk = (*j).y();

}

 

 

Objects::max_w_spk_grm = Objects::Signal->at(Objects::Spektr_garm->size()-1).x();

Objects::max_h_spk_grm = 0;

 

for (QList <QPointF>::iterator j = Objects::Spektr_garm->begin(); j!=Objects::Spektr_garm->end(); j++)

{

if ((*j).y()> Objects::max_h_spk_grm) Objects::max_h_spk_grm = (*j).y();

}

 

////Фильтры

/// F1 Хеннинг

{

Objects::Filtr_1->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin();

QList <QPointF>::iterator x1 = x0+1;

QList <QPointF>::iterator x2 = x1+1;

 

while (x2!= Objects::Signal_s_pomehoi->end())

{

QPointF * CurrObj = new QPointF((*x2).x(),0);

CurrObj->setY((*x0).y()/4 + (*x1).y()/2 + (*x2).y()/4);

Objects::Filtr_1->push_back(*CurrObj);

 

x0++;

x1++;

x2++;

}

 

 

}

 

/// F2 Параболический

{

Objects::Filtr_2->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin();

QList <QPointF>::iterator x1 = x0+1;

QList <QPointF>::iterator x2 = x1+1;

QList <QPointF>::iterator x3 = x2+1;

QList <QPointF>::iterator x4 = x3+1;

 

while (x4!= Objects::Signal_s_pomehoi->end())

{

QPointF * CurrObj = new QPointF((*x2).x(),0);

CurrObj->setY(((*x0).y() * (-3) + (*x1).y() *12 + (*x2).y() * 17 + (*x3).y()*12 + (*x4).y()*(-3))/35);

Objects::Filtr_2->push_back(*CurrObj);

 

x0++;

x1++;

x2++;

x3++;

x4++;

}

 

 

}

 

/// F3 Первого порядка (!!!!)

{

Objects::Filtr_3->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin()+1;

 

QPointF y1 = Objects::Signal_s_pomehoi->at(0);

// QPointF y1(0,0);

while (x0!= Objects::Signal_s_pomehoi->end())

{

QPointF * CurrObj = new QPointF((*x0).x(),0);

CurrObj->setY((*x0).y() + ui->doubleSpinBoxR->value() * y1.y());

Objects::Filtr_3->push_back(*CurrObj);

 

y1.setY(CurrObj->y());

x0++;

 

}

 

 

}

 

/// F4 НЧФ (!!!!)

{

Objects::Filtr_4->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin()+3;

QList <QPointF>::iterator x1 = Objects::Signal_s_pomehoi->begin()+2;

QList <QPointF>::iterator x2 = Objects::Signal_s_pomehoi->begin()+1;

 

//QPointF y0 = Objects::Signal_s_pomehoi->at(0);

QPointF y1(0,0);

QPointF y2(0,0);

 

qreal a0=1;

qreal b0=1;

qreal a1=2;

qreal a2=1;

qreal b1=-2*ui->doubleSpinBoxR->value()*cos(2*3.14*(ui->doubleSpinBoxFi->value()/ui->doubleSpinBox_2->value()));

qreal b2=(ui->doubleSpinBoxR->value()*ui->doubleSpinBoxR->value());

 

while (x0!= Objects::Signal_s_pomehoi->end())

{

 

QPointF * CurrObj = new QPointF((*x1).x(),0);

CurrObj->setY(a0*(*x0).y() + a1 *(*x1).y() + a2 *(*x2).y() + b1 * y1.y() - b2*y2.y()); ///добавитькоэфф r //fc и fd

Objects::Filtr_4->push_back(*CurrObj);

 

y2.setY(y1.y());

y1.setY(CurrObj->y());

 

x0++;

x1++;

x2++;

 

}

 

 

}

 

/// F5 ВЧФ (!!!!)

{

Objects::Filtr_5->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin()+3;

QList <QPointF>::iterator x1 = Objects::Signal_s_pomehoi->begin()+2;

QList <QPointF>::iterator x2 = Objects::Signal_s_pomehoi->begin()+1;

 

//QPointF y0 = Objects::Signal_s_pomehoi->at(0);

QPointF y1(0,0);

QPointF y2(0,0);

 

qreal a0=1;

qreal b0=1;

qreal a1=-2;

qreal a2=1;

qreal b1=-2*ui->doubleSpinBoxR->value()*cos(2*3.14*(ui->doubleSpinBoxFi->value()/ui->doubleSpinBox_2->value()));

qreal b2=(ui->doubleSpinBoxR->value()*ui->doubleSpinBoxR->value());

 

while (x0!= Objects::Signal_s_pomehoi->end())

{

 

QPointF * CurrObj = new QPointF((*x1).x(),0);

CurrObj->setY(a0*(*x0).y() + a1 *(*x1).y() + a2 *(*x2).y() + b1 * y1.y() - b2*y2.y()); ///добавитькоэфф r //fc и fd

Objects::Filtr_5->push_back(*CurrObj);

 

y2.setY(y1.y());

y1.setY(CurrObj->y());

 

x0++;

x1++;

x2++;

 

}

 

 

}

 

/// F6 Полосовой (!!!!)

{

Objects::Filtr_6->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin()+3;

QList <QPointF>::iterator x1 = Objects::Signal_s_pomehoi->begin()+2;

QList <QPointF>::iterator x2 = Objects::Signal_s_pomehoi->begin()+1;

 

//QPointF y0 = Objects::Signal_s_pomehoi->at(0);

QPointF y1(0,0);

QPointF y2(0,0);

 

qreal a0=1;

qreal b0=1;

qreal a1=0;

qreal a2=-1;

qreal b1=-2*ui->doubleSpinBoxR->value()*cos(2*3.14*(ui->doubleSpinBoxFi->value()/ui->doubleSpinBox_2->value()));

qreal b2=(ui->doubleSpinBoxR->value()*ui->doubleSpinBoxR->value());

 

while (x0!= Objects::Signal_s_pomehoi->end())

{

 

QPointF * CurrObj = new QPointF((*x1).x(),0);

CurrObj->setY(a0*(*x0).y() + a1 *(*x1).y() + a2 *(*x2).y() + b1 * y1.y() - b2*y2.y()); ///добавитькоэфф r //fc и fd

Objects::Filtr_6->push_back(*CurrObj);

 

y2.setY(y1.y());

y1.setY(CurrObj->y());

 

x0++;

x1++;

x2++;

 

}

 

 

}

 

 

/// F7 Режекторный (!!!!)

{

Objects::Filtr_7->clear();

QList <QPointF>::iterator x0 = Objects::Signal_s_pomehoi->begin()+3;

QList <QPointF>::iterator x1 = Objects::Signal_s_pomehoi->begin()+2;

QList <QPointF>::iterator x2 = Objects::Signal_s_pomehoi->begin()+1;

 

//QPointF y0 = Objects::Signal_s_pomehoi->at(0);

QPointF y1(0,0);

QPointF y2(0,0);

 

 

qreal a0=1;

qreal b0=1;

qreal a1=-2 * cos (2 * 3.14 * (ui->doubleSpinBoxFi->value()/ui->doubleSpinBox_2->value()));

qreal a2=1;

qreal b1=-ui->doubleSpinBoxR->value()*cos(2*3.14*(ui->doubleSpinBoxFi->value()/ui->doubleSpinBox_2->value()));

qreal b2=(ui->doubleSpinBoxR->value()*ui->doubleSpinBoxR->value());

 

while (x0!= Objects::Signal_s_pomehoi->end())

{

 

QPointF * CurrObj = new QPointF((*x1).x(),0);

CurrObj->setY(a0*(*x0).y() + a1 *(*x1).y() + a2 *(*x2).y() + b1 * y1.y() - b2*y2.y()); ///добавитькоэфф r //fc и fd

Objects::Filtr_7->push_back(*CurrObj);

 

y2.setY(y1.y());

y1.setY(CurrObj->y());

 

x0++;

x1++;

x2++;

 

}

 

 

}

 

 

///АЧХ 1 фильтра

{

Objects::ACH1->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (1.0/4.0 + (1.0/2.0)*cos(1*2*3.14*i/N) + (1.0/4.0)*cos(2*2*3.14*i/N));

double asin = ((1.0/2.0)*sin(1*2*3.14*i/N) + (1.0/4.0) * sin(2*2*3.14*i/N));

double bcos = (1.0 + 0.0*cos(1*2*3.14*i/N) + 0.0*cos(2*2*3.14*i/N));

double bsin = (0.0*sin(1*2*3.14*i/N) + 0.0 * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

 

Objects::ACH1->push_back(*CurrPoint);

 

}

}

///АЧХ 2 фильтра

{

Objects::ACH2->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (17.0/35.0 + (12.0/35.0)*cos(1*2*3.14*i/N) + (-3.0/35.0)*cos(2*2*3.14*i/N) + (12.0/35.0)*cos(-1*2*3.14*i/N) + (-3.0/35.0)*cos(-2*2*3.14*i/N));

double asin =(12.0/35.0)*sin(1*2*3.14*i/N) + (-3.0/35.0)*sin(2*2*3.14*i/N) + (12.0/35.0)*sin(-1*2*3.14*i/N) + (-3.0/35.0)*sin(-2*2*3.14*i/N);

double bcos = (1.0 + 0.0*cos(1*2*3.14*i/N) + 0.0*cos(2*2*3.14*i/N));

double bsin = (0.0*sin(1*2*3.14*i/N) + 0.0 * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

 

Objects::ACH2->push_back(*CurrPoint);

 

}

}

 

///АЧХ 3 фильтра

{

Objects::ACH3->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (1.0/4.0 + (0.0)*cos(1*2*3.14*i/N) + (0.0)*cos(2*2*3.14*i/N));

double asin = ((0.0)*sin(1*2*3.14*i/N) + (0.0) * sin(2*2*3.14*i/N));

double bcos = (1.0 + (-r)*cos(1*2*3.14*i/N) + 0.0*cos(2*2*3.14*i/N));

double bsin = ((-r)*sin(1*2*3.14*i/N) + 0.0 * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

 

Objects::ACH3->push_back(*CurrPoint);

 

}

}

 

///АЧХ 4 фильтра

{

Objects::ACH4->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

float fc = ui->doubleSpinBoxFi->value();

float fd = ui->doubleSpinBox_2->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (1.0 + (2.0)*cos(1*2*3.14*i/N) + (1.0)*cos(2*2*3.14*i/N));

double asin =(2.0)*sin(1*2*3.14*i/N) + (1.0)*sin(2*2*3.14*i/N);

double bcos = (1.0 + -2.0 * r * cos (2*3.14*(fc/fd))*cos(1*2*3.14*i/N) + r*r*cos(2*2*3.14*i/N));

double bsin = (-2.0 * r * cos (2*3.14*(fc/fd))*sin(1*2*3.14*i/N) + r*r * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

Objects::ACH4->push_back(*CurrPoint);

 

}

}

 

///АЧХ 5 фильтра

{

Objects::ACH5->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

float fc = ui->doubleSpinBoxFi->value();

float fd = ui->doubleSpinBox_2->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (1.0 + (0.0)*cos(1*2*3.14*i/N) + (-1.0)*cos(2*2*3.14*i/N));

double asin =(0.0)*sin(1*2*3.14*i/N) + (-1.0)*sin(2*2*3.14*i/N);

double bcos = (1.0 + -2.0 * r * cos (2*3.14*(fc/fd))*cos(1*2*3.14*i/N) + r*r*cos(2*2*3.14*i/N));

double bsin = (-2.0 * r * cos (2*3.14*(fc/fd))*sin(1*2*3.14*i/N) + r*r * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

Objects::ACH5->push_back(*CurrPoint);

 

}

}

 

///АЧХ 6 фильтра

{

Objects::ACH6->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

float fc = ui->doubleSpinBoxFi->value();

float fd = ui->doubleSpinBox_2->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (1.0 + (-2.0*cos(2.0*3.14*(fc/fd)))*cos(1*2*3.14*i/N) + (-1.0)*cos(2*2*3.14*i/N));

double asin =(-2.0*cos(2.0*3.14*(fc/fd)))*sin(1*2*3.14*i/N) + (-1.0)*sin(2*2*3.14*i/N);

double bcos = (1.0 + - r * cos (2*3.14*(fc/fd))*cos(1*2*3.14*i/N) + r*r*cos(2*2*3.14*i/N));

double bsin = (-r * cos (2*3.14*(fc/fd))*sin(1*2*3.14*i/N) + r*r * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

 

Objects::ACH6->push_back(*CurrPoint);

 

}

}

 

///АЧХ 7 фильтра

{

Objects::ACH7->clear();

float N = 1/ui->doubleSpinBox_2->value();

float r = ui->doubleSpinBoxR->value();

float fc = ui->doubleSpinBoxFi->value();

float fd = ui->doubleSpinBox_2->value();

for (float i=0;i< N;i = i+1)

{

 

double acos = (1.0 + (-2.0*cos(2.0*3.14*(fc/fd)))*cos(1*2*3.14*i/N) + (1.0)*cos(2*2*3.14*i/N));

double asin =(-2.0*cos(2.0*3.14*(fc/fd)))*sin(1*2*3.14*i/N) + (1.0)*sin(2*2*3.14*i/N);

double bcos = (1.0 + - r * cos (2*3.14*(fc/fd))*cos(1*2*3.14*i/N) + r*r*cos(2*2*3.14*i/N));

double bsin = (-r * cos (2*3.14*(fc/fd))*sin(1*2*3.14*i/N) + r*r * sin(2*2*3.14*i/N));

QPointF * CurrPoint = new QPointF(i,sqrt(((acos*acos)+(asin*asin))/((bcos*bcos)+(bsin*bsin))));

 

 

Objects::ACH7->push_back(*CurrPoint);

 

}

}

 

///

/////////////////////

//АЧХфильтра

//for j:=0 to N-1 do

//begin

//acos:=a0+a1*cos(1*2*pi*j/N)+a2*cos(2*2*pi*j/N);

//asin:= a1*sin(1*2*pi*j/N)+a2*sin(2*2*pi*j/N);

//bcos:=1+b1*cos(1*2*pi*j/N)+b2*cos(2*2*pi*j/N);

//bsin:= b1*sin(1*2*pi*j/N)+b2*sin(2*2*pi*j/N);

//AX[j]:=sqrt((sqr(acos)+sqr(asin))/(sqr(bcos)+sqr(bsin)));

//end;

/////////////////////

 

 

}

catch (int err)

{

/////

}

 

}

 

void MainWindow::on_horizontalSlider_valueChanged(int value)

{

DrawSignal(value);

 

}

 

void MainWindow::on_spinBox_2_valueChanged(int arg1)

{

ui->tableWidget_2->setRowCount(arg1);

}

 

void MainWindow::on_radioButton1_clicked()

{

// DrawSignal(ui->spinBox_2->value());

}

 

void MainWindow::on_radioButton2_clicked()

{

// DrawSignal(ui->spinBox_2->value());

}

 

void MainWindow::on_radioButton3_clicked()

{

// DrawSignal(ui->spinBox_2->value());

}

 

void MainWindow::on_radioButton4_clicked()

{

// DrawSignal(ui->spinBox_2->value());

}

 

void MainWindow::on_pushButton_2_clicked()

{

DrawSignal(ui->horizontalSlider->value());

DrawSpektr(ui->horizontalSlider_2->value());

DrawSpektrGarm(ui->horizontalSlider_3->value());

DrawACH(ui->horizontalSlider_4->value());

}

 

void MainWindow::on_horizontalSlider_2_valueChanged(int value)

{

DrawSpektr(value);

}

 

void MainWindow::on_horizontalSlider_3_valueChanged(int value)

{

DrawSpektrGarm(value);

}

 

void MainWindow::on_tabWidget_currentChanged(int index)

{

ui->horizontalSlider_2->setValue(100);

ui->horizontalSlider->setValue(100);

ui->horizontalSlider_3->setValue(100);

}

 

void MainWindow::on_horizontalSlider_4_valueChanged(int value)

{

DrawACH(value);

}

 

 


 

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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: