Разработка автоматизированной системы исследований
Расчет информационно-измерительного канала автоматизированной системы научных исследований, состоящего из дифференциального усилителя и активного фильтра по исходным данным. Разработка, функциональность программы, выполняющей анализ поступающих сигналов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.11.2013 |
Размер файла | 95,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Введение
сигнал усилитель программа автоматизированный
Особое значение для повышения эффективности науки приобретает автоматизация научных исследований, позволяющая получать более точные и полные модели исследуемых объектов и явлений, ускорять ход научных исследований и снижать их трудоемкость, изучать сложные объекты и процессы, исследование которых традиционными методами затруднительно или невозможно. Применение автоматизированных систем научных исследований и комплексных испытаний образцов новой техники (АСНИ) наиболее эффективно в тех современных областях науки и техники, которые имеют дело с использованием больших объемов информации.
Автоматизированные системы научных исследований и комплексных испытаний образцов новой техники обеспечивают получение значительного народнохозяйственного эффекта. Этот эффект образуется от повышения производительности труда в исследовательских и испытательных подразделениях, улучшения технико-экономических характеристик разрабатываемых объектов на основе получения и использования более точных моделей этих объектов, сокращения дорогостоящих натурных испытаний, исключения некоторых стадий опытно-конструкторских работ, что в конечном счете приводит к снижению затрат на разработку объектов новой техники.
АСНИ отличаются от других типов автоматизированных систем (АСУ, АСУТП, САПР и т.д.) характером информации, получаемой на выходе системы. Прежде всего, это обработанные или обобщенные экспериментальные данные, но главное - полученные на основе этих данных математические модели исследуемых объектов, явлений или процессов. Адекватность и точность таких моделей обеспечивается всем комплексом методических, программных и других средств системы. В АСНИ могут использоваться также и готовые математические модели для изучения поведения тех или иных объектов и процессов, а также для уточнения самих этих моделей. АСНИ поэтому являются системами для получения, корректировки или исследования моделей, используемых затем в других типах автоматизированных систем для управления, прогнозирования или проектирования.
Целью курсового проекта является разработка технического и программного обеспечения автоматизированной системы научных исследований.
В соответствии с заданием на курсовое проектирование необходимо разработать техническое и программное обеспечение: выполнить расчет информационно-измерительного канала автоматизированной системы научных исследований, состоящего из дифференциального усилителя и активного фильтра по исходным данным, а также разработать программу, выполняющую анализ поступающих сигналов.
1. Разработка технического обеспечения
АСНИ предназначена для спектрального анализа данных, поступающих от первичных преобразователей физических величин, характеризующих некоторый технологический процесс.
В состав АСНИ входят следующие подсистемы:
- подсистема измерений - информационно-измерительный канал(ИИК);
- подсистема передачи данных;
- подсистема обработки данных;
- подсистема визуализации и документирования данных.
ДУ предназначен для усиления сигналов, поступающих от датчика, и подавления синфазных помех.
ФНЧ выполняет функции противомаскировочного фильтра и служит для подавления высокочастотных составляющих сигнала в целях исключения ошибок аналого-цифрового преобразования.
НУ служит для согласования входного сигнала АЦП с динамическим диапазоном изменения преобразуемого динамического сигнала.
2. Методическое обеспечение
2.1 Моделирование и обработка данных, поступающих от АЦП
Одной из важнейших задач, решаемых автоматизированными системами, является сбор и обработка данных, поступающих от первичных преобразователей (датчиков), установленных на объектах автоматизации. Эти данные рассматривают как временные ряды. Временной ряд - это множество наблюдений, генерируемых последовательно во времени. В зависимости от того, как изменяется время: непрерывно или дискретно, различают временные ряды непрерывные и дискретные.
Современные автоматизированные системы обрабатывают данные с помощью компьютеров, поэтому все данные, которые поступают в виде аналоговых сигналов, преобразуются в цифровую форму.
При исследовании процесса аналого-цифрового преобразования будут рассматриваться следующие временные ряды:
X(t) - исходная физическая величина (непрерывный ряд);
x(t) - выходной сигнал датчика (в вольтах), соответствующий функции X(t) (непрерывный временной ряд);
C(t) - выходной сигнал датчика x(t), переведенный в непрерывные отсчёты (фиктивный непрерывный временной ряд);
C(iT) - выходной сигнал датчика x(t), переведенный в непрерывные отсчёты - выборки, выполненные в дискретные моменты времени с периодом Т (дискретный временной ряд);
c(i) - выходной сигнал датчика x(t), переведенный в квантованные отсчёты, полученные после операции квантования (дискретный временной ряд);
e(i) - ошибка, e(i)=C(iT) - c(i).
В роли объектов исследования выступают детерминированные полигармонические сигналы и сигналы случайной природы. Структура полигармонического сигнала x(t) (непрерывного временного ряда) определена следующим соотношением:
где ak - амплитуда и fk - частота k-ой гармоники;
M - количество гармонических составляющих.
Непрерывный временной ряд C(t) можно представить как результат линейного преобразования функции x(t) в виде:
Параметр A и B определяются следующим соотношением:
A=(2N - 1)/(Umax - Umin)=(26-1)/3=42
B = - A xmin(t),
отсюда следует:
B= -42? (-3) = 127 (отсч.)
Значения дискретного временного ряда С(iT) и соответствующие значения дискретного временного ряда c(i), которые получаются на выходе АЦП, можно связать с помощью следующего соотношения:
В соотношении (3.3) выражение в квадратных скобках принимает целое значение в результате округления, выполняемого всегда в меньшую сторону.
Добавление к значениям временного ряда C(iT) величины 0,5 обеспечивает повышение точности округления.
Ошибка квантования e(i) определяется следующим соотношением:
Если модель АЦП работает правильно, то значения e(i), будут ограничены интервалом (-0,5; 0,5).
Последнюю формулу (3.4) можно переписать в виде
В этом случае можно считать, что временной ряд с(i) формируется как сумма соответствующих элементов временного ряда C(iT) и ошибки квантования, которую часто называют шумом квантования.
При идеальном преобразовании ошибка квантования распределена равномерно со стандартным отклонением ~0,29x, где x - шаг квантования. В этом легко убедиться.
На практике ошибкой квантования можно пренебречь, если диапазон изменений исходного непрерывного процесса занимает, возможно, большую часть шкалы квантования. В противном случае разрешающая способность окажется малой, и ошибка квантования станет существенной.
2.2 Спектральный анализ на основе преобразования Фурье
Определение дискретного преобразования Фурье
Дискретное преобразование Фурье (ДПФ) определяется следующим соотношением:
где X(k) - значение (комплексное) дискретного преобразования Фурье, определенное в частоте с номером k;
x(i) - значение (вещественное) исходного временного ряда, определенное в момент времени с номером i;
T - период дискретизации;
N - количество отсчетов (длина) временного ряда.
Дискретное преобразование Фурье связывает спектральную характеристику (комплексный спектр) X(k), определенную в дискретных значениях частоты (с номером k), с дискретными значениями временного ряда (сигнала) x(i), определенными в дискретные моменты времени (с номером i).
Масштаб представления спектральной характеристики определяется разрешением по частоте:
По номеру kчастоты fk можно найти ее значение в герцах:
(Гц)
Аналогично по номеру и времени ti можно найти его значение в секундах:
ti = iT
Обратное дискретное преобразование Фурье определяется соотношением:
Из сравнения формул (3.6) и (3.10) следует, что они отличаются знаком показателя экспоненты, множителем перед знаком суммы, а также переменной суммирования. Это позволяет строить единые программы для прямого и обратного дискретного преобразования Фурье.
Применяя формулу Эйлера, выражение (3.1) можно привести к виду:
Принимая во внимание (3.12), выражение (3.10) для обратного ДПФ можно привести к виду:
Выражения (3.12) и (3.13) могут быть положены в основу алгоритмов вычисления прямого и обратного ДПФ.
3. Описание программы
Программное обеспечение разрабатывается в вид приложения для ОС Windows.
3.1 Общие сведения
Разрабатываемая программа предназначена для моделирования работы системы обработки информации, состоящая из АЦП и блока анализа. Блок анализа позволяет находить характеристики генерируемого временного ряда, производить прямое и обратное преобразование Фурье и анализировать полученные результаты, оценивать спектральную плотность мощности несколькими способами. В программе так же предусматривается блок, генерирующий исходный временной ряд (поступающий на вход АЦП).
Входными данными для программы являются: разрядность АЦП; динамический диапазон напряжений АЦП; период дискретизации АЦП; амплитуда входного сигнала; число отсчетов (элементов генерируемого временного ряда); число гармоник и их величины; разрешение по частоте;% погрешность оценивания спектральных плотностей; база усреднения.
Выходными данными являются ряды: исходный временной ряд, дискретный временной ряд, ошибка квантования, грубая и сглаженные оценки спектров мощности, комплексный ряд.
3.2 Функциональное назначение
Данная программа предназначена для решения задач спектрально анализа.
Ее можно использовать для выполнения следующих задач:
1) генерация полигармонического сигнала;
2) вычисление грубых оценок спектральной плотности;
3) вычисление усредненных оценок СПМ методами усреднения по частотам и по участкам со сглаживанием комплексного спектра окнами сглаживания;
4) построение графиков;
5) генерирование отчета.
3.3 Описание логической структуры
Для нахождения сглаженных спектральных оценок в программе выполняются следующие действия:
1) генерирование или загрузка исходного временного ряда;
2) центрирование временного ряда;
3) выполнение ДПФ или БПФ и нахождение комплексного спектра;
4) сглаживание комплексного спектра окнами сглаживания;
5) нахождение грубых оценок спектральной плотности;
6) усреднение грубых оценок одним из методов (по частотам, по участкам).
3.4 Используемые технические средства
Программа состоит из одного основного модуля Unit1.cpp. Также в программе используются модули Unit2.cpp и manager.cpp.
Модуль Unit1 представляет собой главное окно программы и содержит выполнение генерации временного ряда, нахождение грубых оценок со сглаживанием комплексного спектра, нахождение оценок СП методом усреднения по частотам, нахождения оценки осредненной с помощью разбиения на участки.
Модуль DPF содержит функцию прямого преобразования Фурье.
Модуль IDPF содержит функцию обратного преобразования Фурье.
Модуль FFT содержит функцию быстрого прямого и обратного преобразования Фурье.
Ниже приведены описания программных функций и перецень их аргументов:
ComputeSeries - служит для генерации временного ряда. Алгоритм получения временного ряда заключается в суммировании значений всех гармоник в каждый конкретный момент времени. Количество отсчетов времени задается, и конец временного интервала получается путем умножения числа отсчетов на период дискретизации.
N - длина временного ряда;
Ng - количество гармоник;
Magnitude - амплитуда гармоник;
T - период дискретизации;
startFreq - частота начальнойграмоники
deltaFreq - шаг увеличения частоты
X - выходной массив (временной ряд).
floatMean (float* inpMass, intN) - служит для вычисления мат. ожидания.
floatVar (float *x, int N) - служит для вычисления дисперсии.
voidwind (float *x, intN, intw) - функция вычисления грубых оценок со сглаживанием комплексного спектра. В зависимости от передаваемого ей индекса применяет алгоритм сглаживания либо с помощью окна Гудмена, либо окна Гудмена-Эноксона-Отнеса. Используется в качестве вспомогательной функции при вычислении усредненныхоценкок спектральной плотности мощности.
x - временной ряд, подлежащий сглаживанию;
N - длина в. р.;
T - период дискретизации;
w - индекс вида окна;
w=1 - окно Гудмена-Эноксона-Отнеса;
w=2 - окно Гудмена.
void FFT (float *x, float *y, int n, int m, intind) - быстроепреобразованиеФурье.
x и y - входные / выходные массивы;
n - длина временного ряда;
t - период дискретизации;
m - двоичный логарифм от N
ind - индекс преобразования;
ind = 1 - прямое; ind = 2 - обратное.
voidDFT (intn, floatt, float *x, float *c, float *s) - быстрое преобразование Фурье.
Заключение
В результате выполненного проекта было разработано техническое и программное обеспечение автоматической системы научных исследований. В соответствии с ТЗ произведён расчёт информационно-измерительного канала, в который вошли расчёт дифференциального усилителя и расчёт фильтра низких частот. Канал обеспечивает заданную погрешность от синфазной помехи и согласование входа АЦП с выходом дифференциального усилителя по напряжению.
Разработано программное обеспечение для решения задачи спектрального анализа временных рядов. Программа была протестирована с данными из ТЗ, результаты тестирования и соответствующие им графики приведены в четвёртом разделе данной работы.
Разработанная программа позволяет моделировать работу АСНИ:
- генерирует исходный временной ряд;
- моделирует аналого-цифровое преобразование;
- анализирует сглаженную оценку спектральной плотности мощности двумя методами: усреднением по участкам и по частотам.
Приложение
Текст программных модулей
Unit1.cpp - основная, описывающая главное окно, программа
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include «Unit1.h»
#include «Unit2.cpp»
#include «unit2.h»
#include <string>
#include <iostream.h>
#include <io.h>
#include <locale>
#include <math.h>
#include <fstream.h>
// -
#pragma package (smart_init)
#pragma resource «*.dfm»
TFloatFormat format;
// -
__fastcall TForm1:TForm1 (TComponent* Owner)
: TForm(Owner)
{
}
// -
void ColLen (TStringGrid * G, int col) // функция подбирает ширину колонки
{
int max = 15;
for (int row=0; row<G->RowCount; row++) if (max<G->Canvas->TextWidth (G->Cells[col] [row])) max=G->Canvas->TextWidth (G->Cells[col] [row]);
G->ColWidths[col]=max+6;
};
void AllColLen (TStringGrid * G) // функция подбирает ширину всех колонок таблицы
{
for (int col = 0; col<G->ColCount; col++) ColLen (G, col);
};
TForm1 *Form1;
SeriesManager seriesManager;
void FillControls()
{
Form1->StringGrid1->CleanupInstance();
Form1->EditTempN->Text = seriesManager.N;
Form1->EditTempT->Text = seriesManager.T;
Form1->StringGrid1->RowCount = seriesManager.N+1;
Form1->StringGrid1->Cells[1] [0] = «t»;
Form1->StringGrid1->Cells[2] [0] = «X»;
Form1->StringGrid1->Cells[3] [0] = «Cii»;
Form1->StringGrid1->Cells[4] [0] = «Cti»;
for (int i = 0; i<seriesManager.N; i++)
{
Form1->Series1->AddXY (seriesManager. Ti[i], seriesManager.X[i]);
Form1->Series5->AddXY (seriesManager. Ti[i], seriesManager. Cii[i]);
Form1->Series6->AddXY (seriesManager. Ti[i], seriesManager. Cti[i]);
Form1->Series7->AddXY (seriesManager. Ti[i], seriesManager.e[i]);
Form1->StringGrid1->Cells[1] [i+1] = FloatToStrF (seriesManager. Ti[i], format, 3,3);
Form1->StringGrid1->Cells[2] [i+1] = FloatToStrF (seriesManager.X[i], format, 3,3);
Form1->StringGrid1->Cells[3] [i+1] = FloatToStrF (seriesManager. Cii[i], format, 3,3);
Form1->StringGrid1->Cells[4] [i+1] = FloatToStrF (seriesManager. Cti[i], format, 3,3);
Form1->StringGrid1->Cells[5] [i+1] = FloatToStrF (seriesManager.e[i], format, 3,3);
}
//AllColLen (Form1->StringGrid1);
}
void FillControlsAfterLoad()
{
Form1->StringGrid1->CleanupInstance();
Form1->StringGrid1->RowCount = seriesManager.N+1;
Form1->StringGrid1->Cells[1] [0] = «X»;
Form1->StringGrid1->Cells[2] [0] = «Cii»;
Form1->StringGrid1->Cells[3] [0] = «Cti»;
Form1->StringGrid1->Cells[4] [0] = «e»;
for (int i = 0; i<seriesManager.N; i++)
{
Form1->Series1->AddXY (seriesManager. Ti[i], seriesManager.X[i]);
Form1->StringGrid1->Cells[1] [i+1] = seriesManager.X[i];
}
//AllColLen (Form1->StringGrid1);
}
void __fastcall TForm1: Button1Click (TObject *Sender)
{
float T=StrToFloat (EditT->Text);
float nachFreq=StrToFloat (Editf1->Text);
float deltaFreq=StrToFloat (Editdf->Text);
float Ampl=StrToFloat (EditA->Text);
float n=StrToInt (Edit_n->Text);
float N=StrToInt (EditN->Text);
float razr=StrToFloat (EditRazr->Text);
float umax=StrToFloat (EditUmax->Text);
float umin=StrToFloat (EditUmin->Text);
seriesManager. InitializeData (N, T, Ampl, nachFreq, deltaFreq, n, umax, umin, razr);
bool isOk = seriesManager. ComputeSeries();
if(isOk)
{
FillControls();
}
}
// -
void __fastcall TForm1: Button3Click (TObject *Sender)
{
for (int i = 0; i < StringGrid1->ColCount; i++)
for (int j = 1; j < StringGrid1->RowCount; j++)
StringGrid1->Cells[i] [j] = «»;
Form1->StringGrid1->RowCount = 2;
this->Series1->Clear();
seriesManager. ClearAll();
Form1->EditTempN->Text = «»;
Form1->EditTempT->Text = «»;
}
// -
void __fastcall TForm1: Button2Click (TObject *Sender)
{
Application->Terminate();
}
// -
void __fastcall TForm1: CloseButtonClick (TObject *Sender)
{
Application->Terminate();
}
// -
void __fastcall TForm1: LoadDataClick (TObject *Sender)
{
this->OpenDialog1->Execute();
seriesManager. ClearAll();
seriesManager. LoadDataFromFile (this->OpenDialog1->FileName.c_str());
for (int i = 0; i < StringGrid1->ColCount; i++)
for (int j = 1; j < StringGrid1->RowCount; j++)
StringGrid1->Cells[i] [j] = «»;
Form1->StringGrid1->RowCount = 2;
this->Series1->Clear();
Form1->EditTempN->Text = seriesManager.N;
Form1->EditTempT->Text = seriesManager.T;
Form1->StringGrid1->CleanupInstance();
Form1->StringGrid1->RowCount = seriesManager.N+1;
Form1->StringGrid1->Cells[1] [0] = «X»;
Form1->StringGrid1->Cells[2] [0] = «Cii»;
Form1->StringGrid1->Cells[3] [0] = «Cti»;
Form1->StringGrid1->Cells[4] [0] = «e»;
for (int i = 0; i<seriesManager.N; i++)
{
Form1->Series1->AddXY (seriesManager. Ti[i], seriesManager.X[i]);
Form1->StringGrid1->Cells[2] [i+1] = seriesManager.X[i];
}
//AllColLen (Form1->StringGrid1);
}
// -
void __fastcall TForm1: SaveXClick (TObject *Sender)
{
this->SaveDialog1->Execute();
seriesManager. SaveData (this->SaveDialog1->FileName.c_str(), 0);
}
// -
void __fastcall TForm1: Cii1Click (TObject *Sender)
{
this->SaveDialog1->Execute();
seriesManager. SaveData (this->SaveDialog1->FileName.c_str(), 1);
}
// -
void __fastcall TForm1: Cti1Click (TObject *Sender)
{
this->SaveDialog1->Execute();
seriesManager. SaveData (this->SaveDialog1->FileName.c_str(), 2);
}
// -
void __fastcall TForm1:e1Click (TObject *Sender)
{
this->SaveDialog1->Execute();
seriesManager. SaveData (this->SaveDialog1->FileName.c_str(), 3);
}
// -
void __fastcall TForm1: Button4Click (TObject *Sender)
{
Series2->Clear();
Series3->Clear();
Form1->StringGrid2->Cells[1] [0] = «X(t)»;
Form1->StringGrid2->Cells[2] [0] = «C(t)»;
Form1->StringGrid2->Cells[3] [0] = «S(t)»;
Form1->StringGrid2->Cells[4] [0] = «X'(t)»;
float ti=0.0;
if (this->RadioButton1->Checked)
{
float* re;
float* im;
float* vre;
float* vim;
re = new float [seriesManager.N];
im = new float [seriesManager.N];
vre = new float [seriesManager.N];
vim = new float [seriesManager.N];
DFT (seriesManager.N, seriesManager.T, seriesManager.X, re, im);
IDFT (seriesManager.N, seriesManager.T, re, im, vre, vim);
for (int i=0; i<seriesManager.N; i++)
{
this->StringGrid2->RowCount=seriesManager.N;
StringGrid2->Cells[1] [1+i]=FloatToStrF (seriesManager.X[i], format, 3,3);
StringGrid2->Cells[2] [1+i]=FloatToStrF (re[i], format, 3,3);
StringGrid2->Cells[3] [1+i]=FloatToStrF (im[i], format, 3,3);
StringGrid2->Cells[4] [1+i]=FloatToStrF (vre[i], format, 3,3);
Series2->AddXY (i, sqrt (pow(re[i], 2)+pow (im[i], 2)));
Series3->AddXY (ti, vre[i]);
ti+=seriesManager.T;
}
//AllColLen(StringGrid2);
delete re, im, vre, vim;
}
if (this->RadioButton2->Checked)
{
float* re;
float* im;
float* vre;
float* vim;
re = new float [seriesManager.N];
im = new float [seriesManager.N];
vre = new float [seriesManager.N];
vim = new float [seriesManager.N];
for (int i=0; i<seriesManager.N; i++)
{
im[i]=0;
re[i]=seriesManager.X[i];
}
FFT (re, im, seriesManager.N, stepen (seriesManager.N), 1);
for (int i=0; i<seriesManager.N; i++)
{
re[i]*=seriesManager.T;
im[i]*=seriesManager.T;
vre[i]=re[i];
vim[i]=im[i];
}
FFT (vre, vim, seriesManager.N, stepen (seriesManager.N), 0);
for (int j=0; j<seriesManager.N; j++)
{
vre[j]/=(seriesManager.N*seriesManager.T);
}
for (int i=0; i<seriesManager.N; i++)
{
this->StringGrid2->RowCount=seriesManager.N;
StringGrid2->Cells[1] [1+i]=FloatToStrF (seriesManager.X[i], format, 3,3);
StringGrid2->Cells[2] [1+i]=FloatToStrF (re[i], format, 3,3);
StringGrid2->Cells[3] [1+i]=FloatToStrF (im[i], format, 3,3);
StringGrid2->Cells[4] [1+i]=FloatToStrF (vre[i], format, 3,3);
Series2->AddXY (i, sqrt (pow(re[i], 2)+pow (im[i], 2)));
Series3->AddXY (ti, vre[i]);
ti+=seriesManager.T;
}
//AllColLen(StringGrid2);
delete re, im, vre, vim;
}
}
// -
void __fastcall TForm1: Button5Click (TObject *Sender)
{
Series4->Clear();
this->ListBox1->Clear();
if (this->RadioButton3->Checked)
{
float* sxx=GrubayaOcenka (seriesManager.X, seriesManager.N, seriesManager.T);
for (int j=0; j<seriesManager.N; j++)
{
ListBox1->Items->Add (FloatToStrF(sxx[j], format, 3,3));
Series4->AddXY (j, sxx[j], "», clRed);
}
delete sxx;
}
if (this->RadioButton4->Checked)
{
float e;
e=StrToFloat (Edit2->Text);
float* sxx=UsrPoUchastkam (seriesManager.X, seriesManager.N, seriesManager.T, e);
for (int j=0; j<seriesManager.N; j++)
{
ListBox1->Items->Add (FloatToStrF(sxx[j], format, 3,3));
Series4->AddXY (j, sxx[j], "», clRed);
}
delete sxx;
}
if (this->RadioButton5->Checked)
{
float e;
float b;
e=StrToFloat (Edit2->Text);
b=StrToFloat (Edit1->Text);
int Ny;
float* sxx=UsrPoChastote (seriesManager, b, e, Ny);
for (int j=0; j<Ny; j++)
{
ListBox1->Items->Add (FloatToStrF(sxx[j], format, 3,3));
Series4->AddXY (j, sxx[j], "», clRed);
}
delete sxx;
}
}
// -
void __fastcall TForm1: Button6Click (TObject *Sender)
{
float mx=Mean (seriesManager.X, seriesManager.N);
Edit5->Text=FloatToStrF (mx, format, 3,3);
float disp=Var (seriesManager.X, seriesManager.N);
Edit4->Text=FloatToStrF (disp, format, 3,3);
float sko=sqrt(disp);
Edit3->Text=FloatToStrF (sko, format, 3,3);
}
Unit2.cpp - основные математические функции
// -
#pragma hdrstop
#include «manager.cpp»
#include «Unit2.h»
// -
#pragma package (smart_init)
float Mean (float* inpMass, int N)
{
float sum = 0;
for (int i=0; i<N; i++)
{
sum+=inpMass[i];
}
return sum/N;
};
float Var (float *x, int N)
{
float mx, sum;
sum=0;
mx = Mean (x, N);
for (int j=0; j<N; j++)
sum+=(x[j]+mx)*(x[j]+mx);
return sum/(N-1);
};
int stepen (int nn)
{
int M;
M=(int) (log10 (nn)/log10 (2));
return M;
}
void FFT (float *x, float *y, int n, int m, int ind)
{
int l, le, le1, ip, i, k, j, i1, j1;
float arg, s, t1, t2, t3, t4, c, v1, v2, v3;
for (l=1; l<=m; l++)
{
le=pow (2, m+1-l);
le1= le/2;
v1=1; v2=0; arg= pi/le1;
c=cos(arg);
s=pow((-1), ind)*sin(arg);
for (j=1; j<=le1; j++)
{
for (i=j; i<=n; i=i+le)
{
ip=i+le1-1; t1=x [i-1]+x[ip]; t2=y [i-1]+y[ip]; t3=x [i-1] - x[ip]; t4=y [i-1] - y[ip];
x[ip]=t3*v1-t4*v2; y[ip]=t4*v1+t3*v2; x [i-1]=t1; y [i-1]=t2;
}
v3=v1*c-v2*s; v2=v2*c+v1*s; v1=v3;
}
}
j=1;
for (i=1; i<n-1; i++)
{
if (i>=j) goto l25;
j1=j-1; i1=i-1; t1=x[j1]; t2=y[j1]; x[j1]=x[i1]; y[j1]=y[i1]; x[i1]=t1; y[i1]=t2;
l25: k=n/2;
l26: if (k>=j) goto l30;
j=j-k;
k=k/2;
goto l26;
l30: j=j+k;
}
};
float* Centr (float* InpMass, int N)
{
float mx = Mean (InpMass, N);
float* centr = new float[N];
for (int i =0; i<N; i++)
{
centr[i] = InpMass[i] - mx;
}
return centr;
};
void DFT (int n, float t, float *x, float *c, float *s)
{int k;
for (k=0; k<n; k++)
{int i;
c[k]=0;
s[k]=0;
for (i=0; i<n; i++)
{
c[k]+=x[i]*cos (2*3.141592654*k*i/n);
s[k]+=x[i]*sin (2*3.141592654*k*i/n);
}
c[k]=c[k]*t;
s[k]=s[k]* - t;
}
};
Размещено на Allbest.ru
Подобные документы
Разработка программного обеспечения автоматической системы научных исследований (АСНИ) в интегрированной среде программирования Borland C++ Builder 6.0, работающего в среде ОС Windows, позволяющего осуществлять управление процессом спектрального анализа.
курсовая работа [569,3 K], добавлен 05.03.2009Создание автоматизированной системы для упрощения работы с данными, расчётами и отчётами, анализа и хранения поступающих в лабораторию хроматографических исследований данных. Функциональные требования к системе. Проектирование программного обеспечения.
курсовая работа [1,9 M], добавлен 23.01.2013Анализ мировой методологии MSF. Разработка автоматизированной системы проведения маркетинговых исследований, вариантов ее использования и расчет экономических показателей внедрения системы для заказчика. Построена логическая и физическая модель данных.
дипломная работа [2,6 M], добавлен 24.03.2010Разработка программного обеспечения автоматизированной системы безопасности. Задание лингвистических переменных в среде MatLAB. Развитие нечеткой логики. Характеристика нечетких систем; смещение центра их исследований в сторону практических применений.
курсовая работа [2,2 M], добавлен 10.02.2013Разработка программы автоматизации подбора запчастей для ремонта автомобилей. Структурные единицы сообщений. Концептуальная модель системы. Алгоритм работы автоматизированной системы. Физическая модель данных. Описание пользовательского интерфейса.
дипломная работа [2,1 M], добавлен 20.06.2013Понятие автоматизированной системы (АС). Обзор литературы, введение в базы данных. Назначение разработки, составные части программы. Программная и эксплуатационная документация, технико-экономическое обоснование проекта, характеристика программы.
дипломная работа [759,6 K], добавлен 27.04.2009- Разработка автоматизированной системы оценки кредитоспособности физических лиц (АС "CreditAnalysis")
Проектирование автоматизированной информационной системы по оценке кредитоспособности клиента Банка для принятия решения по выдаче кредита. Разработка интерфейса и алгоритма работы программы. Составление сметы затрат на создание программного изделия.
дипломная работа [2,3 M], добавлен 26.07.2014 Теоретические основы применения информационных компьютерных технологий в управлении образовательным учреждением. Разработка и внедрение варианта управления гимназией на основе адаптации автоматизированной информационно-аналитической системы "АВЕРС".
дипломная работа [106,4 K], добавлен 14.05.2011Анализ подходов к системе дистанционного образования. Разработка принципов и структуры программы для внеклассной работы школьников по информатике. Проектирование системы с использованием CASE-средств. Построение автоматизированной модели данных.
дипломная работа [2,6 M], добавлен 27.10.2017Разработка автоматизированной информационной системы для учета и контроля выполнения ремонтных работ, и предоставления услуг по разработке программного обеспечения компании "МегионСофтОйл", разработка алгоритмов приложений программной системы и модулей.
дипломная работа [5,3 M], добавлен 29.06.2012