Этот коммит содержится в:
Danil
2025-12-19 12:37:16 +03:00
родитель 704002c977
Коммит 61ed233ba6
12 изменённых файлов: 297 добавлений и 0 удалений

16
TEMA9/M0.py Обычный файл
Просмотреть файл

@@ -0,0 +1,16 @@
import m2
import matplotlib.pyplot as plt
# Запуск обработки
original, smoothed = m2.main()
# Построение графика
plt.figure(figsize=(10, 5))
plt.plot(original, label='Оригинальный сигнал', alpha=0.7)
plt.plot(smoothed, label='Сглаженный сигнал', linewidth=2)
plt.legend()
plt.grid(True)
plt.title('Сравнение оригинального и сглаженного сигнала')
plt.xlabel('Отсчеты')
plt.ylabel('Значение')
plt.show()

1
TEMA9/Res3.bin Обычный файл
Просмотреть файл

@@ -0,0 +1 @@
-0.670261 -0.3351305 -0.172437 0.08192750000000001 0.9863485 -0.535069 -0.80004 -0.596092 0.6928999999999998 0.3587205 0.683314 -1.0836384999999997 -0.4860845 0.25966599999999995 -0.030735000000000012 1.023866 0.8292605 -0.18143350000000003 -0.528191 -0.8081125 0.03021050000000003 0.3281535 -0.2628545 -0.3015025 -0.5450295 -0.2557065 0.381826 -0.6922195 -0.80888 0.19050200000000006 -0.48495649999999996 0.2784559999999999 -0.4547665 -0.864897 -0.1482445 -0.256408 0.147435 -0.21260450000000003 -0.705056 -0.5397055 -0.0843785 -0.1958685 -0.075433 0.21685950000000004 0.3201535 0.4469215 -0.691119 -0.442884 -0.055561 -0.1425625

Двоичные данные
TEMA9/Ris2.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 95 KiB

22
TEMA9/file.py Обычный файл
Просмотреть файл

@@ -0,0 +1,22 @@
# Создание тестовых файлов
import numpy as np
# Файл с нормальным распределением
normal_data = np.random.normal(0, 1, 50)
with open('normal.txt', 'w') as f:
for i, val in enumerate(normal_data):
f.write(f"{val:.6f}")
if (i + 1) % 5 == 0:
f.write("\n")
else:
f.write(" ")
# Файл с равномерным распределением
uniform_data = np.random.uniform(-5, 5, 50)
with open('uniform.txt', 'w') as f:
for i, val in enumerate(uniform_data):
f.write(f"{val:.6f}")
if (i + 1) % 5 == 0:
f.write("\n")
else:
f.write(" ")

14
TEMA9/m1.py Обычный файл
Просмотреть файл

@@ -0,0 +1,14 @@
def smooth(sps1, alpha):
"""Сглаживание сигнала"""
sps2 = [sps1[0]]
for i in range(1, len(sps1)):
val = alpha * sps2[i-1] + (1 - alpha) * (sps1[i-1] - sps2[i-1])
sps2.append(val)
return sps2
def calc_diff(list1, list2):
"""Расчет разностей между списками"""
diffs = [list1[i] - list2[i] for i in range(len(list1))]
avg = sum(diffs) / len(diffs)
avg_sq = sum(d * d for d in diffs) / len(diffs)
return avg, avg_sq

43
TEMA9/m2.py Обычный файл
Просмотреть файл

@@ -0,0 +1,43 @@
import m1
import os
def main():
while True:
filename = input("Введите имя файла: ")
if os.path.exists(filename):
break
print("Файл не найден!")
# Чтение данных
data = []
with open(filename, 'r') as f:
for i in f:
for num in i.split():
data.append(float(num))
# Запрос параметра
while True:
alpha_str = input("Введите alpha (0-1): ")
if alpha_str.replace('.', '', 1).isdigit():
alpha = float(alpha_str)
if 0 < alpha < 1:
break
print("Ошибка! alpha должен быть от 0 до 1")
smoothed = m1.smooth(data, alpha)
print("Сглаженный сигнал:", smoothed)
# Расчет разностей
avg, avg_sq = m1.calc_diff(data, smoothed)
print(f"Средняя разность: {avg}")
print(f"Средний квадрат разности: {avg_sq}")
# Запись в бинарный файл
with open('Res3.bin', 'wb') as f:
for val in smoothed:
f.write(str(val).encode() + b' ')
return data, smoothed

10
TEMA9/norm.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,10 @@
9.638 11.830 10.710 12.243 7.871
7.217 5.605 10.074 9.701 10.770
5.023 10.584 8.860 11.161 9.286
11.021 7.903 9.819 6.207 9.968
8.788 10.810 9.393 11.610 9.162
7.474 8.723 10.834 10.409 7.644
11.020 12.192 10.121 12.374 10.542
10.029 10.025 10.623 12.151 11.246
6.334 8.940 8.710 8.441 13.528
10.549 10.758 12.828 11.604 10.078

10
TEMA9/normal.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,10 @@
-0.670261 -0.344874 0.163855 1.972697 -1.070138
-1.600080 -1.192184 1.385800 0.717441 1.366628
-2.167277 -0.972169 0.519332 -0.061470 2.047732
1.658521 -0.362867 -1.056382 -1.616225 0.060421
0.656307 -0.525709 -0.603005 -1.090059 -0.511413
0.763652 -1.384439 -1.617760 0.381004 -0.969913
0.556912 -0.909533 -1.729794 -0.296489 -0.512816
0.294870 -0.425209 -1.410112 -1.079411 -0.168757
-0.391737 -0.150866 0.433719 0.640307 0.893843
-1.382238 -0.885768 -0.111122 -0.285125 1.106464

Двоичные данные
TEMA9/signal.png Обычный файл

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 18 KiB

161
TEMA9/test9.md Обычный файл
Просмотреть файл

@@ -0,0 +1,161 @@
# Индивидуальное контрольное программирование по модулю 3
Лазарев Данил, А-01-23
# Задание
1) Создайте модуль М1, содержащий две функции:
- функция 1: аргументы - список SPS1 с числовыми значениям - отсчетами
некоторого сигнала, и параметр Alpha со значением между 0.01 и 0.99; в
функции создается и возвращается новый список SPS2, в котором SPS2[0] =
SPS1[0], а остальные элементы вычисляются по формуле
SPS[i]=Alpha*SPS2[i-1]+(1-Alpha)*(SPS1[i-1]-SPS2[i-1]) , где i - от 1 до длины
списка SPS1;
- функция 2: аргументы - два списка с числовыми значениями; в функции
рассчитываются среднее значение разностей и средний квадрат разностей
значений двух списков с одинаковыми индексами
2) Создайте еще один модуль М2, в котором должны:
- запрашиваться имя текстового файла с исходными данными, проверяться
его наличие и при отсутствии - повторение запроса;
- из указанного файла считываются и заносятся в список IS_SPS числовые
данные - отсчеты некоторого сигнала (в файле они могут располагаться по
несколько значений на строке);
- запрашивается значение параметра сглаживания ALPH, проверяется, что он
больше 0 и меньше 1;
- с помощью функции 1 создается новый список SG_SPS и отображается на
экране;
- с помощью функции 2 по двум этим спискам рассчитываются два указанных значения и отображаются с заголовками;
- список, полученный в функции 1 записывается в бинарный файл Res3.bin.
3) Создайте модуль М0 - главную программу, которая вызывает М2,
отображает оба списка из функции 1 на одном графике.
4) Создайте текстовый файл, в который запишите 50 случайных чисел,
нормально распределенных, с некоторыми параметрами. Проведите расчеты
по программе. Создайте еще один файл, в который запишите 50 случайных
чисел с равномерным распределением в некотором диапазоне значений.
# Решение
Модуль1
```
def smooth(sps1, alpha):
sps2 = [sps1[0]]
for i in range(1, len(sps1)):
val = alpha * sps2[i-1] + (1 - alpha) * (sps1[i-1] - sps2[i-1])
sps2.append(val)
return sps2
def calc_diff(list1, list2):
"""Расчет разностей между списками"""
diffs = [list1[i] - list2[i] for i in range(len(list1))]
avg = sum(diffs) / len(diffs)
avg_sq = sum(d * d for d in diffs) / len(diffs)
return avg, avg_sq
```
Модуль 2
```
import m1
import os
def main():
while True:
filename = input("Введите имя файла: ")
if os.path.exists(filename):
break
print("Файл не найден!")
# Чтение данных
data = []
with open(filename, 'r') as f:
for i in f:
for num in i.split():
data.append(float(num))
# Запрос параметра
while True:
alpha_str = input("Введите alpha (0-1): ")
if alpha_str.replace('.', '', 1).isdigit():
alpha = float(alpha_str)
if 0 < alpha < 1:
break
print("Ошибка! alpha должен быть от 0 до 1")
smoothed = m1.smooth(data, alpha)
print("Сглаженный сигнал:", smoothed)
# Расчет разностей
avg, avg_sq = m1.calc_diff(data, smoothed)
print(f"Средняя разность: {avg}")
print(f"Средний квадрат разности: {avg_sq}")
# Запись в бинарный файл
with open('Res3.bin', 'wb') as f:
for val in smoothed:
f.write(str(val).encode() + b' ')
return data, smoothed
```
Модуль 0
```
import m2
import matplotlib.pyplot as plt
# Запуск обработки
original, smoothed = m2.main()
# Построение графика
plt.figure(figsize=(10, 5))
plt.plot(original, label='Оригинальный сигнал', alpha=0.7)
plt.plot(smoothed, label='Сглаженный сигнал', linewidth=2)
plt.legend()
plt.grid(True)
plt.title('Сравнение оригинального и сглаженного сигнала')
plt.xlabel('Отсчеты')
plt.ylabel('Значение')
plt.show()
```
Функция для создания файлов
```
# Создание тестовых файлов
import numpy as np
# Файл с нормальным распределением
normal_data = np.random.normal(0, 1, 50)
with open('normal.txt', 'w') as f:
for i, val in enumerate(normal_data):
f.write(f"{val:.6f}")
if (i + 1) % 5 == 0:
f.write("\n")
else:
f.write(" ")
# Файл с равномерным распределением
uniform_data = np.random.uniform(-5, 5, 50)
with open('uniform.txt', 'w') as f:
for i, val in enumerate(uniform_data):
f.write(f"{val:.6f}")
if (i + 1) % 5 == 0:
f.write("\n")
else:
f.write(" ")
```
Вывод результатов:
```
Введите имя файла: normal.txt
Введите alpha (0-1): 0.5
Сглаженный сигнал: [-0.670261, -0.3351305, -0.172437, 0.08192750000000001, 0.9863485, -0.535069, -0.80004, -0.596092, 0.6928999999999998, 0.3587205, 0.683314, -1.0836384999999997, -0.4860845, 0.25966599999999995, -0.030735000000000012, 1.023866, 0.8292605, -0.18143350000000003, -0.528191, -0.8081125, 0.03021050000000003, 0.3281535, -0.2628545, -0.3015025, -0.5450295, -0.2557065, 0.381826, -0.6922195, -0.80888, 0.19050200000000006, -0.48495649999999996, 0.2784559999999999, -0.4547665, -0.864897, -0.1482445, -0.256408, 0.147435, -0.21260450000000003, -0.705056, -0.5397055, -0.0843785, -0.1958685, -0.075433, 0.21685950000000004, 0.3201535, 0.4469215, -0.691119, -0.442884, -0.055561, -0.1425625]
Средняя разность: -0.09488711
Средний квадрат разности: 1.0956006793638149
```
![](Ris2.png)

10
TEMA9/unif.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,10 @@
6.504 5.176 7.549 7.375 11.783
0.249 11.419 18.203 14.668 15.530
18.364 16.600 4.786 12.059 17.513
19.179 14.152 19.548 10.217 10.704
12.705 14.380 3.517 3.904 15.504
17.885 16.892 16.499 9.770 9.107
19.247 5.106 9.702 7.578 15.298
7.972 11.782 1.254 12.395 5.167
7.581 10.445 8.521 1.929 13.399
8.915 11.281 1.551 14.711 5.219

10
TEMA9/uniform.txt Обычный файл
Просмотреть файл

@@ -0,0 +1,10 @@
4.568506 2.901916 -4.071494 -1.849086 -1.542804
1.931241 4.325482 -1.498945 0.595658 1.085153
4.457592 2.251341 2.166884 3.781504 -2.540791
-0.054355 0.269635 2.912760 3.608378 -2.080063
-4.230550 -3.332500 -3.515839 -0.935267 1.987336
-4.190880 -3.801810 1.889535 0.119965 -3.014592
-4.990087 3.336219 -2.988766 -1.312281 -0.644437
1.050816 -0.784636 -3.797881 -4.924162 -0.254601
-0.041066 -3.688233 -2.966742 -1.228369 -2.835806
-0.350713 -0.759852 -1.346697 1.149597 0.554741