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()
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 лр