ФГБОУ ВПО «Чувашский государственный университет

имени »

Кафедра промышленной электроники

Курсовая работа

по теории сигналов

«Синтез цифровых фильтров»

Вариант 15

Выполнил:

ст. гр. РТЭ 31-09

Проверил:

Чебоксары 2012

Содержание

1.  Аннотация ……………………………………………………………....…3

2.  Задание на курсовую работу ……………………………………………..4

3.  Проектирование КИХ-фильтра …………………………………………..6

4.  Проектирование БИХ-фильтра ………………………………..………...20

5.  Проектирование и анализ фильтров в графической среде FDATool.....33

6.  Листинг MatLab-программы …………………………………………….39

7.  Заключение …………………………………………………………...…..47

8.  Список использованной литературы ………………………....................48

Аннотация

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

Задание на курсовую работу

Таблица 1

АФ-прототип

ЦФ

Метод синтеза

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

Тип фильтра

АЧХ

,
дБ

, дБ

, кГц

, кГц

ПФ

Б

1,5

40

5,0…9,0

3,0…11,0

ИП

50

Используемые сокращения:

Б – фильтр Баттерворта

– допустимый уровень пульсаций АЧХ в полосе пропускания

– минимально необходимое затухание в полосе задержки

, – границы полос пропускания и задержки

ИП – инвариантная импульсная характеристика

1. Проектирование БИХ – фильтра

НЕ нашли? Не то? Что вы ищете?

В соответствии с таблицей 1 необходимо:

1) С помощью системы MatLab синтезировать АФ-прототип. Записать передаточную функцию АФ. Рассчитать и построить частотные характеристики АФ-прототипа. Сравнить АЧХ АФ с АЧХ идеального фильтра.

2) Синтезировать рекурсивный ЦФ по аналоговому прототипу. Синтез ЦФ провести без использования специализированных функций MatLab синтеза ЦФ и с их использованием. Этапы синтеза отразить в работе.

3) Записать передаточную функцию ЦФ. Построить диаграмму полюсов и нулей.

4) Составить разностное уравнение ЦФ. Решить разностное уравнение методом итерационной процедуры для управляющего сигнала типа единичный скачок. Построить кривую переходного процесса. С помощью системы MatLab построить импульсную и переходную характеристики фильтра и сигнала на выходе для произвольного входа.

5) Определит устойчивость фильтра.

6) Составить каноническую структурную схему фильтра. Разложением передаточной функции ЦФ на произведение/сумму звеньев второго (первого) порядка реализовать структурную схему фильтра в последовательной или параллельной форме.

7) Рассчитать и построить импульсные характеристики ЦФ. Сравнить построенные характеристики с аналогичными характеристиками АФ-прототипа. Построить логарифмические характеристики ЦФ в функции абсолютной псевдочастоты.

2. Проектирование КИХ – фильтра

1) В соответствии с параметрами ЦФ (таблица 1) провести синтез КИХ – фильтра с линейной ФЧХ с использованием окна Хэмминга. Синтез ЦФ провести без использования специализированных функций MatLab синтеза ЦФ и с их использованием. Этапы синтеза ЦФ отразить в работе.

2) Записать передаточную функцию ЦФ. Построить диаграмму нулей.

3) С помощью системы MatLab построить импульсную и переходную характеристики фильтра и сигнал на выходе для произвольного входа (входной сигнал необходимо задавать так, чтобы показать правильность проведенного синтеза ЦФ).

4) Рассчитать и построить частотные характеристики ЦФ.

5) Составить структурную схему фильтра в последовательной или параллельной форме.

3. Проектирование и анализ фильтров в графической среде FDATool

Используя графическую среду проектирования FDATool, рассчитать и получить характеристики проектируемых дискретных фильтров. Сравнить полученные результаты.

Проектирование КИХ – фильтра

Поскольку отсчеты импульсной характеристики КИХ фильтра одновременно являются и коэффициентами его передаточной функции, задача синтеза сводится к получению импульсной характеристики фильтра.

Требования к фильтра приведены в таблице 1.

Вычислим импульсную характеристику hи(n) идеально фильтра.

Обозначим частоту разрыва идеальной АЧХ через . Тогда для получим неравенство , при ширине переходной полосы . Удобно определить такой, чтобы и располагались симметрично относительно . Иначе говоря, будем полагать, что

.

В случае ПФ, расчет должен выполняться с учетом двух переходных полос:

.

Выражение для импульсной характеристики избирательного фильтра при усечении до N членов (причем N – нечетное):

Выберем порядок фильтра R=N-1.

Ширина переходной полосы, вследствие свертки в частотной области прямоугольной характеристики и окна равно ширине главного лепестка окна, величина которого может быть определена для некоторого типов окон. Это означает, что, во-первых, чем более узкую переходную полосу требуется получить, тем больше должна быть длина окна N, а потому и порядок фильтра; во-вторых, чем большее подавление требуется в полосе задерживания, тем более гладкое окно необходимо использовать; последнее приводит к увеличению ширины переходной полосы и, как следствие, к увеличению порядка фильтра с целью выполнения заданных требований. В связи с этим при проектировании ЦФ следует придерживаться рекомендаций: во-первых, подобрать окно с подходящим уровнем пульсаций; во-вторых, выбрать число отсчетов N, обеспечивающее требуемую ширину переходной полосы.

Если окно выбрано, то N для окон Хэмминга оценивается как

,

где k=4; - ширина переходной полосы.

Так как, N должно быть нечетным, примем N=49. Тогда порядок фильтра R=N-1=48.

Порядок фильтра слишком высок, изменим исходные параметры. Примем:

Таблица 2

АФ-прототип

ЦФ

Метод синтеза

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

Тип фильтра

АЧХ

,
дБ

, дБ

, кГц

, кГц

ПФ

Б

1,5

40

7,0…8,0

2,0…13,0

ИП

50

Тогда, порядок фильтра R=N-1=19.

Вычислим N отсчетов функции окна Хэмминга:

Отсчеты весовой функции окна Хэмминга

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

Импульсная характеристика идеального фильтра

Проверим выполнение заданных требований

Рассчитаем АЧХ и ЛАЧХ

Из ЛАЧХ видно, что полосы пропускания и задержки не соответствуют заданным требованиям.

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

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

Окно Кайзера определяется формулой:

при ,

где - параметр окна, определяющий величину пульсации

- функция Бесселя первого рода нулевого порядка

Определим , где

,

.

Тогда,

Для найденного , определим

Определим параметр на основании эмпирических выражений

и параметр D

, D = 2,232 .

Выберем наименьшее нечетное значение числа отсчетов N, удовлетворяющее неравенству:

.

Отсчеты весовой функции окна Кайзера

Импульсная характеристика идеального фильтра

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

Для проверки заданных требований построим АЧХ и ЛАЧХ.

Для проверки был произведен расчет фильтра MatLab-функцией fir1, как видно из АЧХ результаты расчетов одинаковы.

b = fir1(N, wnp,'',wk,'noscale');

N – порядок рассчитываемого фильтра

wnp – двухэлементный вектор частот среза

wk – отсчеты весовой функции

Увеличенное ЛАЧХ в области полосы пропускания

Из ЛАЧХ видно что полосы пропускания и задержки удовлетворяют заданным требованиям.

Запишем передаточную функцию ЦФ по импульсной характеристике и построим диаграмму нулей.

Диаграмма нулей

Импульсная и переходная характеристики фильтра

impz(hk,1); - импульсная характеристика

p = filter(hk,1,[0 ones(1, length(hk)-1)]); - переходная характеристика

hk – импульсная характеристика реального фильтра

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

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

Подав на вход сигнал с частотой 7500 Гц, видим, что входной сигнал не подавлен, т. к. находится в полосе пропускания, но смещен по фазе на 180 градусов.

Подав на вход фильтра сигнал с частотой 14000 Гц, видим, что входной сигнал подавлен.

Из графиков видно, что в полосе задерживания сигнал практически полностью подавляется.

Сигнал, с частотой, лежащей в переходной полосе имеет несколько меньшую амплитуду.

Частотные характеристики фильтра

[H, W] = freqz(hk,[1]);

plot(W*Fd/(2*pi),20*log10(abs(H)));

faza = angle(H); faza = unwrap(faza);

plot(W*Fd/(2*pi),faza);

H – вектор комплексной АЧХ;

W – вектор частот;

Функция P = angle(Z) возвращает массив значений аргументов для элементов Z;

Функция P = unwrap(P) корректирует фазовые углы элементов, чтобы убрать разрывы функции.

Составим структурную схему фильтра в параллельной форме.

, , .

Коэффициенты перед обозначим через b0,b1,…,b23 соответственно

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

Проектирование БИХ – фильтра

При синтезе частотно-избирательных рекурсивных фильтров (ФНЧ, ФВЧ, ПФ, РФ) удобнее всего воспользоваться хорошо развитым аппаратом расчета АФ и методами отображения p-плоскости в z-область, т. е. методами преобразования АФ в ЦФ.

Такой синтез включает в себя:

– выбор метода отображения p-плоскости в z-область;

– расчет АФ по требованиям, заданным к ЦФ;

– применение к АФ выбранного метода отображения p-плоскости в z-область.

Рассчитываемый по требованиям, заданным к ЦФ, АФ называется фильтром-прототипом, или просто прототипом.

Основными ограничениями для синтеза ЦФ по прототипу являются:

– сохранение существенных АЧХ прототипа в АЧХ ЦФ, что означает необходимость отображения мнимой оси p-плоскости на единичную окружность z-области;

– устойчивый прототип должен быть преобразован в устойчивый ЦФ, что означает необходимость отображения полюсов устойчивого прототипа из левой p-полуплоскости внутрь единичного круга z-области.

БИХ - фильтр рассчитывается на основе аналоговых ФНЧ - прототипов по следующей методике:

1. На основании требований к ЦФ формулируются требования к соответствующему аналоговому фильтру-прототипу.

2. Для аналогового фильтра-прототипа определяется нормированный аналоговый ФНЧ-прототип с частотой среза (границей полосы пропускания) и рассчитывается его нормированные полюсы и нули, исходя из квадрата его АЧХ.

3. С помощью формул преобразования частот производится преобразование нормированного ФНЧ-прототипа в аналоговый прототип, соответствующий исходному ЦФ.

4. Производится пересчет нулей и полюсов из аналоговой области в цифровую.

Идеальная (прямоугольная) форма АЧХ не может быть физически реализована, поэтому в теории аналоговых фильтров разработан ряд методов аппроксимации прямоугольных АЧХ. Аппроксимацией фильтра будем называть передаточную функцию, у которой АЧХ приближается к одной из идеальных характеристик. Такая передаточная функция должна удовлетворять следующим условиям:

1) она должна быть рациональной функцией от p с вещественными коэффициентами;

2) ее полюсы (нули знаменателя) должны лежать в левой полуплоскости p-плоскости;

3) степень полинома числителя должна быть равной или меньше степени полинома знаменателя.

Согласно методике расчета БИХ-фильтра, требования, предъявляемые у ЦФ, перекладываются на соответствующий аналоговый ФНЧ-прототип. Рассчитав ФНЧ, можно несложными преобразованиями изменить его частоту среза, превратить его в ФВЧ, полосовой, либо режекторный фильтр с заданными параметрами. Вследствие чего расчет аналогового фильтра начинается с расчета так называемого фильтра-прототипа, представляющего собой ФНЧ с частотой среза, равной 1 рад/с.

Рассчитаем АФ-прототип с передаточной функцией по требованиям, заданным к ЦФ, используя функции buttord и butter.

[N W0] = buttord(Wp, Ws, Rp, Rs,'s');

Wp, Ws – двухэлементные вектора границы полос пропускания и задерживания;

Rp - допустимый уровень пульсаций АЧХ в полосе пропускания;

Rs - минимально необходимое затухание в полосе задерживания;

's' – признак аналогового расчета;

N – минимально необходимый порядок фильтра;

W0 – частота среза фильтра.

[b, a] = butter(N, W0,'bandpass','s');

'bandpass' – тип фильтра – полосовой фильтр;

b, a – коэффициенты передаточной функции аналогового фильтра.

b = [0 0 0 0 0 0],

Передаточная функция АФ-прототипа

.

Частотные характеристики АФ-прототипа

Нули и полюсы АФ-прототипа

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

[r, p, k] = residue(b, a);

b, a – коэффициенты передаточной функции;

r вектор-столбец вычетов;

p вектор-столбец полюсов;

k - вектор-строка целой части дробно-рациональной функции.

Определим ИХ каждого звена, соответствующего :

.

Проведем их дискретизацию, заменой , получив при этом импульсные характеристики звеньев ЦФ.

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

Для вычисления коэффициентов полиномов воспользуемся функцией

p = ploy(A), где p – коэффициенты характеристического полином, A – его корни.

az = poly(exp(p*1/Fd));

az – коэффициенты знаменателя передаточной функции;

p – вектор-столбец полюсов;

1/Fd – период дискретизации.

Коэффициенты числителя в MatLab вычислим следующим образом:

for m = 1:length(p)

if m == 1

p1 = [p(2:length(p))];

elseif m == length(p)

p1 = [p(1:length(p)-1)];

else

p1 = [p(1:m-1);p(m+1:length(p))];

end;

A(m,:) = poly(exp(p1*1/Fd));

R(m,:) = r(m)*A(m,:)/Fd;

end;

bz1 = 0;

for m = 1:length(p)

bz1 = bz1 + R(m,:);

end;

bz = real([bz1,0]);

Результат этих действий (коэффициенты числителя и знаменателя передаточной функции ЦФ):

b = [-6,93e-17 0,0044 -0,0093 0,0018 0,0070 -0,0038 0]

a = [1 -3,261 6,086 -6,833 5,202 -2,381 0,624]

Проверка расчета функцией MatLab impinvar дает примерно равный результат:

[bzp, azp] = impinvar(b, a,Fs);

b, a – коэффиценты числителя и знаменателя функции передачи аналогового прототипа;

Fs – частота дискретизации;

bzp, azp – коэффициенты числителя и знаменателя функции передачи ЦФ.

b = [-6,36e-17 0,0043 0,0093 0,0017 0,0069 -0,0037 0]

a = [1 -3,2611 6,0865 -6,8335 5,2023 -2,3813 0,6246]

Построим диаграмму полюсов и нулей

Увеличенная диаграмма нулей в области большего числа нулей

Все полюсы фильтра лежат внутри окружности единичного радиуса z-плоскости, следовательно, фильтр устойчив.

Составим разностное уравнение ЦФ и решим его методом итерационной процедуры для управляющего сигнала типа единичный скачок.

Решение методом итерационной процедуры в MatLab:

for n = 1:length(h1)

y(n) = 0;

for m=1:n

y(n)=y(n)+x(m)*h1(n-m+1);

end

end;

где h1 – импульсная характеристика ЦФ;

x – вектор управляющего сигнала типа единичный скачок.

Решение разностного уравнения для управляющего сигнала типа единичный скачок

Импульсная и переходная характеристики фильтра

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

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

Подав на вход сигнал с частотой 7500 Гц, видим, что входной сигнал не подавлен, т. к. находится в полосе пропускания.

Подав на вход фильтра сигнал с частотой 14000 Гц, видим, что входной сигнал подавлен.

Из графиков видно, что в полосе задерживания сигнал практически полностью подавляется.

Составим каноническую структурную схемы фильтра. Для этого запишем уравнения:

Подпись: b0

где b0= ; b1= b5= ;

a0=1 ; a1= a6= .

Составим параллельную структурную схему фильтра. Для этого передаточную функцию представим в виде суммы простых дробей с помощью matlab-функции residue.

[r, p, k] = residue(bz, az);

bz, az – коэффициенты передаточной функции;

r вектор-столбец вычетов;

p вектор-столбец полюсов;

k - вектор-строка целой части дробно-рациональной функции.

; ; .

Проектирование и анализ фильтров в графической среде FDATool

Рабочее окно в FDATool (БИХ-фильтр)

АЧХ и ФЧХ БИХ-фильтра

Импульсная характеристика

Переходная характеристика

Все характеристики, построенные в FDATool для БИХ-фильтра совпадают с рассчитанными ранее.

Рабочее окно в FDATool (КИХ-фильтр)

АЧХ и ФЧХ КИХ-фильтра

Импульсная характеристика

Переходная характеристика

Диаграмма нулей

Все характеристики, построенные в FDATool для КИХ-фильтра совпадают с рассчитанными ранее.

Листинг MatLab-программы

KIH.m

%Проектирование КИХ фильтра (ПФ)

clc;

clear all;

close all;

global Fn;

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

% Синтез с использованием окна Хэмминга

% Допустимый уровень пульсаций АЧХ в полосе пропускания

Rp = 1.5; %[ДБ]

% Минимально необходимое затухание АЧХ в полосе задерживания

Rs = 40; %[ДБ]

% Границы полосы пропускания

Fp1 = 7000;

Fp2 = 8000; % [Гц]

Wp1 = 2*pi*Fp1; % [рад/c]

Wp2 = 2*pi*Fp2; % [рад/c]

% Границы полосы задерживания

Fs1 = 2000; % [Гц]

Fs2 = 13000; % [Гц]

Ws1 = 2*pi*Fs1; % [рад/c]

Ws2 = 2*pi*Fs2; % [рад/c]

Fd = 50000; % Частота дискретизации % [Гц]

Td = 1/Fd;

Wd = 2*pi*Fd;

Fn = Fd/2; % Частота Найквиста

%Частоты среза [рад/c]

W01 = (Wp1 + Ws1)/2;

W02 = (Wp2 + Ws2)/2;

%Частоты для тестирования фильтра

f1 = 1500;

f2 = 7500;

f3 = 14000;

%--- Окно Хэмминга

dW = min((Wp1-Ws1),(Ws2-Wp2));

N = round(4*pi*Fd/dW);

if mod(N,2)==0

N = N+1;

end;

n = 0:N-1;

R = N-1;

%-- выражение для импульсной характериски идеального фильтра

i = 0;

hn(N)=(W02-W01)*Td/pi;

for k = -(N-1)/2:(N-1)/2;

i = i+1;

if k~=0

hn(i) = (W02*Td/pi)*(sin(W02*k*Td)/(W02*k*Td))-(W01*Td/pi)*(sin(W01*k*Td)/(W01*k*Td));

else

hn(i) = (W02*Td/pi)-(W01*Td/pi);

end;

end;

figure; stem(hn); grid;

title('Импульсная характеристика идеального фильтра окна Хэмминга ');

%-- отсчеты весовой функции w(n)

w = 0.54-0.46*cos(2*pi*n/R);

figure; stem(w,'bo'); grid on; hold;

xlabel('n');

ylabel('w(n)');

title('Отсчеты весовой функции окна Хэмминга');

% Вычисление отсчетов функции окна средствами MatLab

wn = hamming(N);

stem(wn,'b.'); grid on;

xlabel('n');

ylabel('w(n)');

legend('полученные по формуле окна Хэмминга','полученные функцией hamming(N)');

% Вычисление импульсной характеристики реального фильтра

h = hn.*wn';

figure; stem(h); grid;

title('Импульсная характеристика реального фильтра окна Хэмминга');

% Частотные характеристики

[H W] = freqz(h,[1]);

figure; plot(W*Fd/(2*pi),abs(H),'b'); grid; hold on;

title('АЧХ (окно Хэмминга)');

xlabel('f, Hz');

ylabel('A');

figure; plot(W*Fd/(2*pi),20*log10(abs(H)), 'b'); grid on; hold on;

title('ЛАЧХ (окно Хэмминга)');

xlabel('f, Hz');

ylabel('A, dB');

%-- построим границы полос пропускания и задержки

plot([Fs1, Fs1], [0, - Rs], 'r');

plot([Fs2, Fs2], [0, - Rs], 'r');

plot([0, Fs1] ,[-Rs, - Rs], 'r');

plot([Fs2, Fs2+1000] ,[-Rs, - Rs], 'r');

plot([Fp1, Fp1], [0, - Rp], 'r');

plot([Fp2, Fp2], [0, - Rp], 'r');

plot([Fp1, Fp2], [-Rp, - Rp], 'r');

%--- Окно Кайзера

%-- определим delta_min

d1 = (10^(0.05*Rp)-1)/(10^(0.05*Rp)+1);

d2 = 10^(-0.05*Rs);

d = min(d1, d2);

Rsn = -20*log10(d);

if Rsn<=21;

alpha = 0;

elseif Rsn<=50;

alpha = 0.5842*(Rsn-21)^0.4 + 0.07886*(Rsn-21);

elseif Rsn>50;

alpha = 0.1102*(Rsn-8.7);

end;

if Rsn<=21;

D = 0.992;

else

D = (Rsn-7.95)/14.36;

end;

Nk = ceil(Wd*D/dW + 1);

if mod(Nk,2)==0

Nk = Nk+1;

end;

Nk = Nk - 1;

%-- импульсная харктеристика идеального фильтра

i = 0;

hi(Nk)=(W02-W01)*Td/pi;

for k = -(Nk-1)/2:(Nk-1)/2;

i = i+1;

if k~=0

hi(i) = (W02*Td/pi)*(sin(W02*k*Td)/(W02*k*Td))-(W01*Td/pi)*(sin(W01*k*Td)/(W01*k*Td));

else

hi(i) = (W02*Td/pi)-(W01*Td/pi);

end;

end;

figure; stem(hi); grid;

title('Импульсная характеристика идеального фильтра окна Кайзера');

%-- отсчеты весовой функции

wk = kaiser(Nk, alpha)';

figure; stem(wk,'b.'); grid;

xlabel('n');

ylabel('w(n)');

title('Отсчеты весовой функции окна Кайзера');

%-- ипульсная характеристика реального фильтра

hk = hi.*wk;

figure; stem(hk); grid;

title('Импульсная характеристика реального фильтра окна Кайзера');

%Проверка выполнения заданных требований

%АЧХ, ЛАЧХ

[Hk Wk] = freqz(hk,[1]);

figure; plot(Wk*Fd/(2*pi),abs(Hk),'b'); grid on; hold;

title('АЧХ (окно Кайзера)');

xlabel('f, Hz');

ylabel('A');

%Синтез с использованием специализированных функций MatLab

b = fir1(N-1, [W01/(2*pi*Fd/2) W02/(2*pi*Fd/2)], hamming(N));

[Hfir Wfir] = freqz(b,[1]);

plot(Wfir*Fd/(2*pi),abs(Hfir),'m:');

legend('АЧХ фильтра без спец. функций','АЧХ фильтра Matlab функцией');

%

figure; plot(Wk*Fd/(2*pi),20*log10(abs(Hk)), 'b'); grid on; hold on;

title('ЛАЧХ (окно Кайзера)');

xlabel('f, Hz');

ylabel('A, dB');

%построим границы полос пропускания и задержки

plot([Fs1, Fs1], [0, - Rsn], 'r');

plot([Fs2, Fs2], [0, - Rsn], 'r');

plot([0, Fs1] ,[-Rsn, - Rsn], 'r');

plot([Fs2, Fs2+1000] ,[-Rsn, - Rsn], 'r');

plot([Fp1, Fp1], [0, - Rp], 'r');

plot([Fp2, Fp2], [0, - Rp], 'r');

plot([Fp1, Fp2], [-Rp, - Rp], 'r');

%построим диаграмму нулей

figure; zplane(hk,[1]); grid;

title ('Диаграмма полюсов и нулей');

%импульсная и переходная характеристики фильтра

figure; subplot(2,1,1); impz(hk,1); grid;

title('Импульсная характеристика');

p = filter(hk,1,[0 ones(1, length(hk)-1)]);

subplot(2,1,2); stem((0:length(p)-1), p); grid;

title('Переходная характеристика');

% Прохождение тестового сигнала через фильтр

[y1, x1, t1] = testfilter (h, 1, Fd, f1, 200);

[y2, x2, t2] = testfilter (h, 1, Fd, f2, 100);

[y3, x3, t3] = testfilter (h, 1, Fd, f3, 50);

% Прохождение тестовых сигналов через фильтр

figure;

plotxy (t1*1e3, y1, 'r', 't, мc', 'y', 'Тестирование фильтра для 1500 Гц', 'plot'); hold on;

plot (t1*1e3, x1, 'k--');

legend ('Выходной сигнал для 1500 Гц','Исходный сигнал'), hold off;

figure;

plotxy (t2*1e3, y2, 'r', 't, мc', 'y', 'Тестирование фильтра для 7500 Гц', 'plot'); hold on;

plot (t2*1e3, x2, 'k--');

legend ('Выходной сигнал для 7500 Гц','Исходный сигнал'), hold off;

figure;

plotxy (t3*1e3, y3, 'r', 't, мc', 'y', 'Тестирование фильтра для 14000 Гц', 'plot'); hold on;

plot (t3*1e3, x3, 'k--');

legend ('Выходной сигнал для 14000 Гц','Исходный сигнал'), hold off;

%АЧХ, ФЧХ

[H, W] = freqz(hk,[1]);

figure; subplot(2,1,1); plot(W*Fd/(2*pi),20*log10(abs(H))); grid;

xlabel('f, Hz'); ylabel('Magnituda'); title('AChH');

faza = angle(H); faza = unwrap(faza);

subplot(2,1,2); plot(W*Fd/(2*pi),faza); grid;

xlabel('f, Hz'); ylabel('faza, grad'); title('FChH');

% Последовательная структурная схема фильтра

[sos, G] = tf2sos (h, 1) %преобразование коэффициентов полиномов функции передачи в параметры набора секций второго порядка

BIH.m

clc; clear all; close all;

Fs = 50000;

Rp = 1.5; Rs = 40;

Fp1 = 7000; Fp2 = 8000;

Fs1 = 2000; Fs2 = 13000;

Fd = 50000; Td = 1/Fd;

Wd = 2*pi*Fd;

Wp1 = 2*pi*Fp1; Wp2 = 2*pi*Fp2;

Ws1 = 2*pi*Fs1; Ws2 = 2*pi*Fs2;

dW = min((Wp1-Ws1),(Ws2-Wp2));

%Частоты для тестирования фильтра

f1 = 1500;

f2 = 7500;

f3 = 14000;

%--- АФ-прототип

Wp = [Wp1, Wp2];

Ws = [Ws1, Ws2];

[N W0] = buttord(Wp, Ws, Rp, Rs,'s');

[b, a] = butter(N, W0,'bandpass','s');

w = 0:10:Wd/2;

h = freqs(b, a,w);

figure;

subplot(2,1,1); plot(w/(2*pi),abs(h)); grid on; hold;

plot([0 W0(1)/(2*pi) W0(1)/(2*pi) W0(2)/(2*pi) W0(2)/(2*pi) Wd/(4*pi)], [],'r--');

legend('АЧХ АФ-прототипа','АЧХ идеального фильтра'); title('АЧХ');

xlabel('f, Hz'); ylabel('Magnituda');

subplot(2,1,2); plot(w/(2*pi),unwrap(angle(h))*180/pi); grid;

title('АЧХ'); xlabel('f, Hz'); ylabel('фаза, grad');

figure; plot(w/(2*pi),20*log10(abs(h))); grid on; hold on;

title('ЛАЧХ'); xlabel('f, Hz'); ylabel('Magnituda, Db');

plot([Fs1, Fs1], [0, - Rs], 'r');

plot([Fs2, Fs2], [0, - Rs], 'r');

plot([0, Fs1] ,[-Rs, - Rs], 'r');

plot([Fs2, Fs2+1000] ,[-Rs, - Rs], 'r');

plot([Fp1, Fp1], [0, - Rp], 'r');

plot([Fp2, Fp2], [0, - Rp], 'r');

plot([Fp1, Fp2], [-Rp, - Rp], 'r');

figure; [hz, hp, hl] = zplane(b, a); grid;

%-- импульсная характеристика АФ-прототипа

haf = impz(b, a,150);

figure; stem(haf); grid; title('Импульсная характеристика АФ-прототипа');

%-- представим передаточную функцию G(p) в виде простейших дробей

[r, p, k] = residue(b, a);

%-- вычислим импульсные характеристики АФ и ЦФ

%-- для каждого звена, задем дискретизируем

Tm = 0.002;

taf = 0:1/Fd*1e-2:Tm;

ncf = 0:1/Fd:Tm;

for j = 1:length(r)

g(j,:) = r(j)*exp(p(j)*taf);

hn(j,:) = r(j)*exp(p(j)*ncf);

end;

%-- передаточная функция ЦФ

az = poly(exp(p*1/Fd));

for m = 1:length(p)

if m == 1

p1 = [p(2:length(p))];

elseif m == length(p)

p1 = [p(1:length(p)-1)];

else

p1 = [p(1:m-1);p(m+1:length(p))];

end;

A(m,:) = poly(exp(p1*1/Fd));

R(m,:) = r(m)*A(m,:)/Fd;

end;

bz1 = 0;

for m = 1:length(p)

bz1 = bz1 + R(m,:);

end;

bz = real([bz1,0]);

%-- проверка средствами Matlab

[bzp, azp] = impinvar(b, a,Fs);

%-- построим диаграмму полюсов и нулей

figure; zplane(bzp, azp); grid;

%-- решим разностное уравнение методом итерационной процедуры

%для управляющего сигнала типа единичный скачок

h1 = impz(bzp, azp,150);

x = [ones(1,1),zeros(1,length(h1)-1)];

for n = 1:length(h1)

y(n) = 0;

for m=1:n

y(n)=y(n)+x(m)*h1(n-m+1);

end

end;

figure; plot(0:length(x)-1, y(1:length(x))); grid;

xlabel('n'); ylabel('amplituda');

%-- построим импульсную и переходную характеристики

figure; per = filter(bzp, azp, ones(1, length(h1)));

subplot(2,1,1); stem(h1); grid;

title('Импульсная характеристика');

xlabel('n'); ylabel('amplituda');

subplot(2,1,2); stem(per); grid;

title('Переходная характеристика');

xlabel('n'); ylabel('amplituda');

%-- тестовые сигналы

% Прохождение тестового сигнала через фильтр

[y1, x1, t1] = testfilter (bzp, azp, Fd, f1, 200);

[y2, x2, t2] = testfilter (bzp, azp, Fd, f2, 100);

[y3, x3, t3] = testfilter (bzp, azp, Fd, f3, 50);

% Прохождение тестовых сигналов через фильтр

figure;

plotxy (t1*1e3, y1, 'r', 't, мc', 'y', 'Тестирование фильтра для 1500 Гц', 'plot'); hold on;

plot (t1*1e3, x1, 'k--');

legend ('Выходной сигнал для 1500 Гц','Исходный сигнал'), hold off;

figure;

plotxy (t2*1e3, y2, 'r', 't, мc', 'y', 'Тестирование фильтра для 7500 Гц', 'plot'); hold on;

plot (t2*1e3, x2, 'k--');

legend ('Выходной сигнал для 7500 Гц','Исходный сигнал'), hold off;

figure;

plotxy (t3*1e3, y3, 'r', 't, мc', 'y', 'Тестирование фильтра для 14000 Гц', 'plot'); hold on;

plot (t3*1e3, x3, 'k--');

legend ('Выходной сигнал для 14000 Гц','Исходный сигнал'), hold off;

%АЧХ, ФЧХ

[hcf wcf] = freqz(bzp, azp);

figure; plot(wcf*Fd/(2*pi),20*log10(abs(hcf))); grid; hold on;

xlabel('f, Hz'); ylabel('Amplituda(dB)'); title('ЛАЧХ');

plot(w/(2*pi),20*log10(abs(h)),'m:');

legend('ЦФ','АФ-прототип');

plot([Fs1, Fs1], [0, - Rs], 'r');

plot([Fs2, Fs2], [0, - Rs], 'r');

plot([0, Fs1] ,[-Rs, - Rs], 'r');

plot([Fs2, Fs2+1000] ,[-Rs, - Rs], 'r');

plot([Fp1, Fp1], [0, - Rp], 'r');

plot([Fp2, Fp2], [0, - Rp], 'r');

plot([Fp1, Fp2], [-Rp, - Rp], 'r');

figure; plot(wcf*Fd/(2*pi),unwrap(angle(hcf))*180/pi); grid; hold on;

xlabel('f, Hz'); ylabel('фаза, grad'); title('ФЧХ');

plot(w/(2*pi),unwrap(angle(h))*180/pi,'m');

legend('ЦФ','АФ-прототип');

[r, p,k] = residue(bzp, azp);

plotxy.m

% Функция строит графики с подписями

function plotxy (x, y, color, strX, strY, strTitle, str);

if (strcmp (str, 'stem')), stem (x, y, color)

elseif (strcmp (str, 'plot')), plot (x, y, color)

else error ('Ошибка в параметре построения графика!');

end;

grid on;

xlabel (strX);

ylabel (strY);

title (strTitle);

testfilter.m

% Прохождение тестового сигнала через фильтр

function [yt, ya, ta] = testfilter (b, a, fd, f, N);

n = 0 : N - 1;

ta = 0 : 1e-6 : (N - 1) / fd;

ya = sin (f*2*pi*n/fd);

yt = pulstran (ta*fd, [n' filter(b, a, sin (f*2*pi*n/fd))'] , 'sinc');

ya = pulstran (ta*fd, [n' ya'], 'sinc');

Заключение

В данной курсовой работе был произведен расчет КИХ - и БИХ - фильтров. Расчет фильтров осуществлялся как стандартными средствами Matlab, так и с использованием пакета Signal Processing, обеспечивающий широкие возможности по созданию программ обработки сигналов для современных научных и технических приложений. Результаты расчетов идентичны, следовательно, синтез фильтров выполнен правильно.

Список использованной литературы

1. , Лазарева цифровых фильтров: Руководство к курсовой работе. – Чебоксары: Изд-во Чуваш. ун-т., 20с.

2.  Сергиенко обработка сигналов. - СПб.: Питер, 20с.

3.  , Антонов алгоритмы цифровой обработки сигналов: Метод. Указания к лабораторным работам. – Чебоксары: Изд-во Чуваш. ун-т., 2003, 60с.