Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LABA 3_ZASHITA

.docx
Скачиваний:
5
Добавлен:
27.05.2023
Размер:
202.24 Кб
Скачать

Изначальный сигнал: ЦЕЛЬ:Сделать отрицательную амплитуду импульсного сигнала с шириной 3

Листинг программы:

struct ADCFILEHEADER

{

double dt; //!< Период дискретизации в секундах

unsigned long h; //!< Разрядность АЦП

unsigned long fN; //!< Общее количество отсчетов в файле

float Am; //!< Амплитуда, соответствующая максимальному значению целочисленного отсчета

unsigned long flags; //!< Флаги

char reserv[8]; //!< Резерв

};

typedef struct ADCFILEHEADER* LPADCFILEHEADER; //!< Указатель на ADCFILEHEADER

#define ADCF_DATA_INTEGER 0x00000000 //!< Тип данных - целочисленные

#define ADCF_DATA_FLOAT 0x00000001 //!< Тип данных - float

#define ADCF_TYPE_REAL 0x00000000 //!< Тип отсчетов - действительные

#define ADCF_TYPE_COMPLEX 0x00000002 //!< Тип отсчетов – комплексные

#define _USE_MATH_DEFINES

// из теории

#include <iostream>

#include <cmath>

#include <vector>

#include <fstream>

using namespace std;

bool write_adc(std::vector<float> MASS_DATA, double FREQ_SAMPLING)

{

ADCFILEHEADER head;

head.Am = 1.0;

head.h = 32;

head.dt = 1.0 / FREQ_SAMPLING;

head.fN = MASS_DATA.size();

head.flags = ADCF_DATA_FLOAT;

const char* FName = "H:\\Downloads\\spectr\\XFILE_ZASHITA.adc"; //Путь к файлу

float im = 0.0;

/*РАБОТА С БИНАРНЫМ ФАЙЛОМ*/

ofstream out(FName, ios::binary); //Ставим режим "бинарный файл"

out.write((char*)&head, sizeof(head)); //Записываем в файл структуру заголовка

for (int i = 0; i < MASS_DATA.size(); ++i)

{

out.write((char*)&MASS_DATA[i], sizeof(MASS_DATA[i])); // Записываем действительные отсчет

}

out.close();

return true;

//из теории

}

vector<float> CCONST() // 1) CONST

{

vector<float> MASS_DATA(64);

double A = 3.14;

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

{

MASS_DATA[i] = A;

}

return MASS_DATA;

}

vector<float> GGTI(int T) // 2) GTI

{

vector<float> MASS_DATA(64);

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

{

if (i % T == 0)

{

MASS_DATA[i] = -1;

}

else

{

MASS_DATA[i] = 0;

}

}

return MASS_DATA;

}

vector<float> СCOS(int N) // 3) КОСИНУС COS

{

vector<float> MASS_DATA(64);

double COS_FREQ = 12000 - 50 * N;

double FREQ_SAMPLING = 48000;

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

{

MASS_DATA[i] = cos(float(2 * M_PI * i * COS_FREQ / FREQ_SAMPLING));

}

return MASS_DATA;

}

vector<float> PPILA(int N) // 4) PILA

{

vector<float> MASS_DATA(64);

double pila = N % 63;

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

{

MASS_DATA[i] = (i % int(pila + 1)) / pila;

}

return MASS_DATA;

}

int main()

{

setlocale(LC_ALL, "Russian");

cout << "Перейдите в текстовый документ XFILE!\n";

const int N = 22; //последние цифры студенческого

const int K = 6; // номер в группe

double FREQ_SAMPLING = 48000.0;

double COS_FREQ = 10900;

float A = 3.12;

int T = 5;

vector<float> constanta = CCONST();

vector<float> gti = GGTI(T);

vector<float> cos = СCOS(N);

vector<float> pila = PPILA(N);

vector<float> MASS_SIGNAL(256);

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

{

MASS_SIGNAL[i] = constanta[i];

MASS_SIGNAL[64 + i] = gti[i];

MASS_SIGNAL[64 * 2 + i] = cos[i];

MASS_SIGNAL[64 * 3 + i] = pila[i];

}

write_adc(MASS_SIGNAL, FREQ_SAMPLING);

}

Соседние файлы в предмете Программирование на C++