Первая страница
Наша команда
Контакты
О нас

    Головна сторінка



Метою даної роботи є розробка інструменту для дослідження та покращення точності роботи ацп послідовного наближення

Метою даної роботи є розробка інструменту для дослідження та покращення точності роботи ацп послідовного наближення




Сторінка5/5
Дата конвертації08.05.2017
Розмір0.63 Mb.
1   2   3   4   5
науково-практична конференція «Методи та засоби кодування, захисту й ущільнення інформації» : Вінниця, 23-25 квітня 2013 р.

Наукова конференція - форма організації наукової діяльності, при якій дослідники (не обов'язково вчені чи студенти) представляють і обговорюють свої роботи. Зазвичай заздалегідь (в інформаційному листі або стендовій оголошенні) повідомляється про тему, час і місце проведення конференції.

- УДК 681.3:621.375.

  • Страуструп Б. Язык программирования С , пер с англ. под ред. Мартынова / Б.Страуструп. – М.: Бином, 2011. – 1136с. – ISBN 0-201-70073-5.

  • Шилдт Г. С базовый курс, 3е изд. пер с англ. под ред. Н.М.Ручко / Г.Шилдт. – М.:Вильямс, 2010. – ISBN 978-5-8459-0768-4.

  • Thelin J. Foundations of Qt Development / J. Thelin. – NY:Apress, 2007. – 528c. - IBSN 1-59059-831-3.

  • Summerfield M. Advanced Qt Programming: Creating Great Software with C and Qt 4 / M. Summerfield. – NJ: Prentice Hall, 2010. – 554c. – IBSN 0-32163-590-6.

  • Національний класифікатор професій ДК 003:2010 (від 28.07.

    Класифікатор професій - національний класифікатор України, призначений для застосування під час запису про роботу у трудові книжки працівників.

    2010 року № 327) [Електронний ресурс]. – Режим доступу : http//www.kadrovik01.com.ua.

  • Довідник кваліфікаційних характеристик професій працівників [Електронний ресурс].

    Кваліфікаці́йна характери́стика - це нормативний документ компетентного фахового органу, погоджений із замовником кадрів, у якому формулюються вимоги до професійних якостей, знань і умінь фахівця, що необхідні для виконання завдань професійної діяльності згідно з потребами ринку праці.

    – Режим доступу : http//www.jobs.ua.

  • Административные и бытовые здания СНиП 2.09.04−87 (2000) [Електронний ресурс]. – Режим доступу : http//www.document.ua/docs/
    tdoc429.php.

  • Правила експлуатації вогнегасників. НАПБ Б.01.008–2004 [Електронний ресурс]. – Режим доступу : http//www.dnaop.com/html/1724.html.

  • Типові норми належності вогнегасників. НАПБ Б.03.001–2004 [Електронний ресурс]. – Режим доступу : http//www.dnaop.com.

  • НПАОП 0.00–1.28–10 «Правила охорони праці під час експлуатації електронно-обчислювальних машин» [Електронний ресурс]. – Режим доступу : http//www.library.univ.kiev.ua.

  • Денисенко А. Ф. Методичні вказівки до написання розділу «Охорона праці» в дипломних роботах для студентів економічних спеціальностей усіх форм навчання /Денисенко А. Ф. – Суми : СумДУ, 2008. – 39 с.

  • Офіційний сайт Заюкова І. В. http://zaykov.vk.vntu.edu.ua з посиланням на домашню електронну сторінку http://ivanzayukov.at.ua/.

  • Пожежна автоматика будинків і споруд». ДБН В.2.5–13–98 [Електронний ресурс]. – Режим доступу : http//www.dnaop.com.

  • Зеленська Є.І. Метод оперативної ідентифікації відхилень ваг розрядів ацп послідовного наближення / Зеленська Є.І. – Тези доповідей XLIIІ науково-технічної конференції професорсько-викладацького складу, співробітників та студентів університету з участю працівників науково дослідних організацій та інженерно-технічних працівників підприємств м. Вінниці та області : електронне наукове видання матеріалів конференції, Вінниця, 12-14 березня 2014 р.

    Нау́ка - сфера діяльності людини, спрямована на отримання (вироблення і систематизацію у вигляді теорій, гіпотез, законів природи або суспільства тощо) нових знань про навколишній світ. Основою науки є збирання, оновлення, систематизація, критичний аналіз фактів, синтез нових знань або узагальнень, що описують досліджувані природні або суспільні явища та (або) дозволяють будувати причинно-наслідкові зв'язки між явищами і прогнозувати їх перебіг.

    / Міністерство освіти та науки України, Вінницький національний технічний унівеситет : [Електронний ресурс] . — Режим доступу: http://conf.vntu.edu.ua/allvntu/2014/initki/txt/Zelenska.pdf.

  • Зеленська Є.І. Метод оперативної ідентифікації відхилень ваг розрядів ацп послідовного наближення / Зеленська Є.І. – Тези доповідей Четвертої Міжнародної науково-практичної конференції «Інформаційні технології та комп’ютерна інженерія»: електронне наукове видання матеріалів конференції, Вінниця, 28-30 травня 2014 р.

    Міністе́рство осві́ти і нау́ки Украї́ни (МОН України) - центральний орган виконавчої влади України.

    Наукова публікація - це опублікований опис наукового дослідження, що містить аналіз сутності певної наукової проблеми, методи і результати її дослідження, науково обґрунтовані висновки. Завданням наукових публікацій є знайомити науковий світ з результатами досліджень окремих вчених та груп науковців.

    / Міністерство освіти та науки України, Вінницький національний технічний унівеситет : [Електронний ресурс] . — Режим доступу: http://epsi.vntu.edu.ua/download/programm2014.pdf.

    ДОДАТКИ
    Додаток А – Інструкція користувача

    Після запуску програми користувач бачить одне вікно, у яке потрібно ввести вхідні дані для роботи програмного забезпечення для моделювання роботи АЦП послідовного наближення. На рисунку А.1 зображений вигляд вікна, призначеного для введення початкових даних.

    Рисунок А.1 – Вікно для введення вхідних даних

    Після введення та натиснення кнопки «Згенерувати ХП» з’являється наступне вікно, яке показує ХП та невикористані комбінації відповідно до введених даних. Вікно з ХП наведено на рисунку А.2.

    Рисунок А.2 – Вікно з ХП

    Якщо користувач хоче додати похибку до будь-якого з розрядів, потрібно натиснути кнопку «Додати похибку», яка викличе наступне вікно, вигляд якого наведено на рисунку А.3.

    Рисунок А.3 – Вікно введення похибки

    Для введення похибки потрібно натиснути «ОК» на вікні, яке наведено на рисунку А.3. Після цього графіки ХП будуть перебудовані з урахуванням відхилення.

    Для завершення роботи програми потрібно закрити початкове вікно, наведене на рисунку А.1.


    Додаток Б – Лістинг програми

    errordialog.h:

    #ifndef ERRORDIALOG_H

    #define ERRORDIALOG_H


    #include
    namespace Ui {

    class ErrorDialog;

    }
    class ErrorDialog : public QDialog

    {

    Q_OBJECT


    public:

    explicit ErrorDialog(QWidget *parent = 0);

    ErrorDialog();

    void setData(QVector weights, QVector errors);

    QVector weights, errors, errorWeights;

    public slots:

    void accept();
    private:

    Ui::ErrorDialog *ui;

    };
    #endif // ERRORDIALOG_H

    errordialog.cpp:

    #include "errordialog.h"

    #include "ui_errordialog.h"

    #include
    ErrorDialog::ErrorDialog(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::ErrorDialog)

    {

    ui->setupUi(this);



    }
    void ErrorDialog::accept() {

    errorWeights.resize(weights.size());

    for(int i = 0; i < weights.size(); i) {

    double error = ui->tableWidget->item(i, 2)->text().toDouble();

    errors[i] = error;

    errorWeights[i] = weights[i] weights[i]*error/100.0;

    }
    this->done(QDialog::Accepted);

    }
    void ErrorDialog::setData(QVector weights, QVector errors){

    int n = weights.size();

    this->weights = weights;

    this->errors = errors;
    ui->tableWidget->setRowCount(n);

    for (int i = 0; i < n; i) {

    QTableWidgetItem *newItem0 = new QTableWidgetItem(QString::number(n - i - 1));

    ui->tableWidget->setItem(i, 0, newItem0);

    QTableWidgetItem *newItem1 = new QTableWidgetItem(QString::number(this->weights[i]));

    ui->tableWidget->setItem(i, 1, newItem1);

    QTableWidgetItem *newItem2 = new QTableWidgetItem(QString::number(this->errors[i]));

    ui->tableWidget->setItem(i, 2, newItem2);

    }

    }
    ErrorDialog::ErrorDialog()



    {

    delete ui;

    }

    mainwindow.h:



    #ifndef MAINWINDOW_H

    #define MAINWINDOW_H


    #include

    #include "mainplot.h"


    namespace Ui {

    class MainWindow;

    }
    class MainWindow : public QMainWindow

    {

    Q_OBJECT


    public:

    explicit MainWindow(QWidget *parent = 0);

    MainWindow();
    private:

    Ui::MainWindow *ui;

    MainPlot plot;
    private slots:

    void simulate();

    };
    #endif // MAINWINDOW_H

    mainwindow.cpp:

    #include "mainwindow.h"

    #include "ui_mainwindow.h"

    #include

    #include

    #include
    typedef QPair DoublePair;

    typedef QList DoublePairList;


    MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

    {

    ui->setupUi(this);



    connect(ui->simulateButton, SIGNAL(clicked()), this, SLOT(simulate()), Qt::UniqueConnection);

    }
    double alfa, n, aInput, step, aMax;


    void MainWindow::simulate()

    {

    alfa = (this -> ui-> alfaLine->text()).toDouble();



    n = (this -> ui-> nLine->text()).toDouble();

    step = (this -> ui-> stepLine->text()).toDouble();

    aInput = (this -> ui-> aInputLine ->text()).toDouble();
    //set initial errors and weights

    QVector weights(n);

    double cur = 1;

    for(int i = n - 1; i >= 0; i--) {

    weights[i] = cur;

    cur *= alfa;

    }

    this->plot.weights = weights;



    this->plot.pureWeights = weights;

    this->plot.errors.clear();

    this->plot.errors.resize(n);

    this->plot.errors.fill(0);


    //show plot

    plot.getData(alfa, n, step, aInput);

    plot.show();
    }
    MainWindow::MainWindow()

    {

    delete ui;



    }

    mainplot.h:

    #ifndef MAINPLOT_H

    #define MAINPLOT_H


    #include

    #include

    #include "qcustomplot.h"

    #include "errordialog.h"


    typedef QPair DoublePair;

    typedef QList DoublePairList;


    namespace Ui {

    class MainPlot;

    }
    class MainPlot : public QWidget

    {

    Q_OBJECT


    public:

    explicit MainPlot(QWidget *parent = 0);

    MainPlot();

    DoublePairList data;

    void getData(double alfa, double n, double step, double aInput);

    QVector unusedCodeCombinations;

    QVector weights, errors, pureWeights;
    public slots:

    void yAxisChanged(QCPRange range);

    void showErrorDialog();

    void rebuildPlot();


    private:

    double getValue(QString code);

    double n, alfa, step, aInput;

    ErrorDialog error_dialog;

    long long getCode(double aIn, double n);

    double getMax();

    QVector yTickVectorLabels;

    QVector yCurrentVectorLabels;

    Ui::MainPlot *ui;

    };
    #endif // MAINPLOT_H

    mainplot.cpp:

    #include "mainplot.h"

    #include "ui_mainplot.h"

    #include "qcustomplot.h"

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include
    const int kVisibleLabels = 15;
    MainPlot::MainPlot(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::MainPlot)

    {

    ui->setupUi(this);



    connect(ui->widget->yAxis, SIGNAL(rangeChanged(QCPRange)), this, SLOT(yAxisChanged(QCPRange)));

    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(showErrorDialog()));

    connect(&error_dialog, SIGNAL(accepted()), this, SLOT(rebuildPlot()));

    }
    void MainPlot:: showErrorDialog() {

    this->error_dialog.setData(pureWeights, errors);

    this->error_dialog.show();

    }
    void MainPlot::rebuildPlot() {

    weights = this->error_dialog.errorWeights;

    errors = this->error_dialog.errors;

    getData(alfa, n, step, aInput);

    }
    void MainPlot::yAxisChanged(QCPRange range) {

    int count = range.upper - range.lower;

    int gap = std::max(1, count / kVisibleLabels);

    int current_gap = 0;

    for (int i = 0; i < yCurrentVectorLabels.size(); i) {

    current_gap = 1;

    if (current_gap == gap) {

    current_gap = 0;

    yCurrentVectorLabels[i] = yTickVectorLabels[i];

    } else {


    yCurrentVectorLabels[i] = "";

    }

    }



    ui->widget->yAxis->setTickVectorLabels(yCurrentVectorLabels);

    }
    double MainPlot::getValue(QString code) {

    double res = 0.0;

    for (int i = 0; i < code.size(); i)

    if (code[i] == '1') res = weights[i];

    return res;

    }
    void MainPlot::getData(double alfa, double n, double step, double aInput)

    {

    this->alfa = alfa;



    this->n = n;

    this->step = step;

    this->aInput = aInput;

    double cur = aInput, max = getMax();

    data.clear();

    yTickVectorLabels.clear();

    yCurrentVectorLabels.clear();

    unusedCodeCombinations.clear();

    while(cur <= max) {

    DoublePair next(cur, getCode(cur, n));

    data.append(next);

    cur = step;

    }
    QCustomPlot *plot = ui->widget;

    plot->axisRect()->setupFullAxesBox(true);

    plot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);

    plot->xAxis->setLabel("Input signal");

    plot->yAxis->setLabel("Code");

    QVector x;

    QVector y, yTickVector;
    //prepare values for yTickVectorLabels

    long long maxY = 0;

    for(int i = 0; i < this->weights.size(); i ) {

    maxY = 1 10*maxY;

    }

    QString maxYLabel = QString::number(maxY), currentY;



    int num = 0;

    while(currentY != maxYLabel) {

    currentY = (QString::number(num, 2));

    while(currentY.size() < n) {

    currentY.push_front('0');

    }
    yTickVectorLabels.push_back(currentY);

    yTickVector.push_back(num);

    num ;


    }

    yCurrentVectorLabels = yTickVectorLabels;

    QVector isTickLabelUsed(yTickVectorLabels.size(), 0);
    // prepare data for both axis and find unsed code combinations

    for(int i = 0; i < data.size(); i ) {

    x.push_back(data[i].first);

    bool unused_ok;

    int y_value = QString::number(data[i].second).toInt(&unused_ok, 2);

    isTickLabelUsed[y_value] = 1;

    y.push_back(y_value);

    }

    for(int i = 0; i < yTickVectorLabels.size(); i) {



    if (!isTickLabelUsed[i] && getValue(yTickVectorLabels[i]) >= aInput)

    this->unusedCodeCombinations.push_back(yTickVectorLabels[i]);

    }
    //main graph settings

    plot->addGraph();

    plot->xAxis->setRange(x[0], x[x.size() - 1]);

    plot->yAxis->setAutoTickLabels(false);

    plot->yAxis->setAutoTicks(false);

    plot->yAxis->setTickVector(yTickVector);

    plot->yAxis->setTickVectorLabels(yTickVectorLabels);

    plot->graph(0)->setData(x, y);

    plot->graph(0)->setLineStyle(QCPGraph::lsNone);

    plot->graph(0)->setScatterStyle((QCPScatterStyle(QCPScatterStyle::ssDisc, 5)));


    //unused graph settings

    QVector unusedXData, unusedYData;

    for (int i = 0; i < this->unusedCodeCombinations.size(); i) {

    bool unused_ok;

    int y_value = unusedCodeCombinations[i].toInt(&unused_ok, 2);

    unusedXData.push_back(getValue(unusedCodeCombinations[i]));

    unusedYData.push_back(y_value);

    }
    plot->addGraph();

    plot->graph(1)->setLineStyle(QCPGraph::lsNone);

    plot->graph(1)->setData(unusedXData, unusedYData);

    plot->graph(1)->setPen(QPen(QColor(255, 213, 0)));

    plot->graph(1)->setScatterStyle((QCPScatterStyle(QCPScatterStyle::ssDisc, 5)));


    //replotting

    plot->rescaleAxes();

    plot->replot();
    //unused code combinations

    QString unusedCombinationsString = "";

    for(int i = 0; i < this->unusedCodeCombinations.size(); i) {

    unusedCombinationsString.push_back(unusedCodeCombinations[i] "\t" QString::number(unusedYData[i]) "\n");

    }

    this->ui->textEdit->setText(unusedCombinationsString);



    }
    double MainPlot::getMax()

    {

    double res = 0;



    for (int i = 0; i < weights.size(); i )

    res = weights[i];

    return res;

    }
    long long MainPlot::getCode(double aIn, double n) {

    double curValue = aIn;

    QString res = "";

    for(int i = 0; i < n ; i) {

    if(weights[i] <= curValue) {

    res.push_back("1");

    curValue -= weights[i];

    } else {

    res.push_back("0");

    }

    }

    while(res.size() < n) {



    res.push_back("0");

    }

    return res.toLongLong();



    }

    MainPlot::MainPlot()



    {

    delete ui;



    }
    Додаток В – Графічні матеріали
  • 1   2   3   4   5



  • Міністерство освіти