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

2. Представление сигналов / Лабораторная 2. Представление сигналов. Агеев

.docx
Скачиваний:
0
Добавлен:
16.12.2025
Размер:
53.13 Кб
Скачать

МИНОБРНАУКИ

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

образовательное учреждение высшего образования

«Челябинский государственный университет»

(ФГБОУ ВО «ЧелГУ»)

Кафедра радиофизики и электроники

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

«Представление сигналов»

Выполнил:

студент группы ФФ-404

Агеев Алексей

Проверил:

Доцент, Старший научный сотрудник

Павлухина О.О.

Челябинск, 2025 г.

Задание:

  1. Отрисовать Гауссову кривую, , с параметрами:

  1. Получить данные

  1. Представить произвольный сигнал в виде суммы функций Хевисаида.

Формула, описывающая график:

Ход работы:

Пишем программу в C++:

#include <iostream>

#include <fstream>

#include <cmath>

using namespace std;

const double pi = 3.141592653589793;

double heviside(double n)

{

if (n < 0) return 0.0;

else return 1.0;

}

double gaus(double n, double M, double G)

{

return 10000000 * exp(-pow(n - M, 2) / (2 * G * G)) / (G * sqrt(2 * pi));

}

void gen_graf_gaus(double M, double G)

{

ofstream out;

out.open("gaus.dat");

for (int n = 0; n < 1000; n++)

{

out << n << " " << gaus(n, M, G) << "\n";

}

out.close();

}

void gen_graf_heviside(double A, double k)

{

ofstream out;

out.open("heviside.dat");

for (int n = -100; n < 100; n++)

{

out << n << " " << A * heviside(n - k) << "\n";

}

out.close();

}

int main()

{

double G = 400.0, M = 500.0;

int N = 1000;

double* f_gaus = new double[N];

ofstream out;

out.open("gaus.dat");

for (int n = 0; n < N; n++)

{

f_gaus[n] = gaus(n, M, G);

out << n << " " << f_gaus[n] << "\n";

}

out.close();

int K;

cout << "Enter number of steps (K): ";

cin >> K;

int dn = N / K;

int dn = N / K;

double* s = new double[N];

for (int n = 0; n < N; n++)

{

s[n] = 0.0;

}

for (int n = 0; n < N; n++)

{

s[n] = f_gaus[0] * heviside(n);

for (int k = 1; k < K; k++)

{

double delta = f_gaus[k * dn] - f_gaus[(k - 1) * dn];

s[n] += delta * heviside(n - k * dn);

}

}

out.open("approximation.dat");

for (int n = 0; n < N; n++)

{

out << n << " " << s[n] << "\n";

}

out.close();

gen_graf_heviside(500000, 200);

delete[] f_gaus;

delete[] s;

return 0;

}

При 10 (в коде меняем N на 100, мю на 50, сигма на 40):

При 1000:

Соседние файлы в папке 2. Представление сигналов