Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 лр / labaa1_1

.py
Скачиваний:
6
Добавлен:
01.04.2024
Размер:
3 Кб
Скачать
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 лр