LABA 3_ZASHITA
.docxИзначальный сигнал: ЦЕЛЬ:Сделать отрицательную амплитуду импульсного сигнала с шириной 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);
}