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

1 лр / labaa1_1

.py
Скачиваний:
0
Добавлен:
01.04.2024
Размер:
3.12 Кб
Скачать
import numpy as np
import matplotlib.pyplot as plt

print('Вариант 3, Вадян')

# Функция для генерации M-последовательности
def Mfun(A, C):
sz = len(A)
M = np.zeros(2**sz - 1)
for j in range(2**sz - 1):
M[j] = A[-1]
if np.sum(A*C) % 2 == 0:
k = 0
else:
k = 1
for i in range(sz - 1, 0, -1):
A[i] = A[i-1]
A[0] = k
M[M == 0] = 1
M[M != 0] = -1
return M

# Функция для вычисления суммы M-последовательностей 121 2цц2
def Msum(M1, M2, variant):
s1 = np.concatenate((M1, np.zeros(100 + variant*10)))
s2 = np.concatenate((np.zeros(100 + variant*10), -M2))
Ms = s1 + s2
return Ms

# Функция для получения корреляционной функции
def myCF(M1, M2):
M1inv = M1[::-1]
t = np.zeros_like(M1)
mKFsize = len(M2)*2 - 1
mKF = np.zeros(mKFsize)
for j in range(mKFsize):
for i in range(len(M1) - 1, 0, -1):
t[i] = t[i-1]
if j > len(M2) - 1:
t[0] = 0
else:
t[0] = M2[j]
mKF[j] = np.sum(M1inv * t)
return mKF

# Входные данные
A = np.array([1, 0, 0, 0, 0, 0, 0, 0, 1, 1])
C1 = np.array([1, 0, 1, 0, 1, 1, 0, 1, 0, 1])
C2 = np.array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1])
variant = 3

# Сгенерировать M-последовательности
M1 = Mfun(A, C1)
M2 = Mfun(A, C2)
Msumma = Msum(M1, M2, variant)

# Графики трех последовательностей
plt.figure()
plt.subplot(3, 1, 1)
plt.plot(M1)
plt.title('M1')
plt.subplot(3, 1, 2)
plt.plot(M2)
plt.title('M2')
plt.subplot(3, 1, 3)
plt.plot(Msumma)
plt.title('Сумма M1 и не M2')

# АКФ для M1
plt.figure()
plt.subplot(4, 2, 1)
plt.title('АКФ для M1')
M1AKF = myCF(M1, M1)
plt.plot(M1AKF)
plt.grid(True)

# ВКФ для M1 и M2
plt.subplot(4, 2, 3)
plt.title('ВКФ для M1 и M2')
M1AKF = myCF(M1, M2)
plt.plot(M1AKF)
plt.grid(True)

# Фильтрация M1 из суммы
plt.subplot(4, 2, 5)
plt.title('Фильтрация M1 из суммы')
M1AKF = myCF(M1, Msumma)
plt.plot(M1AKF)
plt.grid(True)

# Фильтрация M2 из суммы
plt.subplot(4, 2, 7)
plt.title('Фильтрация M2 из суммы')
M1AKF = myCF(M2, Msumma)
plt.plot(M1AKF)
plt.grid(True)

# Обработка шума
Amplitude = variant
Noise = Amplitude - 2*Amplitude*np.random.rand(len(M1))
M3 = M1 + Noise
plt.figure()
plt.subplot(3, 1, 1)
plt.plot(M3)
plt.title('M1 + шум')

plt.subplot(3, 1, 2)
M3filtered = myCF(M1, M3)
plt.plot(M3filtered)
plt.title('Фильтрация M1 из шума')

#M3filtered = myCF(M1, M3)

with np.errstate(divide='ignore', invalid='ignore'):
Db = 20 * np.log10(np.abs(M3filtered / max(M3filtered)))


plt.subplot(3, 1, 3)
plt.plot(Db)
plt.title('Фильтрация M1 из шума в дБ')

plt.show()
Соседние файлы в папке 1 лр