Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

177 строки
5.9 KiB
Python

def signal_delay(input_signal, delay_time):
"""
Реализация устройства задержки сигнала
Args:
input_signal: список входного сигнала
delay_time: время задержки (количество тактов)
Returns:
list: задержанный сигнал
"""
# Инициализируем выход нулями для первых delay_time тактов
output = [0] * delay_time
# Добавляем входной сигнал со сдвигом
output.extend(input_signal[:-delay_time] if delay_time > 0 else input_signal)
return output
# Проверка функции задержки
print("=== ПРОВЕРКА ФУНКЦИИ ЗАДЕРЖКИ ===")
test_signal = [1, 2, 3, 4, 5, 6, 7, 8]
delay = 3
delayed_signal = signal_delay(test_signal, delay)
print(f"Исходный сигнал: {test_signal}")
print(f"Задержка: {delay} тактов")
print(f"Задержанный сигнал: {delayed_signal}")
# Визуализация
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
plt.plot(test_signal, 'bo-', label='Входной сигнал', markersize=8)
plt.plot(delayed_signal, 'ro-', label=f'Выход (задержка {delay})', markersize=6)
plt.title('Устройство задержки сигнала')
plt.xlabel('Время (такты)')
plt.ylabel('Амплитуда')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
def calculate_histogram(data, num_bins):
"""
Расчет гистограммы для выборки данных
Args:
data: список значений выборки
num_bins: количество интервалов разбиения
Returns:
tuple: (границы интервалов, частоты)
"""
if not data:
return [], []
min_val = min(data)
max_val = max(data)
bin_width = (max_val - min_val) / num_bins
# Создаем границы интервалов
bins = [min_val + i * bin_width for i in range(num_bins + 1)]
# Инициализируем счетчики
frequencies = [0] * num_bins
# Подсчитываем элементы в каждом интервале
for value in data:
for i in range(num_bins):
if bins[i] <= value < bins[i + 1]:
frequencies[i] += 1
break
else:
# Обработка максимального значения
if value == bins[-1]:
frequencies[-1] += 1
return bins, frequencies
def print_histogram_table(bins, frequencies):
"""Вывод гистограммы в виде таблицы"""
print("\nГИСТОГРАММА:")
print("Интервал\t\tКоличество элементов")
print("-" * 45)
for i in range(len(frequencies)):
lower = bins[i]
upper = bins[i + 1]
count = frequencies[i]
print(f"{lower:8.3f} - {upper:8.3f}\t\t{count:4d}")
total = sum(frequencies)
print("-" * 45)
print(f"Всего:\t\t\t\t{total:4d}")
# Проверка функции гистограммы
print("\n=== ПРОВЕРКА ФУНКЦИИ ГИСТОГРАММЫ ===")
import random
# Генерируем тестовые данные (нормальное распределение)
test_data = [random.gauss(0, 1) for _ in range(1000)]
bins, freq = calculate_histogram(test_data, 10)
print_histogram_table(bins, freq)
# Визуализация гистограммы
plt.figure(figsize=(12, 5))
plt.subplot(1, 2, 1)
plt.hist(test_data, bins=10, alpha=0.7, edgecolor='black')
plt.title('Гистограмма (matplotlib)')
plt.xlabel('Значение')
plt.ylabel('Частота')
plt.grid(True, alpha=0.3)
plt.subplot(1, 2, 2)
# Рисуем нашу гистограмму
bin_centers = [(bins[i] + bins[i+1])/2 for i in range(len(bins)-1)]
plt.bar(bin_centers, freq, width=(bins[1]-bins[0])*0.8,
alpha=0.7, edgecolor='black')
plt.title('Наша гистограмма')
plt.xlabel('Значение')
plt.ylabel('Частота')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Анонимная функция для расчета линейной регрессии
linear_regression = lambda b1, b2, X: b1 + b2 * X
# Проверка анонимной функции
print("\n=== ПРОВЕРКА АНОНИМНОЙ ФУНКЦИИ ЛИНЕЙНОЙ РЕГРЕССИИ ===")
# Тестовые параметры модели
b1_test = 2.5 # intercept
b2_test = 1.8 # slope
X_values = [0, 1, 2, 3, 4, 5]
print(f"Параметры модели: b1 = {b1_test}, b2 = {b2_test}")
print("Расчет значений Y = b1 + b2*X:")
print("X\tY")
print("-" * 12)
for X in X_values:
Y = linear_regression(b1_test, b2_test, X)
print(f"{X}\t{Y:.2f}")
# Визуализация линейной регрессии
plt.figure(figsize=(10, 6))
# Генерируем больше точек для плавного графика
X_smooth = [i/10 for i in range(0, 51)]
Y_smooth = [linear_regression(b1_test, b2_test, x) for x in X_smooth]
plt.plot(X_smooth, Y_smooth, 'b-', linewidth=2, label=f'Y = {b1_test} + {b2_test}*X')
plt.plot(X_values, [linear_regression(b1_test, b2_test, x) for x in X_values],
'ro', markersize=8, label='Расчетные точки')
plt.title('Линейная регрессия: Y = b1 + b2*X')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# Дополнительная проверка с разными параметрами
print("\n=== ПРОВЕРКА С РАЗНЫМИ ПАРАМЕТРАМИ ===")
test_cases = [
(0, 1, 10), # Y = X
(5, 0.5, 10), # Y = 5 + 0.5*X
(-2, 2, 10) # Y = -2 + 2*X
]
for b1, b2, X in test_cases:
Y = linear_regression(b1, b2, X)
print(f"b1={b1}, b2={b2}, X={X} -> Y = {Y}")