Пусть имеется последовательность чисел xn, представляющая собой ряд равноотстоящих измерений некоторой величины x(t), в котором n – целое
(n = 0, 1, 2,……), а t – непрерывная переменная. Обычно t обозначает время, но не обязательно. Если последовательность yn вычисляется по формуле:
(1)
то эта формула определяет цифровой фильтр. В формуле (1) xn ≡ x(n), коэффициенты ck и dk являются константами. Таким образом, цифровой фильтр есть просто линейная комбинация равноотстоящих отсчетов xn-k некоторой функции x(t), а также вычисленных значений на выходе yn-k. Для каждого следующего один за другим n формула сдвигает текущую отсчетную точку вдоль потока отсчетов xn-k. Фильтр, определяемый формулой (1), называется рекурсивным. Если в (1) все dk = 0, то фильтр, определяемый (2), называется нерекурсивным. Примером нерекурсивного фильтра может служить широко используемое сглаживание «пятерками».
(2)
В этом случае формула (2) имеет вид:
(3).
Здесь под сглаживанием понимается приближение равноотстоящих данных прямой линией по методу наименьших квадратов.
Примером рекурсивного фильтра может служить формула трапеций для численного интегрирования:
(4)
Формула трапеций приближает площадь под некоторой кривой суммой площадей трапеций. Очевидно, что рекурсивный фильтр «запоминает» прошлые данные, так как значение yn в правой части формулы используется для вычисления yn+1, и т. д.
Для практических целей используются цифровые фильтры только ограниченной длины. Это означает, что в таких фильтрах содержится конечное количество членов. Если коэффициенты фильтра ck и dk постоянны, т. е., являются константами, то такие фильтры называются инвариантными. Инвариантные фильтры наиболее часто используются на практике.
Термин «фильтр» происходит из электротехники и радиотехники, где фильтры главным образом используются для преобразования сигналов из одной формы в другую, в частности, для «подавления» одних частот, присутствующих в сигнале, и пропуске на выход других часто. (Известно, что все сигналы можно представить как сумму большого количества гармонических колебаний с различными частотами и амплитудами). Однако в настоящее время цифровые фильтры находят гораздо более широкое применение.
Пусть, например, проведены измерения роста студентов в некоторой учебной группе, и их весов. Результаты таких измерений можно трактовать как взятие отсчетов xn (равноотстоящих, так как их можно пронумеровать) соответствующих непрерывных x(t) величин роста и веса. Следовательно, эти результаты могут быть подвергнуты обработке цифровыми методами, и в частности, цифровой фильтрации. Другим примером использования цифровых данных является обработка метеоинформации (наблюдения за температурой, давлением и т.п.). В этом случае в качестве интервалов наблюдения могут использоваться различные равные промежутки времени (часы, сутки и т. п.). Примером использования цифровых данных на железнодорожном транспорте может служить анализ сигналов вагона – дефектоскопа, уровень которого зависит от скорости движения вагона, а измерения уровня сигнала (его амплитуды) производится относительно его среднего значения. Если считать, что измерение значений происходит в некоторые дискретные моменты времени, то для обработки полученных данных целесообразно использовать методы цифровой фильтрации.
Наиболее часто с помощью цифровых фильтров решаются следующие задачи обработки данных:
· Приближение наборов экспериментальных данных различными функциями для получения аналитических зависимостей и формул (аппроксимация данных);
· Сглаживание и фильтрация экспериментальных данных с целью исключения отдельных составляющих, искажающих реальную структуру данных;
· Выполнение различных операций над данными в численном виде, например, интегрирование, дифференцирование и т. п.
· Интерполяция и экстраполяция экспериментальных данных в случае их нехватки.
Кроме того, цифровые фильтры являются важными элементами имитационных моделей различных систем.
В общем случае, цифровой фильтр преобразует некоторую входную последовательность данных в выходную последовательность. Таким образом, цифровой фильтр может интерпретироваться как некоторый «черный ящик», имеющий вход {xi} и выход {yi}. Преобразование входных данных, выполняемое фильтром, задается его передаточной функцией H(f), где f – циклическая частота.
Передаточная функция H(f) разумеется, является периодической функцией от частоты f. Однако из-за исходной дискретизации с единичными интервалами она имеет смысл только на интервале длиной 1, который обычно берется в пределах от - 0.5 до 0.5. Продление передаточной функции за пределы этого диапазона приведет к смешению частот, которые перешли при дискретизации из – за наложения в основной интервал, с теми, которые до дискретизации лежали в стороне. Поэтому далее будет рассматриваться только один период передаточной функции. Частота среза, на которой начинает наблюдаться наложение из – за дискретизации, называется частотой свертывания, или частотой Найквиста [1]. Пример передаточной функции цифрового фильтра представлен на рисунке 1.
Рис. 1. Передаточная функция цифрового фильтра.
Пример работы цифрового фильтра.
Пусть необходимо построить фильтр, пропускающий нулевую частоту (постоянную составляющую), и задерживающий частоту f = 0.5. Можно показать, что передаточные функции фильтров такого типа имеют вид:
H(f) = 2aCos(2πf )+ b (5)
а сам фильтр определяется следующим выражением [1,2]:
yn = a xn-1 + b xn + a xn+1 (6).
Из постановки задачи следует, что на (5) налагаются следующие два условия:
H(0) = 1 и H(0.5) = 0. Подставив эти условия в (5), можно получить следующие значения для коэффициентов искомого фильтра:
a = 0.25; b = 0.5.
Это приводит к следующему фильтру: [0.25, 0.5, 0.25].
Если образовать входную последовательность, состоящую из частот: нулевой и f = 0.5, периодически изменяющихся с изменением номера интервала, как это показано в таблице 1, то при применении трех коэффициентов рассматриваемого фильтра к любым трем последовательным значениям суммы двух частот (столбец 4), можно увидеть, что на выходе фильтра будет выходная последовательность, совпадающая с входной последовательностью из столбца 2.
Табл. 1. Иллюстрация работы фильтра.
n
Cos(0*n)
Cos(0.5*n)
сумма
-1
-1
-1
-1
Можно также убедиться, что применение коэффициентов фильтра к первой последовательности (столбец 2) дает ту же последовательность на выходе, в то время, как применение этих коэффициентов ко второй последовательности дает выходную последовательность, состоящую из одних нулей. Таким образом, разработанный фильтр пропускает одну составляющую входной последовательности и подавляет другую.
2. Операторы управления вычислительным процессом в MatLab.
Операторы управления вычислительным процессом главным образом применяются при разработке программ в системе MatLab. Однако система MatLab построена таким образом, что такие операторы могут быть использованы и в диалоговом режиме.
Как и во всех языках программирования, к управляющим операторам MatLab относятся операторы ветвления (условные операторы) и операторы организации циклов. Все операторы циклов и условные операторы в MatLab построены в виде составного оператора, который начинается одним из служебных слов (if, switch, while, for) и заканчивается служебным словом end. Операторы между этими словами воспринимаются системой как части одного составного (сложного) оператора. Поэтому нажатие клавиши <Enter> для перехода к следующей строке не приводит в данном случае к выполнению этих операторов. Выполнение операторов начинается только тогда, когда введена «закрывающая скобка» составного оператора end, а затем нажатия <Enter>. Если несколько составных операторов такого типа вложены один в другой, то вычисления начинаются только тогда, когда введен end самого внешнего составного оператора.
Операции сравнения в системе MatLab аналогичны операциям сравнения в языке C++, за исключением операции «не равно», которая записывается в следующем виде: ~=(не равно).
Пример:
» 'b' > 'а' (Возможно применение операций сравнения к символьным выражениям);
Следует отметить некоторые важные особенности операторов сравнения в системе MatLab.
· Если один из операндов — скаляр, происходит сравнение всех элементов второго операнда-массива со значением этого скаляра;
· В общем случае операторы отношения сравнивают два массива одного размера и выдают результат в виде массива того же размера: » М>[0 1;.1 0]
Таким образом, спектр применения операторов сравнения в системе MATLAB шире, чем в обычных языках программирования, поскольку операндами являются не только числа, но и векторы, матрицы и массивы. Возможно применение операторов отношения и к символьным выражениям:
Допустимой является конструкция вложенного оператора if:
if <условие_1>
<операторы_1>
elseif <условие_2>
<операторы_2>
elseif <условие_3>
<операторы_3>
------------------------------------------------
else
<операторы>
end
Оператор elseif выполняется тогда, когда <условие_1> не выполнено. При этом вначале проверяется <условие_2>. Если оно выполнено, то выполняются <операторы_2>, если нет, то <операторы_2> игнорируются, и проверяется <условие_3>, и т. д. Таким образом, логика выполнения вложенного оператора if не отличается от логики выполнения аналогичного оператора в языке C++.
2.2. Обобщением условного оператора if в системе MATLAB является оператор переключения switch. Он имеет следующий синтаксис:
swith <выражение, скаляр или строка символов >
case <операторы_1>
case <операторы_2>
-----------
otherwise
<операторы >
end
Логика выполнения оператора переключения в системе MATLAB не отличается от логики выполнения оператора переключения в языке C++.
2.3. Оператор цикла с предусловием while.
В общем виде, оператор цикла с предусловием имеет вид:
while <условие >
<операторы >
end
Операторы цикла выполняются до тех пор, пока <условие > истинно. При этом среди операторов в теле цикла обязательно должны быть такие, которые изменяют значения одной из переменных, указанных в <условие >.
Пример:
>> i = 1;
>> while i <=5
x = i/5
y = sin(x)
i = i+1
disp([x,y])
end
0.2000 0.1987
0.4000 0.3894
0.6000 0.5646
0.8000 0.7174
1.0000 0.8415
>>
2.4. Арифметический оператор цикла.
В общем виде, арифметический оператор цикла имеет вид:
for <имя> = <НЗ>: <Шаг>: <КЗ >
<операторы>
end
Здесь <имя> - имя управляющей переменной цикла, <НЗ> - начальное значение управляющей переменной цикла, <Шаг> - значение шага изменения управляющей переменной цикла, <КЗ > - конечное управляющей переменной цикла. Если параметр <Шаг> опущен, то по умолчанию его значение принимается равным 1.Для досрочного выхода из цикла применяется оператор break.
Пример:
>> for i = 1:5
x = i/5
y = sin(x)
if i == 1
disp([' i ',' x ',' sin(x) '])
end
disp([i,x,y])
end
i x sin(x)
1.0000 0.2000 0.1987
2.0000 0.4000 0.3894
3.0000 0.6000 0.5646
4.0000 0.8000 0.7174
5.0000 1.0000 0.8415
>>
Символы ( ) (круглые скобки) в системе MATLAB используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности аргументов функции и указания индексов элементов вектора или матрицы.
3. Порядок выполнения работы.
3.1. Разработать структуру нерекурсивного цифрового фильтра в соответствии с заданием, полученным от преподавателя. В качестве исходных данных могут быть предложены различные передаточные функции и частоты, которые фильтр должен пропускать, или подавлять.
3.2. Проверить работу полученного фильтра в режиме ручного счета, построив таблицу вида Табл. 1.
3.3. Разработать последовательность операторов (диалоговую программу), реализующих алгоритм работы полученного фильтра. Сравнить результаты работы диалоговой программы с результатами из п. 3.2.
3.4. Разработать структуру рекурсивного цифрового фильтра в соответствии с формулой (4). Выполнить интегрирование функции в соответствии с заданием, полученным от преподавателя, и сравнить полученный результат с результатом работы стандартной функции trapz, обращение к которой имеет следующий вид:
y = trapz(F); где F – вектор, содержащий значения интегрируемой функции.
4. Содержание отчета.
Отчет должен содержать краткие пояснения по разработке структуры цифровых фильтров, алгоритмов их реализации, результаты ручного счета и работы диалоговой программы. Результаты работы программы должны быть представлены в виде таблицы, графика передаточной функции, графиков входных и выходных последовательностей данных. В отчете должны быть приведены краткие выводы по проделанной работе.