- •Министерство цифрового развития, связи и массовых коммуникаций российской федерации
- •Московский технический университет связи и информатики
- •Курсовая работа
- •1. Проектирование ких-фильтра 4
- •2. Проектирование бих-фильтра 17
- •Код математического пакета Scilab
- •Разработка программы на языке ассемблера процессора adsp-2181
- •Проверка проделанной работы
- •Проектирование бих-фильтра
- •2.1 Исходные данные
- •2.2 Вычисление коэффициентов
- •2.3 Разработка программы на языке ассемблера процессора adsp-2181
- •2.4 Результаты работы программы
Проверка проделанной работы
Проверим правильность работы фильтра, для этого сформируем и подадим на вход два сигнала.
Первый сигнал, представленный на рисунке 7 является импульсной характеристикой, равной рассчитанным ранее отсчетам фильтра.
Рисунок 6. Импульсная характеристика КИХ-фильтра
Для проверки корректности работы фильтра мы создадим входной сигнал, который будет длиться 1 секунду. Этот сигнал будет иметь постоянную амплитуду и линейно возрастающую частоту от 0 до 4 кГц.
Рисунок 7. ЛЧМ сигнал на входе фильтра
После обработки программы на DSP входным сигналом получим выходной сигнал, который должен соответствовать заданной амплитудно-частотной характеристике (АЧХ) фильтра:
Рисунок 8. ЛЧМ сигнал на выходе фильтра
Проектирование бих-фильтра
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. АЧХ БИХ-фильтра