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

Выводы.

В ходе выполнения практической работы были получены формулы для передаточных функций нерекурсивных фильтров, соответствующих сглаживанию полиномами 1, 2, 4 степеней и сглаживанию по формуле Спенсера для разного количества точек приближения.

По полученным формулам были построены и проанализированы графики передаточной функции Данные графики также были построены в логарифмической шкале, что позволило более точно рассмотреть малейшие колебания передаточных функций.

Также был проведён сопоставительный анализ передаточных функций исследуемых фильтров.

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

import math

import cmath

import matplotlib.pyplot as plt

from math import cos, log10

# Прямая линия

# 3 точки

def H_1_3(w):

return (1 + 2*cos(w)) / 3

# 5 точек

def H_1_5(w):

return (1 + 2*cos(w) + 2*cos(2*w)) / 5

# 7 точек

def H_1_7(w):

return (1 + 2*cos(w) + 2*cos(2*w) + 2*cos(3*w)) / 7

# 9 точек

def H_1_9(w):

return (1 + 2*cos(w) + 2*cos(2*w) + 2*cos(3*w) + 2*cos(4*w)) / 9

# Полином 2ой степени

# 7 точек

def H_2_7(w):

return (7 + 12*cos(w) + 6*cos(2*w) - 4*cos(3*w)) / 21

# 9 точек

def H_2_9(w):

return (

59 + 108*cos(w) + 78*cos(2*w) +

28*cos(3*w) - 42*cos(4*w)

) / 231

# 11 точек

def H_2_11(w):

return (

89 + 168*cos(w) + 138*cos(2*w) +

88*cos(3*w) + 18*cos(4*w) - 72*cos(5*w)

) / 429

# 13 точек

def H_2_13(w):

return (

25 + 48*cos(w) + 42*cos(2*w) +

32*cos(3*w) + 18*cos(4*w)

- 22*cos(6*w)

) / 143

# Полином 4ой степени

# 9 точек

def H_4_9(w):

return (

179 + 270*cos(w) + 60*cos(2*w) -

110*cos(3*w) + 30*cos(4*w)

) / 429

# 11 точек

def H_4_11(w):

return (

143 + 240*cos(w) + 120*cos(2*w) -

20*cos(3*w) - 90*cos(4*w) + 36*cos(5*w)

) / 429

# 13 точек

def H_4_13(w):

return (

677 + 1200*cos(w) + 780*cos(2*w) +

220*cos(3*w) - 270*cos(4*w)

- 396*cos(5*w) + 220*cos(6*w)

) / 2431

# 15 точек

def H_4_15(w):

return (

11063 + 20250*cos(w) + 15000*cos(2*w) +

7510*cos(3*w) - 330*cos(4*w)

- 5874*cos(5*w) - 5720*cos(6*w) + 4290*cos(7*w)

) / 46189

# Формула спенсера

# 15 точек

def H_S_15(w):

return (

74 + 134*cos(w) + 92*cos(2*w) + 42*cos(3*w)

+ 6*cos(4*w) - 10*cos(5*w) - 12*cos(6*w) - 6*cos(7*w)

) / 320

# 21 точка

def H_S_21(w):

return (

60 + 114*cos(w) + 94*cos(2*w) + 66*cos(3*w)

+ 36*cos(4*w) + 12*cos(5*w) - 4*cos(6*w)

- 10*cos(7*w) - 10*cos(8*w) - 6*cos(9*w)

- 2*cos(10*w)

) / 350

# Прямая линия логарифмическая

# 3 точки

def Log_H_1_3(w):

return 20 * log10(abs(H_1_3(w)))

# 5 точек

def Log_H_1_5(w):

return 20 * log10(abs(H_1_5(w)))

# 7 точек

def Log_H_1_7(w):

return 20 * log10(abs(H_1_7(w)))

# 9 точек

def Log_H_1_9(w):

return 20 * log10(abs(H_1_9(w)))

# Полином 2ой степени логарифмический

# 7 точек

def Log_H_2_7(w):

return 20 * log10(abs(H_2_7(w)))

# 9 точек

def Log_H_2_9(w):

return 20 * log10(abs(H_2_9(w)))

# 11 точек

def Log_H_2_11(w):

return 20 * log10(abs(H_2_11(w)))

# 13 точек

def Log_H_2_13(w):

return 20 * log10(abs(H_2_13(w)))

# Полином 4ой степени логарифмический

# 9 точек

def Log_H_4_9(w):

return 20 * log10(abs(H_4_9(w)))

# 11 точек

def Log_H_4_11(w):

return 20 * log10(abs(H_4_11(w)))

# 13 точек

def Log_H_4_13(w):

return 20 * log10(abs(H_4_13(w)))

# 15 точек

def Log_H_4_15(w):

return 20 * log10(abs(H_4_15(w)))

# Формула спенсера логарифмическая

# 15 точек

def Log_H_S_15(w):

return 20 * log10(abs(H_S_15(w)))

# 21 точка

def Log_H_S_21(w):

return 20 * log10(abs(H_S_21(w)))

# Количество частот гармоник

N = 2048

# Циклические частоты

F = [f/N for f in range(N)][:N//2]

# Круговые частоты

W = [2*math.pi * f for f in F ]

# Приближение прямой линией

h_1_3 = [H_1_3(w) for w in W]

h_1_5 = [H_1_5(w) for w in W]

h_1_7 = [H_1_7(w) for w in W]

h_1_9 = [H_1_9(w) for w in W]

plt.plot(F, h_1_3, label='3 точки')

plt.plot(F, h_1_5, label='5 точек')

plt.plot(F, h_1_7, label='7 точек')

plt.plot(F, h_1_9, label='9 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение полиномом второй степени

h_2_7 = [H_2_7(w) for w in W]

h_2_9 = [H_2_9(w) for w in W]

h_2_11 = [H_2_11(w) for w in W]

h_2_13 = [H_2_13(w) for w in W]

plt.plot(F, h_2_7, label='7 точек')

plt.plot(F, h_2_9, label='9 точек')

plt.plot(F, h_2_11, label='11 точек')

plt.plot(F, h_2_13, label='13 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение полиномом четвертой степени

h_4_9 = [H_4_9(w) for w in W]

h_4_11 = [H_4_11(w) for w in W]

h_4_13 = [H_4_13(w) for w in W]

h_4_15 = [H_4_15(w) for w in W]

plt.plot(F, h_4_9, label='9 точек')

plt.plot(F, h_4_11, label='11 точек')

plt.plot(F, h_4_13, label='13 точек')

plt.plot(F, h_4_15, label='15 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение по формуле Спенсера

h_S_15 = [H_S_15(w) for w in W]

h_S_21 = [H_S_21(w) for w in W]

plt.plot(F, h_S_15, label='15 точек')

plt.plot(F, h_S_21, label='21 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение прямой линией

plt.figure(figsize=(20,5))

log_h_1_3 = [Log_H_1_3(w) for w in W]

log_h_1_5 = [Log_H_1_5(w) for w in W]

log_h_1_7 = [Log_H_1_7(w) for w in W]

log_h_1_9 = [Log_H_1_9(w) for w in W]

plt.plot(F, log_h_1_3, label='3 точки')

plt.plot(F, log_h_1_5, label='5 точек')

plt.plot(F, log_h_1_7, label='7 точек')

plt.plot(F, log_h_1_9, label='9 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение полиномом второй степени

plt.figure(figsize=(20,5))

log_h_2_7 = [Log_H_2_7(w) for w in W]

log_h_2_9 = [Log_H_2_9(w) for w in W]

log_h_2_11 = [Log_H_2_11(w) for w in W]

log_h_2_13 = [Log_H_2_13(w) for w in W]

plt.plot(F, log_h_2_7, label='7 точек')

plt.plot(F, log_h_2_9, label='9 точек')

plt.plot(F, log_h_2_11, label='11 точек')

plt.plot(F, log_h_2_13, label='13 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение полиномом четвёртой степени

plt.figure(figsize=(20,5))

log_h_4_9 = [Log_H_4_9(w) for w in W]

log_h_4_11 = [Log_H_4_11(w) for w in W]

log_h_4_13 = [Log_H_4_13(w) for w in W]

log_h_4_15 = [Log_H_4_15(w) for w in W]

plt.plot(F, log_h_4_9, label='9 точек')

plt.plot(F, log_h_4_11, label='11 точек')

plt.plot(F, log_h_4_13, label='13 точек')

plt.plot(F, log_h_4_15, label='15 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

# Приближение по формуле Спенсера

plt.figure(figsize=(20,5))

log_h_S_15 = [Log_H_S_15(w) for w in W]

log_h_S_21 = [Log_H_S_21(w) for w in W]

plt.plot(F, log_h_S_15, label='15 точек')

plt.plot(F, log_h_S_21, label='21 точек')

plt.xlabel('f')

plt.ylabel('$\widetilde{H}(f)$')

plt.legend()

plt.show()

!

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