Applide Programming Tools
Лекция 3
Продолжим работу над прототипом программы автоматической классификации стационарных временных рядов с линейчатым спектром.
Спектральный анализ в "бытовых" условиях
Параметры, определившие процесс измерений:
1) значения частоты дискретизации fd=8000, что соответствует реальной частоте дискретизации в бытовой аудио карте;
2) чувствительность sens = 0.02
3) С полученными данными проведен Фурье-анализ.
4) Для выделения ведущих спектральных компонент массив энергий спектральных компонент отсортирован по возрастанию мощности компоненты.
График входного процесса при постоянной температуре
(данные, полученные в результате дискетизации с частотой 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,:);
% Массив номеров и энергий
% максимальных спектральных компонент
Цена деления по шкале частот=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
Проектирование разделяющих режимы фильтров
Как видно из графиков и таблиц, можно попробовать разделить сигналы, порожденные работой приборов в различных режимах с помощью полосовых фильтров, полоса пропускания которых находится в пределах [800,900] и [1450,1550] герц для первого и второго режимов соответственно. При этом нужно будет оценить мощность блоков, полученных в результате фильтрации сигналов и отнести сигнал к тому из классов, который соответствует номеру фильтра с большей выходной мощностью.
Проектирование и тестирование фильтров, разделяющих режимы
format long
[b1,a1]=butter(5,[800,900]/4000)
% Проверим, что фильтр действительно пропускает
% значительно лучше первую кривую, чем вторую.
% Использованные при построении графиков массивы
% измерений записаны по колоннам матрицы yy.
u=[];
for ts=1:2
uu=yy(:,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
Количественная оценка результатов фильтрации
l id=mean(abs(u))
0.1997 0.0181
Использованы функции MEAN
"среднее" и ABS - "абсолютное
значение". MEAN(S) вектор-строка
средних по колонкам матрицы S.
Как видите, для принятия решения, какой из двух режимов перед Вами, есть достаточно различий.
Результат, который потребуется для преобразования прототипа в рабочий код
l Вот коэффициенты полосового фильтра Баттеруорта пятого порядка.
l b1 =
l 1.0e-006 *
l Columns 1 through 4
l 0.08245334349078 0 -0.41226671745389 0
l Columns 5 through 8
l 0.82453343490777 0 -0.82453343490777 0
l Columns 9 through 11
l 0.41226671745389 0 -0.08245334349078
l a1 =
l 1.0e+002 *
l Columns 1 through 4
l 0.01000000000000 -0.07659493144971 0.28216797587454 -0.65057034774127
l Columns 5 through 8
l 1.03455194518947 -1.18253029911747 0.98325939916969 -0.58765947170449
l Columns 9 through 11
l 0.24224504558982 -0.06249765983888 0.00775504905239
l
Совершенно аналогично проверяется гипотеза для второй частотной полосы. Таким образом, в результате стендовых расчетов проверяется возможность реализовать алгоритм, а также вычисляются константы, необходимые для преобразования (кодирования) алгоритма в исполняемый модуль.