Тема: «Программная реализация алгоритма сегментации сигнала по заданным эталонам»

Лабораторная работа №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 1 2 r cos( )
Полосовой 0 -1 -2 r cos( )
Высокочастотный -2 1 -2 r cos( )
Режекторный -2соs( ) 1 -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

Тема: «Программная реализация алгоритма сегментации сигнала по заданным эталонам»

Задание:

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

Ход работы:

Теория:

Алгоритм работы, реализуемой программы состоит из следующих шагов

Шаг 1) Формируется определенное количество (m штук) типов полигармонических сигналов, имеющих различные характеристики.

Шаг 2) На сформированных сигналах вычисляется эталонный вектор параметров

Шаг 3) Формируется реализация сигментируемого сигнала, состоящего из фрагментов m типов сигналов (длины фрагментов при этом являются случайными величинами). Случайной также является последовательность этих сигналов.

Шаг 4) Для полученного сигнала провести сигментацию.

 

Сегментация выполняется следующим образом:

1) Берется фрагмент сигнала фиксированной длинны

2) Для этого фрагмента находится вектор параметров

3) Вектор параметров сравнивается с эталонными векторами параметров, находится такой эталонный сигнал, различие векторов параметров которого с векторами параметров исследуемой части сигнала имеют наименьшее различие

В качестве эталонного параметра было решено взять автокорреляционную функцию

Автокорреляционная функция имеет следующий вид:


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

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

 

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

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

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

В левой части главной формы находятся 3 эталонных сигнала (их параметры вводит пользователь). После их ввода Необходимо отрисовать сгенерированный сигнал (состоящий из эталонных) и затем сегментированный. Цветом выделяются различные типы сигналов.


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

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;

 

namespace Сигментация_сигнала

{

public class Signal

{

   public Signal()

   {

 

   }

 

   public Signal( int Tip,

               Color Cvet,

               float Vremia,

               float Period_deskretizaciil,

               int kolvo_garmonik,

               float[] Massiv_A,

               float[] Massiv_fi,

               float[] Massiv_V)

   {

               Sign = new List<PointF>();

               this.Tip = Tip;

               this.Cvet = Cvet;

               this.Vremia= Vremia;

               this.Period_deskretizaciil = Period_deskretizaciil;

               this.kolvo_garmonik = kolvo_garmonik;

               this.Massiv_A = Massiv_A;

               this.Massiv_fi = Massiv_fi;

               this.Massiv_V = Massiv_V;

   }

   public int Tip;

   public Color Cvet;

   public float Vremia;

   public float Period_deskretizaciil;

   public int kolvo_garmonik;

   public float[] Massiv_A;

   public float[] Massiv_fi;

   public float[] Massiv_V;

   public List<PointF> Sign;

   public float[] Etalon;

 

   public void Otrisovka(Panel a)

   {

       Graphics g = a.CreateGraphics();

       float coff_x =a.Size.Width/Vremia;

 

       float max_A = 0;

       for (int i = 0; i < Sign.Count; i++)

       {

           if (Sign[i].Y > max_A) max_A = Sign[i].Y;

       }

 

       float coff_y =a.Size.Height/2/max_A;

       for (int i = 0; i < Sign.Count - 1; i++)

       {

           g.DrawLine(new Pen(Cvet, 2.0f), Sign[i].X * coff_x, Sign[i].Y * coff_y + a.Size.Height /2, Sign[i + 1].X * coff_x, Sign[i + 1].Y * coff_y + a.Size.Height/2);

       }

       g.DrawLine(new Pen(Color.Black, 1), 0, a.Size.Height / 2, a.Size.Width, a.Size.Height / 2);

   }

 

   public void Otrisovka(Panel a,float[] e1, float[] e2, float[] e3)

   {

       Graphics g = a.CreateGraphics();

       float coff_x = a.Size.Width / Vremia;

 

       float max_A = 0;

       for (int i = 0; i < Sign.Count; i++)

       {

           if (Sign[i].Y > max_A) max_A = Sign[i].Y;

       }

 

 

       float coff_y = a.Size.Height / 2 / max_A;

 

       Color[] Cveta = new Color[Sign.Count / 100];

 

       for (int i = 0; i < Sign.Count / 100; i++)

       {

           float[] et = new float[100];

 

           for (int j = 1; j < 100; j++)

           {

               try

               {

                   et[j] = 0;

                   for (int j1 = 0; j1 < j; j1++ )

                       et[j] += Sign[j1 + 100 * i].Y * Sign[j1 + j + 100 * i].Y;

                   et[j] /= j;

               }

               catch (Exception ex)

               {

 

               }

           }

 

           float r1=0.0f;

           float r2=0.0f;

           float r3=0.0f;

 

           for (int k = 0; k < 100; k++)

           {

               r1 += Math.Abs(e1[k] - et[k]);

               r2 += Math.Abs(e2[k] - et[k]);

               r3 += Math.Abs(e3[k] - et[k]);

           }

 

           if (r1 <= r2 && r1 <= r3) Cveta[i] = Color.Red;

           if (r2 <= r1 && r2 <= r3) Cveta[i] = Color.Green;

           if (r3 <= r1 && r3 <= r2) Cveta[i] = Color.Blue;

 

       }

 

           for (int i = 0; i < Sign.Count - 1; i++)

          {

               try

               {

 

                   g.DrawLine(new Pen(Cveta[i / 100], 2.0f), Sign[i].X * coff_x, Sign[i].Y * coff_y + a.Size.Height / 2, Sign[i + 1].X * coff_x, Sign[i + 1].Y * coff_y + a.Size.Height / 2);

                  }

               catch (Exception ex)

               {

 

               }

           }

       g.DrawLine(new Pen(Color.Black, 1), 0, a.Size.Height / 2, a.Size.Width, a.Size.Height / 2);

   }

 

   public void Podschet_etalona()

   {

       Etalon = new float[100];

       for (int i = 1; i < 100; i++)

       {

           Etalon[i] = 0;

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

           {

               Etalon[i] += Sign[j].Y * Sign[j + i].Y;

           }

           Etalon[i] = Etalon[i] / i;

       }

   }

 

   public void Generate_signal(Signal S1, Signal S2, Signal S3)

   {

       Random rnd = new Random();

       Sign = new List<PointF>();

       Cvet = Color.PaleVioletRed;

       float X=0;

       for (int i = 0; i < rnd.Next(8, 12); i++)

       {

           Signal Sn = new Signal();

           int n = rnd.Next(3);

           if (n == 0)

           {

               Sn = S1;

           }

           if (n == 1)

           {

               Sn = S2;

           }

           if (n == 2)

           {

               Sn = S3;

           }

 

           for (float k = 0; k < rnd.Next(1,3); k += 0.001f)

           {

               PointF temp = new PointF(X, 0);

               for (int j = 0; j < Sn.kolvo_garmonik; j++)

               {

                   temp.Y = (float)(temp.Y + Sn.Massiv_A[j] * Math.Cos(2 * 3.14 * Sn.Massiv_V[j] * X + Sn.Massiv_fi[j]));

               }

               Sign.Add(temp);

               X += 0.001f;

           }

 

       }

       Vremia = X;

   }

 

   public void Generate_signal()

   {

       Sign.Clear();

 

   if (Tip ==0)

   {

       //Склейка сигнала

   }

   else

   {

       for (float i = 0; i < Vremia;i+=Period_deskretizaciil)

       {

       PointF temp = new PointF(i,0);

       for (int j=0;j<kolvo_garmonik;j++)

       {

           temp.Y = (float)(temp.Y + Massiv_A[j] * Math.Cos (2 * 3.14 * Massiv_V[j] * i + Massiv_fi[j]));

       }

       Sign.Add(temp);

       }

}

   }

 

 

}

}

 

 

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;

 

namespace Сигментация_сигнала

{

public partial class Form1 : Form

{

   public Signal S1, S2, S3, R1, R2;

   public Form1()

   {

       S1 = new Signal(1, Color.Red, 1, 0.001f, 1, new float[1] { 1.0f }, new float[1] { 1.0f }, new float[1] { 1.0f });

       S2 = new Signal(1, Color.Green, 1, 0.001f, 2, new float[2] { 10.0f,2.0f }, new float[2] { 10.0f,20.0f }, new float[2] { 10.0f,0.0f });

       S3 = new Signal(1, Color.Blue, 1, 0.001f, 1, new float[1] { 50.0f }, new float[1] { 50.0f }, new float[1] { 50.0f });

       R1 = new Signal();

       R1.Generate_signal(S1, S2, S3);

       R2 = new Signal();

       R2.Vremia = R1.Vremia;

       R2.Sign = R1.Sign;

 

       S1.Generate_signal();

       S2.Generate_signal();

       S3.Generate_signal();

 

       S1.Podschet_etalona();

       S2.Podschet_etalona();

       S3.Podschet_etalona();

 

           

 

 

       InitializeComponent();

       R2.Otrisovka(panel5, S1.Etalon, S2.Etalon, S3.Etalon);

   }

 

   private void Form1_Load(object sender, EventArgs e)

   {

 

   }

 

   private void panel1_Paint(object sender, PaintEventArgs e)

   {

       S1.Generate_signal();

       S1.Otrisovka(panel1);

   }

 

   private void DG1_CellContentClick(object sender, DataGridViewCellEventArgs e)

   {

 

   }

 

   private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

   {

 

   }

 

   private void button1_Click(object sender, EventArgs e)

   {

       float[] A1 = new float[this.dataGridView1.Rows.Count-1];

       float[] V1 = new float[this.dataGridView1.Rows.Count-1];

       float[] fi1 = new float[this.dataGridView1.Rows.Count-1];

 

       for (int i = 0; i < dataGridView1.Rows.Count-1; i++)

       {

           A1[i] = float.Parse(dataGridView1.Rows[i].Cells["A1"].Value.ToString());

           V1[i] = float.Parse(dataGridView1.Rows[i].Cells["V1"].Value.ToString());

           fi1[i] = float.Parse(dataGridView1.Rows[i].Cells["fi1"].Value.ToString());

       }

       S1 = new Signal(1, Color.Red, 1.0f, 0.001f, dataGridView1.Rows.Count-1, A1, fi1, V1);

 

       panel1.Invalidate();

   }

 

   private void button2_Click(object sender, EventArgs e)

   {

       float[] A1 = new float[this.dataGridView2.Rows.Count - 1];

       float[] V1 = new float[this.dataGridView2.Rows.Count - 1];

       float[] fi1 = new float[this.dataGridView2.Rows.Count - 1];

 

       for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)

       {

           A1[i] = int.Parse(dataGridView2.Rows[i].Cells["A2"].Value.ToString());

           V1[i] = int.Parse(dataGridView2.Rows[i].Cells["V2"].Value.ToString());

           fi1[i] = int.Parse(dataGridView2.Rows[i].Cells["fi2"].Value.ToString());

       }

       S2 = new Signal(2, Color.Green, 1.0f, 0.001f, dataGridView2.Rows.Count - 1, A1, fi1, V1);

 

        panel2.Invalidate();

   }

 

   private void button3_Click(object sender, EventArgs e)

   {

       float[] A1 = new float[this.dataGridView3.Rows.Count - 1];

       float[] V1 = new float[this.dataGridView3.Rows.Count - 1];

       float[] fi1 = new float[this.dataGridView3.Rows.Count - 1];

 

       for (int i = 0; i < dataGridView3.Rows.Count - 1; i++)

       {

           A1[i] = float.Parse(dataGridView3.Rows[i].Cells["A3"].Value.ToString());

           V1[i] = float.Parse(dataGridView3.Rows[i].Cells["V3"].Value.ToString());

           fi1[i] = float.Parse(dataGridView3.Rows[i].Cells["fi3"].Value.ToString());

       }

       S3 = new Signal(3, Color.Blue, 1.0f, 0.001f, dataGridView3.Rows.Count - 1, A1, fi1, V1);

 

       panel3.Invalidate();

   }

 

   private void panel2_Paint(object sender, PaintEventArgs e)

   {

       S2.Generate_signal();

       S2.Otrisovka(panel2);

   }

 

   private void panel3_Paint(object sender, PaintEventArgs e)

   {

       S3.Generate_signal();

       S3.Otrisovka(panel3);

   }

 

   private void button4_Click(object sender, EventArgs e)

   {

       R1 = new Signal();

       R1.Tip = 0;

       R1.Generate_signal(S1, S2, S3);

       panel4.Invalidate();

   }

 

   private void panel4_Paint(object sender, PaintEventArgs e)

   {

           

       R1.Otrisovka(panel4);

           

   }

 

   private void button5_Click(object sender, EventArgs e)

   {

       R2 = new Signal();

       R2.Vremia = R1.Vremia;

       R2.Sign = R1.Sign;

       S1.Podschet_etalona();

       S2.Podschet_etalona();

       S3.Podschet_etalona();

 

       panel5.Invalidate();

   }

 

   private void panel5_Paint(object sender, PaintEventArgs e)

   {

       R2.Otrisovka(panel5, S1.Etalon, S2.Etalon, S3.Etalon);

   }

 

    

}

}

 


Дата добавления: 2021-05-18; просмотров: 109; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!