- •1. Общая характеристика цифровых фильтров
- •1.1. Свойства цифровых фильтров
- •1.2. Представление цифрового фильтра в виде разностного уравнения
- •2. Ких-фильтры. Методы синтеза
- •2.1. Прямоугольное окно
- •2.2. Обобщенное окно Хэмминга
- •2.3. Окно Блэкмана
- •2.4. Окно Кайзера
- •3. Бих-фильтры. Методы синтеза
- •3.1. Аналоговые фильтры-прототипы
- •3.1.1. Фильтры Баттерворта
- •3.1.2. Фильтры Чебышева
- •3.1.3. Эллиптические фильтры
- •3.1.4. Фильтры Бесселя
- •3.2. Методы дискретизации аналогового фильтра
- •3.2.1. Метод инвариантного преобразования импульсной характеристики
- •3.2.2. Метод билинейного преобразования
- •3.3. Преобразования полосы частот для аналоговых фильтров
- •3.4. Преобразование полосы для цифровых фильтров
- •4. Методы реализации цифровых фильтров
- •4.1. Прямая форма
- •4.2. Прямая каноническая форма
- •4.3. Каскадная форма
- •4.4. Параллельная форма
- •5. Работа в среде matlab
- •5.1. Ввод матриц
- •5.2. Матричные операции
- •5.3. Операторы, выражения и переменные
- •5.4. Функции построения матриц
- •5.5. Операторы for, while, if
- •5.6. Скалярные функции
- •5.7. Векторные функции
- •5.8. Mатричные функции
- •5.9. Подматрицы и форма записи с двоеточием
- •5.10. M-файлы
- •5.11. Текстовые строки, сообщения об ошибках, ввод данных
- •5.12. Сравнение эффективности алгоритмов
- •5.13. Формат вывода
- •5.14. Протокол
- •5.15. Графика
- •6. Записная книжка matlab для Microsoft Word
- •6.1. Начало работы
- •6.2. Краткий пример использования Записной книжки
- •7. Проектирование цифровых фильтров в среде matlab
- •Filtic – cоздание начального состояния для функции filter:
- •Freqs – частотная характеристика аналогового фильтра:
- •Freqspace – формирование последовательности отсчетов частоты:
- •Freqz – частотная характеристика цифрового фильтра.
- •Grpdelay – групповая задержка цифрового фильтра:
- •Impz – импульсный отклик цифрового фильтра:
- •Unwrap – корректировка фазовых углов:
- •Zplane – отображение нулей и полюсов цифрового фильтра:
- •7.2. Проектирование цифровых бих-фильтров besself – проектирование аналогового фильтра Бесселя:
- •Butter – проектирование цифрового и аналогового фильтров Баттерворта:
- •Cheby1 – проектирование цифрового и аналогового фильтров Чебышева – первого типа:
- •Cheby2 – проектирование цифрового и аналогового фильтров Чебышева второго типа:
- •Ellip – проектирование эллиптического цифрового и аналогового фильтров:
- •Yulewalk – проектирование рекурсивного фильтра с использованием метода наименьших квадратов по заданной амплитудно-частотной характеристике:
- •7.3. Выбор порядка бих-фильтра buttord – выбор порядка фильтра Баттерворта:
- •Cheb1ord – выбор порядка для фильтра Чебышева первого порядка:
- •Cheb2ord– выбор порядка для фильтра Чебышева первого порядка:
- •Ellipord – выбор порядка эллиптического фильтра:
- •7.4. Проектирование ких-фильтров fir1 – фильтр fir проектируется с использованием метода окна:
- •Fir2– проектирование фильтра fir с использованием оконного метода для произвольной формы фильтра:
- •Firls – проектирование ких-фильтра с использованием минимизации ошибок методом наименьших квадратов (мнк):
- •Intfilt – расчет интерполирующего ких-фильтра:
- •Remez – синтез оптимального fir-фильтра с равномерной (чебышевской) аппроксимацией на основе алгоритма Паркса – Мак-Клелана:
- •7.5. Преобразования czt–z-преобразование по спиральному контуру:
- •Dct– дискретное косинусное преобразование:
- •Impinvar – метод инвариантной импульсной характеристики для перевода аналогового фильтра в цифровой:
- •8. Примеры проектирования цифровых фильтров
- •8.1. Генерация входной последовательности сигнала
- •8.2. Реализация спектрального анализа с использованием бпф
- •8.3. Синтез цифрового ких-фильтра
- •8.4. Реализация цифровой фильтрации
- •Список литературы
- •Содержание
- •197376, С.-Петербург, ул. Проф. Попова, 5
5.3. Операторы, выражения и переменные
MATLAB – язык выражений; любое введенное выражение будет интерпретировано и получит значение. Операторы MATLAB имеют форму <переменная> = <выражение> или просто <выражение>.
Выражения составляются из функций, знаков операций, имен переменных. Результатом вычисления выражения является матрица, которая выводится на экран и присваивается переменной для дальнейшего использования. Если <переменная> и знак = опущены, то результат выражения присваивается переменной ans, которая создается автоматически.
Оператор нормально завершается возвратом каретки. Однако он может быть продолжен на следующую строку, если перед <ВК> будет набрано три или более точек. С другой стороны, в одну строку можно поместить несколько операторов. Разделитель – запятая или точка с запятой.
Если последний символ оператора – точка с запятой, то печать результата подавляется, но присвоение переменной значения выполняется. Это существенно при подавлении печати нежелательных промежуточных результатов.
MATLAB различает большие и маленькие буквы в именах команд, функций и переменных. Например: solveUT – не то же самое, что solveut.
Команда who вызовет печать списка текущих переменных рабочей области. Переменная может быть стерта из рабочей области командой clear <имя переменной>. Команда clear без параметров сотрет все не сохраненные в файле переменные пользователя.
При выходе из MATLAB все переменные теряются. Однако командой save, поданной перед выходом, можно записать все переменные в дисковый файл matlab.mat. Если затем снова войти в MATLAB, команда load восстановит предыдущее состояние рабочей области.
Вывод на экран и вычисления могут быть прекращены на большинстве машин командой Ctrl-C (Ctrl-Break на PC) без выхода из MATLAB.
Стандартная переменная EPS дает машинную точность – около 10–16 на большинстве машин. Это полезно при задании порога для определения сходимости итеративных процессов.
5.4. Функции построения матриц
В MATLAB существует функция построения следующих матриц:
eye – заведение единичной матрицы;
zeros – матрицы нулей;
ones – матрицы единиц;
diag – диагональной матрицы;
triu – верхнетреугольной части матрицы;
tril – нижнетреугольной части матрицы;
rand – случайной матрицы;
hilb – гильбертовой матрицы;
magiс – магического квадрата;
toeplitz – теплициевой матрицы.
Например, zeros(m, n) породит матрицу нулей mn; zeros(n) – матрицу нулей nn; zeros(A) – матрицу нулей того же размера, что и A.
Если х – вектор, то diag(x) сгенерирует диагональную матрицу с вектором x на диагонали. Если A – квадратная матрица, то diag(A) – сгенерируетвектор, состоящий из диагональных элементов A.
Матрицы можно строить из блоков. Например, если A – матрица размером 33, то B = [A, zeros(3, 2); zeros(2, 3), eye(2)] построит некоторую матрицу размером 55.
5.5. Операторы for, while, if
В своих основных формах операторы MATLAB for, while, if работают так же, как и в большинстве компьютерных языков. Например, оператор for i=1:N, x(i)=i^2, end или
for i=1:N
x(i)=i^2
end
породит определенный вектор размером N, а оператор for i=N:–1:1, x(i)=i^2, end – этот же вектор в обратном порядке. Операторы
for i=1:m
for j=1:n
H(i,j)=1/(i+j–1);
end
end
построят и выведут на экран гильбертову матрицу размером mn. Точка с запятой во внутреннем операторе подавляет печать промежуточных результатов, тогда как последнее Н выводит окончательный результат.
Основная форма петли while:
while <отношение>
<операторы>
end
Операторы будут повторно выполняться, пока отношение остается истинным. Например, для данного a получить наименьшее неотрицательное целое n такое, что 2n a, можно следующим образом:
n=0
while 2^n < a
n=n+1;
end
Основная форма оператора if представлена примером
if n<0
x(n)=0;
elseif rem(n,2)==0
x(n)=2;
else
x(n)=1
end
В двойном разветвлении часть elseif... должна быть, конечно, опущена.
Отношения в MATLAB обозначаются следующим образом:
<– меньше;
>– больше;
<= – меньше или равно;
>=– больше или равно;
==– равно;
~=– не равно.
Заметим, что "=" используется как оператор присвоения, а "==" – как отношение.
Отношения могут быть соединены или предварены следующими логическими операторами:
&– И;
|– ИЛИ;
~– НЕ.
В применении к скалярам отношение – это число 1 или 0 в зависимости от того, истинно отношение или нет. В применении к матрицам одинакового размера отношение – это матрица из нулей и единиц, описывающая отношения между соответствующими элементами.
Отношения матриц интерпретируются операторами while и if как истинные, только если каждый элемент матрицы отношения – ненулевой. Следовательно, если нужно выполнить <оператор>, когда матрицы A и B равны, можно ввести
if A==B
<оператор>
end
Но если надо выполнить <оператор>, когда AB, то надо ввести
if any(any(A~=B))
<оператор>
end
или проще:
if A=B else
<оператор>
end
Заметим, что кажущееся очевидным if A~=B, <оператор>, end не даст желаемого результата, так как оператор будет выполняться, только если каждый из элементов A отличается от соответствующих элементов B.
Функции any и all могут быть использованы для понижения размерности отношений с матриц до векторов и скаляров. Два оператора any требуются в примере, приведенном ранее, так как any – это векторная операция (см. 5.8)