Передискретизируйте и отфильтруйте неоднородно выбранный сигнал

Человек записал их вес в фунтах в течение високосного года 2012. Человек не записывал их вес каждый день, таким образом, данные неоднородны. Используйте приложение Signal Analyzer, чтобы предварительно обработать и изучить записанный вес. Приложение позволяет вам заполнить недостающие точки данных путем интерполяции сигнала к регулярной координатной сетке. (Эта процедура дает лучшие результаты, если сигнал имеет только маленькие разрывы.)

Загрузите данные и преобразуйте измерения в килограммы. Файлу данных установили недостающие показания на NaN. Существует 27 пропавших без вести точек данных, большинство из них во время 2D недельного фрагмента в августе.

wt = datetime(2012,1,1:366)';

load weight2012.dat
wgt = weight2012(:,2)/2.20462;

validpoints = ~isnan(wgt);
missing = wt(~validpoints);
missing(15:26)
ans = 12x1 datetime
   09-Aug-2012
   10-Aug-2012
   11-Aug-2012
   12-Aug-2012
   15-Aug-2012
   16-Aug-2012
   17-Aug-2012
   18-Aug-2012
   19-Aug-2012
   20-Aug-2012
   22-Aug-2012
   23-Aug-2012

Храните данные в расписании MATLAB®. Удалите недостающие точки. Удалите значение DC, чтобы сконцентрироваться на колебаниях. Преобразуйте информацию времени в duration массив путем вычитания первого момента времени. Для получения дополнительной информации смотрите Типы данных, Поддержанные Signal Analyzer.

wgt = wgt(validpoints);
wgt = wgt - mean(wgt);

wt = wt(validpoints);
wt = wt - wt(1);

wg = timetable(wt,wgt);

Откройте Signal Analyzer и перетащите расписание к отображению. На вкладке Display нажмите Spectrum, чтобы открыть представление спектра. На вкладке Time выберите Show Markers. Масштабируйте в недостающий фрагмент путем установки Ограничений по времени 200 и 250 дням.

Щелкните правой кнопкой по сигналу по таблице Signal и выберите Duplicate. Переименуйте копию как Preprocessed путем двойного клика по столбцу Имени в таблице Signal. Оставьте Preprocessed сигнал выбран. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Resample. На вкладке Resample, которая появляется, введите частоту дискретизации 1 cycles/day и выберите Shape Preserving Cubic метод. Нажмите Resample. Наложите передискретизируемый сигнал на отображении путем установки флажка рядом с его именем.

Уменьшите масштаб, чтобы показать данные в течение целого года. На вкладке Spectrum, набор утечка к максимальному значению. Спектры исходных и передискретизируемых сигналов соглашаются хорошо для большинства частот. Спектр показывает два значимых peaks, один приблизительно в 0,14 циклах/день и другом в очень низких частотах. Чтобы определить местоположение peaks лучше, нажмите Data Cursors ▼ и выберите Two. Установите курсоры на peaks. Наведите на поле частоты каждого курсора, чтобы получить более точное значение его местоположения.

  • Пик средней частоты в 0,142857 = 1/7 циклы/день, который соответствует однонедельному циклу.

  • Низкочастотный пик в 0,004762 циклах/день, который соответствует 210-дневному циклу.

Удалите курсоры путем нажатия на значок Data Cursor. Удалите исходный сигнал из отображения. Отфильтруйте Preprocessed сигнал удалить эффекты циклов.

  1. Чтобы удалить низкочастотный цикл, highpass-отфильтруйте сигнал. На вкладке Analyzer выберите Highpass. На вкладке Highpass, которая появляется, введите частоту полосы пропускания 0.05 cycles/day. Используйте значения по умолчанию других параметров. Нажмите Highpass.

  2. Удалить еженедельный цикл, заграждающий фильтр сигнал. На вкладке Analyzer нажмите Preprocessing ▼ и выберите Bandstop. На вкладке Bandstop, которая заменяет вкладку Highpass, введите более низкую частоту полосы пропускания 0.135 cycles/day и более высокая частота полосы пропускания 0.15 cycles/day. Используйте значения по умолчанию других параметров. Нажмите Bandstop.

Предварительно обработанный сигнал показывает меньше колебания, чем оригинал. Форма сигнала предполагает, что вес человека варьируется меньше в летних месяцах, чем зимой, но это может быть артефактом передискретизации. Кликните по значку на Информационном столбце в записи таблицы Сигнала для Preprocessed сигнал видеть шаги предварительной обработки, выполняемые на нем.

Чтобы видеть полные сводные данные шагов предварительной обработки, включая все настройки, вы выбрали, нажмите Generate Function на вкладке Analyzer. Сгенерированная функция появляется в Редакторе MATLAB®.

function [y,ty] = preprocess(x,tx)
%  Preprocess input x
%    This function expects an input vector x and a vector of time values
%    tx. tx is a numeric vector in units of seconds.
%    Follow the timetable documentation (type 'doc timetable' in
%    command line) to learn how to index into a table variable and its time
%    values so that you can pass them into this function.

% Generated by MATLAB(R) 9.5 and Signal Processing Toolbox 8.1.
% Generated on: 08-Jun-2018 14:35:38

targetSampleRate = 1.1574074074074073e-05;
[y,ty] = resample(x,tx,targetSampleRate,'pchip');
Fs = 1/mean(diff(ty)); % Average sample rate
y = highpass(y,5.787e-07,Fs,'Steepness',0.85,'StopbandAttenuation',60);
y = bandstop(y,[1.5625e-06 1.73611111111111e-06],Fs,'Steepness',0.85,'StopbandAttenuation',60);
end

Смотрите также

Приложения

Функции

Связанные примеры

Больше о