Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
6 / 0303_Arhipov_Bolkunov_Kalmak_цос6.docx
Скачиваний:
1
Добавлен:
10.03.2024
Размер:
655.51 Кб
Скачать

Выводы.

В результате выполнения работы был сформирован дискретный сигнал посредством дискретизации непрерывного сигнала в виде линейной комбинации косинусоид вида , для которых были случайно сгенерированы коэффициенты. Для данного дискретного сигнала был построен дискретный спектр с помощью дискретного преобразования Фурье.

Для дискретного сигнала были применены следующие фильтры:

  • линейное сглаживание по 5-ти и 9-ти точками

  • дифференциальный фильтр первого порядка

  • интегральные фильтры соответствующие формуле прямоугольников, трапеций и симпсона.

Для сглаженных сигналов было аналогично применено дискретного преобразование Фурье для нахождения дискретного спектра сглаженного сигнала.

Приложение а исходный код

import math

import cmath

import matplotlib.pyplot as plt

import random

import numpy as np

n = 11

N = 32

dw = math.pi * 0.1

T = 1

# Генерация коэффициентов косинусоид

def generate():

w = [dw * i for i in range(n)]

A = list(range(1, n + 1))

random.shuffle(A)

phi = [random.uniform(0, 0.5) for _ in range(n)]

return w, A, phi

w, A, phi = generate()

print(f'''

w = {w}

A = {A}

phi = {phi}

''')

# Сгенерированные коэффициенты

w = [0.0, 0.3141592653589793, 0.6283185307179586, 0.9424777960769379, 1.2566370614359172, 1.5707963267948966, 1.8849555921538759, 2.199114857512855, 2.5132741228718345, 2.827433388230814, 3.141592653589793]

A = [2, 1, 8, 5, 10, 7, 6, 11, 3, 9, 4]

phi = [0.33785569669357485, 0.23248647684059848, 0.3917624429955529, 0.057993767165982035, 0.4247444506665633, 0.454128256896334, 0.3996500754750942, 0.22441622269575007, 0.0792848793029533, 0.10232991229754218, 0.27385006680932694]

# Сигнал

def s(t):

return sum([A[i] * math.cos(w[i]*t + phi[i]) for i in range(n)])

# Дискретные отсчёты

Xn = list(range(N))

# Отсчёты для графика аналогового сигнала

X = [i * N / (2**12) for i in range(2**12)]

S = [s(x) for x in Xn]

# Аналоговый сигнал

plt.plot(X, [s(x) for x in X], color='royalblue')

plt.xlabel('t')

plt.ylabel('s(t)')

plt.grid()

plt.show()

!

# Дискретизированный сигнал

plt.plot(Xn, S, 'o--', color='crimson')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.show()

!

# Преобразование фурье для исходного сигнала

W = np.fft.fftfreq(N, d=T)[:N // 2] * 2 * np.pi

F = np.fft.fft(S, norm='forward')[:N // 2] * 2

# Спектр исходного сигнала

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.show()

!

# Линейное сглаживание по 5 точкам

def L_5(S):

y = []

for i in range(2, N - 2):

y.append((S[i-2] + S[i-1] + S[i] + S[i+1] + S[i+2]) / 5)

return ([0] * 2) + y + ([0] * 2)

# Линейное сглаживание по 9 точкам

def L_9(S):

y = []

for i in range(4, N - 4):

y.append((S[i-4] + S[i-3] + S[i-2] + S[i-1] + S[i] + S[i+1] + S[i+2] + S[i+3] + S[i+4]) / 9)

return ([0] * 4) + y + ([0] * 4)

Y_L_5 = L_5(S)

Y_L_9 = L_9(S)

# Сглаженный сигнал (линейно 5 точек)

plt.plot(Xn, S, 'o--', color='crimson', label='Исходный сигнал')

plt.plot(Xn, Y_L_5, 'o--', color='royalblue', label='Сглаженный (линейно, 5 точек)')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.legend()

plt.show()

!

# Сглаженный сигнал (линейно 9 точек)

plt.plot(Xn, S, 'o--', color='crimson', label='Исходный сигнал')

plt.plot(Xn, Y_L_9, 'o--', color='royalblue', label='Сглаженный (линейно, 9 точек)')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.legend()

plt.show()

!

# Преобразование фурье для сглаженного сигнала (линейное)

F_L_5 = np.fft.fft(Y_L_5, norm='forward')[:N // 2] * 2

F_L_9 = np.fft.fft(Y_L_9, norm='forward')[:N // 2] * 2

# Спектр сглаженного сигнала (линейный 5 точек)

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue', label='Спектр исходного сигнала')

plt.plot(W, [abs(f) for f in F_L_5], 'o--', color='hotpink', label='Спектр сглаженного сигнала (линейно, 5 точек)')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.legend()

plt.show()

!

# Спектр сглаженного сигнала (линейный 9 точек)

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue', label='Спектр исходного сигнала')

plt.plot(W, [abs(f) for f in F_L_9], 'o--', color='hotpink', label='Спектр сглаженного сигнала (линейно, 9 точек)')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.legend()

plt.show()

!

# Дифференцирование первого порядка

def diff1(S):

return [0] + [ (S[i+1] - S[i-1]) / (2*T) for i in range(1, len(S) - 1)] + [0]

Y_D_1 = diff1(S)

# Отфильтрованный сигнал (диферренциальный 1го порядка)

plt.plot(Xn, S, 'o--', color='crimson', label='Исходный сигнал')

plt.plot(Xn, Y_D_1, 'o--', color='royalblue', label='Отфильтрованный (численное дифференцирование 1го порядка)')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.legend()

plt.show()

!

# Преобразование фурье для дифференцированного сигнала

F_D_1 = np.fft.fft(Y_D_1, norm='forward')[:N // 2] * 2

# Спектр отфильтрованного сигнала (численное дифференцирование 1го порядка)

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue', label='Спектр исходного сигнала')

plt.plot(W, [abs(f) for f in F_D_1], 'o--', color='hotpink', label='Спектр отфильтрованного сигнала (численное дифференцирование 1го порядка)')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.legend()

plt.show()

!

# Интегрирование по формуле прямоугольников

def int_squares(S):

Y = [0]

for i in range(1, len(S)):

Y.append(Y[-1] + (S[i-1] + S[i]) / 2)

return Y

Y_int_squares = int_squares(S)

# Интегрирование по формуле прямоугольников

plt.plot(Xn, S, 'o--', color='crimson', label='Исходный сигнал')

plt.plot(Xn, Y_int_squares, 'o--', color='royalblue', label='Интегрирование по формуле прямоугольников')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.legend()

plt.show()

!

# Преобразование фурье для отфильтрованного сигнала (интегрирование по формуле прямоугольников)

F_int_squares = np.fft.fft(Y_int_squares, norm='forward')[:N // 2] * 2

# Спектр отфильтрованного сигнала (интегрирование по формуле прямоугольников)

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue', label='Спектр исходного сигнала')

plt.plot(W, [abs(f) for f in F_int_squares], 'o--', color='hotpink', label='Спектр отфильтрованного сигнала (интегрирование по формуле прямоугольников)')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.legend()

plt.show()

!

# Интегрирование по формуле трапеций

def int_trapezoid(S):

Y = [0]

for i in range(1, len(S)):

Y.append(Y[-1] + (S[i-1] + S[i]) / (2*T))

return Y

Y_int_trapezoid = int_trapezoid(S)

# Интегрирование по формуле трапеций

plt.plot(Xn, S, 'o--', color='crimson', label='Исходный сигнал')

plt.plot(Xn, Y_int_trapezoid, 'o--', color='royalblue', label='Интегрирование по формуле трапеций')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.legend()

plt.show()

!

# Преобразование фурье для отфильтрованного сигнала (интегрирование по формуле трапеций)

F_int_trapezoid = np.fft.fft(Y_int_trapezoid, norm='forward')[:N // 2] * 2

# Спектр отфильтрованного сигнала (интегрирование по формуле трапеций)

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue', label='Спектр исходного сигнала')

plt.plot(W, [abs(f) for f in F_int_trapezoid], 'o--', color='hotpink', label='Спектр отфильтрованного сигнала (интегрирование по формуле трапецйи)')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.legend()

plt.show()

!

# Интегрирование по формуле симпсона

def int_simpson(S):

Y = [0]

for i in range(1, len(S)-1):

Y.append(Y[-1] + (S[i-1] + 4*S[i] + S[i+1]) / 3)

return Y + [0]

Y_int_simpson = int_simpson(S)

# Интегрирование по формуле симпсона

plt.plot(Xn, S, 'o--', color='crimson', label='Исходный сигнал')

plt.plot(Xn, Y_int_simpson, 'o--', color='royalblue', label='Интегрирование по формуле симпсона')

plt.xlabel('n')

plt.ylabel('s(n)')

plt.grid()

plt.legend()

plt.show()

!

# Преобразование фурье для отфильтрованного сигнала (интегрирование по формуле симпсона)

F_int_simpson = np.fft.fft(Y_int_simpson, norm='forward')[:N // 2] * 2

# Спектр отфильтрованного сигнала (интегрирование по формуле симпсона)

plt.plot(W, [abs(f) for f in F], 'o--', color='royalblue', label='Спектр исходного сигнала')

plt.plot(W, [abs(f) for f in F_int_simpson], 'o--', color='hotpink', label='Спектр отфильтрованного сигнала (интегрирование по формуле симпсона)')

plt.xlabel('$\omega$')

plt.ylabel('|A|')

plt.grid()

plt.legend()

plt.show()

!

Соседние файлы в папке 6