Глава 4. Прототип программы автоматической классификации стационарных временных рядов с линейатым спектром.

 

4.1. Пояснения, относящиеся к физике процесса.

Описываемые далее процессы наблюдаются в приборах с дрейфом параметров в зависимости от температуры окружающей среды. Таким образом, в результате отнесения соответствующего файла наблюденных данных к одному из классов мы получаем возможность установить, при какой температуре работает прибор. Дополнительные ограничения перед разработчиками алгоритма ставит требование ограничиться возможностями аналого-цифрового преобразователя, размещенного на простой звуковой карте. Так, ограничивая скорость дискретизации величиной 8000 отсчетов в секунду и объем считываемых данных блоком отсчетов длины 64 Кбайт, мы получаем экономную схему реализации, например устройства, контролирующего температуру в бытовом помещении.

 

4.2. Функция, описывающая стационарные режимы.

В условиях неизменной температуры ток протекающий по цепи вычисляется в соответствии с алгоритмом, приведенном ниже.

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(:);

**********************

 

4.3. График при постоянной температуре в осцилографе

Здесь мы моделируем работу стенда с аналоговым представлением данных - на экране осцилографа. Такая постановка задачи означает практически недостижимую (без существенных дополнительных затрат на специальное оборудование и программное обеспечение) скорость ввода и обработки данных в ЭВМ.

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

Результат вычислений и график:

Tdiap =

2

fs =

500000

pp =

1.0500e-004

pp =

6.3000e-005

 

4.5. Спектральный анализ в "бытовых" условиях.

Внесем в вышезаписанном скрипте следующие изменения:

1)      значения частоты дискретизации fd изменим на 8000, что сответствует реальной частоте дискретизации в бытовой аудиокарте;

2)      чувствительность sens на 0.02, что соответствует реальному запросу к точности разрабатываемого измерительного устройства.

С полученными данными проведем Фурье-анализ. Для анализа полученных спектров применим функцию sort c целью выделениея ведущих спектральных компонент путем сортировки по возрастанию мощности компоненты.

clear all

% Очистка памяти

global tt pp sens

% Описание глобальных переменных

sens=0.02;

 

Tdiap=2

% При температурных градациях i=0:(Tdiap-1)

% исследуем спектр колебаний

N=1024

% Длина блока, допустимого по ограничениям памяти

tt=35*10^(-6);

% Длина токовой фазы

pp0=3*tt;

% Длина бестоковой фазы при нулевой температуре

fd=8000;

% Частота дискретизации для имитации осцилограммы

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

gg=floor(log(at)/log(2));

% gg - наименьший показатель степени, для которой

 

% 2^gg укладывается на считанном блоке отсчетов

ffl=2^(gg+1);

% Длина FFT, возможно, с дополнительными нулями

rr=1:ffl/2;

% Берем значимую область частот

 

% удаляя симметричные данные

rr=rr(:);

% Преобразуем в вектор-колонку

lr=length(rr);

% Длина этого вектора

axe=2:lr;

% Это нужно для удаления нулевой компоненты

aftt=[];

% Инициализация массива мощностей частотных компонент

q12=[];

% Инициализация массива мощностей и

 

% номеров частотных компонент

yy=[];

% Инициализация массива данных ряда

for ts=0:(Tdiap-1)

% Начало цикла по температуре

pp=(1-sens*ts)*pp0

% Изменяем настройку

y=dtmp(t+rand);

% Моделируем блок данных от генератора

yy=[yy,y];

% Добавляем его в массив

ft=fft(y,ffl);

% Находим Фурье-представление данных

rr=ft(axe);

% Удалим нулевую компоненту спектра

pow=rr.*conj(rr);

% Находим мощности спeктральных компонент

aftt=[aftt,pow];

% Добавляем вектор мощностей спектра в массив afft

 

% для построения графика

[q1,q2]=sort(pow);

% Сортируем pow по возрастанию мощностей,

 

% сохраняя номера в q2

q12=[q12,q1,q2];

% Добавим в q12 номера и энергии ведущих

 

% компонент

end

% Конец цикла по температуре

nmax=q12(lr-1:-1:lr-6,:);

% Массив номеров и энергий

 

% максимальных спектральных компонент

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

subplot(2,1,1), plot(axe*fd/ffl,aftt(:,1)),title(' Спектр для первого режима '), grid

subplot(2,1,2), plot(axe*fd/ffl,aftt(:,2)),title(' Спектр для второго режима '), grid

disp(['Цена деления по шкале частот=', num2str(fd/lr)]);

disp(['Частота Найквиста=', num2str(fs)]);

disp(['Мощности и номера ведущих спектральных компонент']);

nmax

 

disp(['Ведущие спектральные частоты (гц) ']);

fmax=fd/ffl*nmax(:,2:2:2*Tdiap)

% Переводим номера ведущих

 

% компонент в соответствующие частоты

И вот что получается при выполнении скрипта:

Tdiap =

2

fs =

4000

pp =

1.0500e-004

pp =

1.0290e-004

Цена деления по шкале частот=31.25

Частота Найквиста=4000

Мощности и номера ведущих спектральных компонент

nmax =

1.0e+003 *

3.9926 0.0550 4.2701 0.0480

1.8613 0.1100 2.0172 0.0960

1.6668 0.0540 1.5181 0.0470

1.3838 0.0010 1.4645 0.0010

1.1451 0.1090 0.9025 0.0950

0.6819 0.0560 0.8621 0.0490

Ведущие спектральные частоты (гц)

fmax =

1.0e+003 *

0.8594 0.7500

1.7188 1.5000

0.8438 0.7344

0.0156 0.0156

1.7031 1.4844

0.8750 0.7656

 

4.6. Проектирование разделяющих режимы фильтров

Как видно из графиков и таблиц, можно попробовать разделить сигналы, порожденные работой приборов в различных режимах с помощью полосовых фильтров, полоса пропускания которых находится в пределах [800,900] и [1450,1550] герц для первого и второго режимов соответственно. При этом нужно будет оценить мощщность блоков, полученных в результате фильтрации сигналов и отнести сигнал к тому из классов, который соответствует номеру фильтра с большей выходной мощностью.

format long

% Результаты вычислений сохраним с двойной точностью

[b1,a1]=butter(5,[800,900]/4000)

% Проверим, что фильтр действительно пропускает

% значительно лучше первую кривую, чем вторую

u=[];

% Массив результатов фильтрации

for ts=1:2

% Начало цикла по температуре

uu=yy(:,ts);

% Сигнал в режиме с номером ts

uu=filter(b1,a1,uu);

 

u=[u,uu];

 

end

 

subplot(2,1,1), plot(t(1:N),u(1:N,1)),title(' График для первого режима '), grid

subplot(2,1,2), plot(t(1:N),u(1:N,2)),title(' График для второго режима '), grid

% Можно дать и колличественную оценку результату фильтрации

id=mean(abs(u))

 

Напоминание: использованы функции MEAN - "среднее" и ABS - "абс. значение". MEAN(S) вектор-строка средих по колонкам матрицы S.

Вот коэффициенты полосового фильтра Баттеруорта пятого порядка.

b1 =

1.0e-006 *

Columns 1 through 4

0.08245334349078 0 -0.41226671745389 0

Columns 5 through 8

0.82453343490777 0 -0.82453343490777 0

Columns 9 through 11

0.41226671745389 0 -0.08245334349078

a1 =

1.0e+002 *

Columns 1 through 4

0.01000000000000 -0.07659493144971 0.28216797587454 -0.65057034774127

Columns 5 through 8

1.03455194518947 -1.18253029911747 0.98325939916969 -0.58765947170449

Columns 9 through 11

0.24224504558982 -0.06249765983888 0.00775504905239

А это средние абсолютные величины результатов прохождения сигналов обоих режимов через первый фильтр.

id =

0.1997 0.0181

Совершенно аналогично проверяется гипотеза для второй частотной полосы. Таким образом, в результате стендовых расчетов проверяется возможность реализовать алгоритм, а также вычисляются константы, необходимые для преобразования (кодирования) алгоритма в исполняемый модуль.

 

Оглавление