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]