Applide Programming Tools
Лекция 2
Прототип программы автоматической классификации стационарных временных рядов с линейчатым спектром.
l Описываемые далее процессы наблюдаются в приборах с параметрами, зависящими от температуры окружающей среды.
l Отнесение соответствующего файла наблюденных данных к одному из классов дает возможность установить, при какой температуре работает прибор.
Функция, описывающая стационарные режимы.
l Теоретически обосновано и экспериментально проверено, что в условиях неизменной температуры ток, протекающий по цепи, вычисляется в соответствии с нижеприведенным алгоритмом.
l Необходимый код составляет содержание файла dtmp.m
function cont=dtmp(t)
global tt pp
% глобальные параметры, определяемые режимом работы
% прибора
% floor(a)) - округляет элементы массива ‘a’ до
% ближайшего в направлении к (-inf) целого значения
t1=t-(tt+pp)*floor(t./(tt+pp));
% t1 - остаток от деления t на период (tt+pp)
cont=(t1<=tt).*(0.9+t1/tt*0.1);
% cont = 0, если доля t1 в (tt+pp) больше tt,
% иначе - cont растет от 0.9 до 1
cont=cont(:);
% преобразуем выходной массив в столбец
Здесь мы моделируем работу стенда с аналоговым представлением данных - на экране осциллографа. Такая постановка задачи означает практически недостижимую (без существенных дополнительных затрат на специальное оборудование и программное обеспечение) скорость ввода и обработки данных в ЭВМ.
clear all
%Очистка памяти
global tt pp sens
% Описание глобальных переменных
sens=0.4;
% Условная характеристика
% чувствительности генератора,
% определяемая типом транзистора и
% режимом его работы
Tdiap=2
% При температурных градациях i=0:(Tdiap-1)
% исследуем спектр колебаний
N=1024
% Длина блока, допустимого по ограничениям памяти
tt=35*10^(-6);
% Длина токовой фазы
pp0=3*tt;
% Длина бестоковой фазы при нулевой температуре
fd=10^6;
% Частота дискретизации для имитации
% осциллограммы
fs=fd/2;
% Частота Найквиста
step=1/fd;
% Интервал дискретизации
t=0:step:step*(N-1);
% Массив временных отсчетов для осциллограммы
at=length(t);
% Его длина
yy=[];
% Инициализация массива значений процесса
for ts=0:(Tdiap-1)
% Начало цикла по температуре
pp=(1-sens*ts)*pp0;
% Изменяем настройку
% В соответствии с ростом температуры
% уменьшается длина бестоковой фазы
y=dtmp(t+rand);
% Моделируем блок данных от генератора со
% случайной фазой
yy=[yy,y];
% Добавляем его в массив
end
% Конец цикла по температуре
subplot(2,1,1), plot(t(1:N),yy(1:N,1)),…
title(' График для первого режима '), grid
subplot(2,1,2), plot(t(1:N),yy(1:N,2)),…
title(' График для второго режима '), grid
Графики входного процесса при двух значениях температуры
(в осциллографе).
Спектральный анализ в "бытовых" условиях
Внесем в скрипте следующие изменения:
1) значения частоты дискретизации fd изменим на 8000, что соответствует реальной частоте дискретизации в бытовой аудио карте;
2) чувствительность sens на 0.02, что соответствует реальному запросу к точности разрабатываемого измерительного устройства.
3) С полученными данными проведем Фурье-анализ. Для анализа полученных спектров применим функцию sort c целью выделения ведущих спектральных компонент путем сортировки по возрастанию мощности компоненты.
График входного процесса при постоянной температуре
(данные, полученные в результате дискетизации с частотой Fd=8000).
Подготовим данные для
Фурье-анализа
gg=floor(log(at)/log(2));
% gg - наибольший показатель степени,
% для которого 2^gg укладывается на
% считанном блоке отсчетов
ffl=2^(gg+1);
% Длина FFT, возможно,
% с дополнительными нулями
Rr=1:ffl/2;
% Берем значимую область частот,
% удаляя симметричные данные
Rr=rr(:);
% Преобразуем в вектор-колонку
lr=length(rr);
% Длина этого вектора
l axe=2:lr;
% Это нужно для удаления нулевой
% компоненты
l aftt=[];
% Инициализация массива мощностей
% частотных компонент
l q12=[];
% Инициализация массива мощностей и
% номеров частотных компонент
l yy=[];
% Инициализация массива данных ряда
l for ts=0:(Tdiap-1)
% Начало цикла по температуре
l pp=(1-sens*ts)*pp0
% Изменяем настройку
l y=dtmp(t+rand);
% Моделируем блок данных от генератора
l yy=[yy,y];
% Добавляем его в массив
l ft=fft(y,ffl);
% Находим Фурье-представление данных
l rr=ft(axe);
% Удалим нулевую компоненту спектра
l pow=rr.*conj(rr);
% Находим мощности спeктральных компонент
l aftt=[aftt,pow];
l % Добавляем вектор мощностей спектра в массив afft
l % для построения графика
[q1,q2]=sort(pow);
% Сортируем pow по возрастанию мощностей,
% сохраняя номера в q2
q12=[q12,q1,q2];
% Добавим в q12 номера и энергии ведущих
% компонент
end
% Конец цикла по температуре
nmax=q12(lr-1:-1:lr-6,:);
% Массив номеров и энергий
% максимальных спектральных компонент
subplot(2,1,1),..
plot(axe*fd/ffl,aftt(:,1)),..
title(' Спектр для первого режима '),grid
subplot(2,1,2), plot(axe*fd/ffl,aftt(:,2)),..
title(' Спектр для второго режима '), grid
И вот что вышло
Цифровые фильтры
l Выполнение операций с данными "на-лету", т.е. по мере поступления в порт ЭВМ последовательных блоков данных требует строгой оптимизации вычислительных алгоритмов по скорости выполнения и памяти.
l Можно использовать преобразования Фурье, требующее в своем быстром варианте C*N*lnN операций с блоком длины N (C – постоянная, не зависящая от N). Однако, при решении задач обработки данных с известными спектральными характеристиками выгоднее использовать фильтры.
Цифровые фильтры
l В зависимости от того, какой алгоритм конструирования фильтра используется при проектировании фильтра и какими дополнительными свойствами должен обладать полученный реальный фильтр, используют средства MATLAB'a для проектирования .
Цифровые фильтры
l Для стендовых испытаний разработанных фильтров используется filter – встроенная функция, реализация которой на Вашем любимом языке может быть выполнена на основе следующего описания алгоритма.
y= filter(b,a,x) ,
где b, a – векторы-параметры фильтра,
x,y –входной и выходной векторы.
l Значение m-ой компоненты y(m) выходного вектора y происходит согласно схеме, где z(i) – переменные состояния фильтра, устанавливаются в нуль в начале:
Цифровые фильтры
Проектирование фильтров
Функции MATLAB’а butter, bessel, cheby1, cheby2, ellip автоматически проектируют фильтр, удовлетворяющие требованиям спецификаций, сформулированных в терминах зависимости коэффициента усиления соответствующей линейной системы от частоты. Так определяются низкочастотные, высокочастотные, полоснозаграждающие ( lowpass, highpass, bandstop), и полосовые (bandpass) фильтры. Как они могут быть разработаны, показано ниже на примерах. Частоты среза должны быть определена так, чтобы находились в пределах [0, 1], причем 1 соответствует частоте Найквиста fc=1/(2T).
Проектирование фильтров
Чтобы спроектировать цифровой низкочастотный фильтр Баттерворта, используйте команду:
[b,a] = butter(n,Omegac),
где n - число полюсов и нулей в передаточной функции фильтра, и Omegac - нормированная частота среза
Проектирование фильтров
Чтобы спроектировать цифровой высокочастотный фильтр Баттерворта, используйте команду:
[b,a] = butter(n,Omegac,’high’),
где n - число полюсов и нулей в передаточной функции фильтра, и Omegac - нормированная частота среза
Проектирование фильтров
Чтобы спроектировать цифровой полосовой фильтр Баттерворта с полосой пропускания Omega1 до Omega2, определим
Omegac=[Omega1, Omega2] и используем команду:
[b,a] = butter(n,Omegac),
где n - число полюсов и нулей в передаточной функции фильтра, и Omegac – нормированный вектор частот.
Проектирование фильтров
Чтобы спроектировать цифровой заграждающий фильтр Баттерворта с полосой задержки Omega1 до Omega2, определим Omegac=[Omega1, Omega2] и используем команду:
[b,a] = butter(n,Omegac,’stop’),
где n - число полюсов и нулей в передаточной функции фильтра, и Omegac – нормированный вектор частот.
Тестирование Спроектированных фильтров
Чтобы проверить, что за фильтр нам удалось спроектировать, используйте команду:
FREQZ – (requency response of digital filters) частотный отклик цифрового фильтра.
freqz(b,a) без выходных аргументов строит АЧХ – амплитудно-частотную характеристику и ФЧХ – фазо-частотную характеристику филтра с параметрами b,a.
Например, freqz([1 2],[1 -2])дает:
Амплитудно-частотная и фазо-частотная характеристики цифрового фильтра
с b=[1 2], a=[2 -1]