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

LABA3_PROG

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

Федеральное агентство связи

ордена Трудового Красного Знамени

Федеральное государственное

бюджетное образовательное учреждение высшего образования Московский технический университет связи и информатики

Лабораторная работа №3

«Функции, запись бинарных файлов»

Выполнил:

студент группы БРТ2102

Епифанов Георгий

Проверил:

Кандауров Николай

Москва 2023

Задание:

Для каждого простого сигнала из лабораторной работы №2 написать функцию, которая будет возвращать объект std::vector с отсчетами сигнала. Создать std::vector и объединить в нем четыре простых сигнала. Записать данный вектор в бинарный файл формата. adc Открыть файл в имитационной среде Спектр-2 и построить осциллограмму.

Дано:

CONST GTI COS PILA

CONST : A = 3.12;

GTI : T = 12 отсчетов; Ширина 6 отсчетов;

COS : A = 1; f = 10 900 Гц; Fs = 48 кГц;

A*cos(2*pi*f*i/Fs)

PILA : A = 1; T = 12 отсчетов;

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

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:\\XFILE.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 % K % 15 < N % 16(i + 1) % T == 0)

{

MASS_DATA[i] = 1;

}

else

{

MASS_DATA[i] = 0;

}

}

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 = 12;

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++