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]