Добавил:
Если чем-то мне удалось вам помочь, то благодарность принимаю на эту карту: 2200 2460 1776 0607 Для защищенки 5 сем: https://t.me/+h5cc9QNQe19kODVi Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
эх_опять_курсач.docx
Скачиваний:
1
Добавлен:
15.04.2024
Размер:
477.84 Кб
Скачать
    1. Проверка проделанной работы

Проверим правильность работы фильтра, для этого сформируем и подадим на вход два сигнала.

Первый сигнал, представленный на рисунке 7 является импульсной характеристикой, равной рассчитанным ранее отсчетам фильтра.

Рисунок 6. Импульсная характеристика КИХ-фильтра

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

Рисунок 7. ЛЧМ сигнал на входе фильтра

После обработки программы на DSP входным сигналом получим выходной сигнал, который должен соответствовать заданной амплитудно-частотной характеристике (АЧХ) фильтра:

Рисунок 8. ЛЧМ сигнал на выходе фильтра

  1. Проектирование бих-фильтра

2.1 Исходные данные

В таблице 1 приведены исходные данные для синтеза БИХ-фильтра:

Вид фильтра

Тип фильтра

Неравномерность в полосе пропускания

Неравномерность в полосе задержания

Частота среза

Порядок фильтра

Частота дискретизации

Баттерворт

ФНЧ

3 дБ

20 дБ

1000 Гц

3

8000 кГц

Таблица 3. Исходные данные БИХ-фильтра

2.2 Вычисление коэффициентов

Порядок фильтра нам задан n=3.

Рассчитаем вспомогательный параметр

Рассчитаем нули и полюса фильтра по формулам.

Нулей у фильтра баттерворта нет, полюса рассчитываются как:

Тогда ККП можно представить, как:

Для расчёта коэффициентов БИХ-фильтра была написана программа расчёта коэффициентов на языке Python:

import numpy as np

def BIX_QQ():

# Задание нулей и полюсов

p1 = -1.076 + 1.8639j

p2 = -2.1523 + 2.6358j

p3 = -1.076 - 1.8639j

p4 = -1.076 + 1.8639j

norm = 1 * (1000 / (8000 / (2 * np.pi)))

TT = 1

# Расчет

d = 1 / (p1 * p2 * p3 * p4)

w1 = np.real(1)

w2 = np.real(-p1 - p2 - p3 - p4)

w3 = np.real(p1 * p2 + p3 * p1 + p3 * p2 + p4 * p1 + p4 * p2 + p4 * p3)

w4 = np.real(-p1 * p2 * p3 - p1 * p2 * p4 - p1 * p3 * p4 - p2 * p3 * p4)

w5 = np.real(p1 * p2 * p3 * p4)

r1 = w1 / (norm ** 4)

r2 = w2 / (norm ** 3)

r3 = w3 / (norm ** 2)

r4 = w4 / (norm ** 1)

r5 = w5 / (norm ** 0)

y1 = r1 * ((2 / TT) ** 4)

y2 = r2 * ((2 / TT) ** 3)

y3 = r3 * ((2 / TT) ** 2)

y4 = r4 * ((2 / TT) ** 1)

y5 = r5 * ((2 / TT) ** 0)

qa1 = d

qa2 = 4 * d

qa3 = 6 * d

qa4 = 4 * d

qa5 = d

u1 = y1 + y2 + y3 + y4 + y5

u2 = -y1 * 4 - y2 * 2 + y4 * 2 + y5 * 4

u3 = y1 * 6 - y3 * 2 + y5 * 6

u4 = -y1 * 4 + y2 * 2 - y4 * 2 + y5 * 4

u5 = y1 - y2 + y3 - y4 + y5

b0 = np.real(qa1 / u1)

b1 = np.real(qa2 / u1)

b2 = np.real(qa3 / u1)

b3 = np.real(qa4 / u1)

b4 = np.real(qa5 / u1)

a1 = np.real(u2 / u1)

a2 = np.real(u3 / u1)

a3 = np.real(u4 / u1)

a4 = np.real(u5 / u1)

return b0, b1, b2, b3, b4, a1, a2, a3, a4

# Вызов функции и получение коэффициентов

b0, b1, b2, b3, b4, a1, a2, a3, a4 = BIX_QQ()

# Вывод коэффициентов

print("b0 =", b0)

print("b1 =", b1)

print("b2 =", b2)

print("b3 =", b3)

print("b4 =", b4)

print("a1 =", a1)

print("a2 =", a2)

print("a3 =", a3)

print("a4 =", a4)

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

где коэффициенты числителя — это b-коэффициенты фильтра, коэффициенты знаменателя – a-коэффициенты фильтра.

При этом получится следующая АЧХ:

Рисунок 9. АЧХ БИХ-фильтра