Мультисигнальный 1-D вейвлет

Мультисигнал 1-D является набором 1-D сигналов той же длины, что и матрица, организованная rowwise (или columnwise).

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

В этом примере сигналы сначала анализируются, и получаются различные представления или упрощенные версии:

  • Восстановленные приближения на заданных уровнях,

  • Деноизмененные версии,

  • Сжатые версии.

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

Последний шаг этого примера выполняет несколько стратегий кластеризации и сравнивает их. Это позволяет суммировать большой набор сигналов с помощью разреженных представлений вейвлет.

Загрузка и построение графика мультисигнала

Чтобы проиллюстрировать эти возможности, давайте рассмотрим реальный мультисигнал, представляющий 35 дней потребления электрической нагрузки, центрированный и стандартизированный.

load elec35_nor;       % Load normalized original data.
X = signals;
[nbSIG,nbVAL] = size(X);
plot(X','r')
axis tight
title('Original Data: 35 days of electrical consumption');
xlabel('Minutes from 1 to 1440');

Мы видим, что сигналы являются локально нерегулярными и шумными, но тем не менее можно различить три различные общие формы.

Представление данных о поверхности

В порядок, чтобы выделить периодичность мультисигнала, давайте теперь рассмотрим данные с помощью представления 3-D.

surf(X)
shading interp
axis tight
title('Original Data: 35 days of electrical consumption')
xlabel('Minutes from 1 to 1440','Rotation',4)
ylabel('Days from 1 to 35','Rotation',-60)
ax = gca;
ax.View = [-13.5 48];

Представленные пять недель теперь можно увидеть более четко.

Мультисигнальное разложение строк

Выполните вейвлет-разложение на уровне 7, используя вейвлет 'sym4'.

dirDec = 'r';         % Direction of decomposition
level  = 7;           % Level of decomposition
wname  = 'sym4';      % Near symmetric wavelet
decROW = mdwtdec(dirDec,X,level,wname);

Сгенерированная структура разложения выглядит следующим образом:

decROW
decROW = 

  struct with fields:

        dirDec: 'r'
         level: 7
         wname: 'sym4'
    dwtFilters: [1x1 struct]
       dwtEXTM: 'sym'
      dwtShift: 0
      dataSize: [35 1440]
            ca: [35x18 double]
            cd: {1x7 cell}

Сигналы и приближения на уровне 7

Давайте восстановим приближения на уровне 7 для каждого сигнала строки. Затем, чтобы сравнить приближения с исходными сигналами, давайте отобразим два графика (см. рисунок ниже). Первый показывает все исходные сигналы, а второй показывает все соответствующие приближения на уровне 7.

A7_ROW  = mdwtrec(decROW,'a',7);

subplot(2,1,1)
plot(X(:,:)','r')
title('Original Data')
axis tight
subplot(2,1,2)
plot(A7_ROW(:,:)','b')
axis tight
title('Corresponding approximations at level 7')

Как видно, общая форма захватывается приближениями на уровне 7, но некоторые интересные функции теряются. Например, шишки в начале и в конце сигналов исчезли.

Наложенные сигналы и приближения

Чтобы более точно сравнить исходные сигналы с соответствующими их приближениями на уровне 7, давайте отобразим два графика (см. рисунок ниже). Первый касается четырех первых сигналов, а второй - пяти последних сигналов. Каждый из этих графиков представляет исходные сигналы, наложенные с соответствующим приближением на уровне 7.

subplot(2,1,1)
idxDays = 1:4;
plot(X(idxDays,:)','r')
hold on
plot(A7_ROW(idxDays,:)','b')
axis tight
title(['Days ' int2str(idxDays), ' - Signals and Approximations at level 7'])
subplot(2,1,2)
idxDays = 31:35;
plot(X(idxDays,:)','r')
hold on
plot(A7_ROW(idxDays,:)','b')
axis tight
title(['Days ' int2str(idxDays), ' - Signals and Approximations at level 7'])

Как видно, приближение исходного сигнала визуально точна с точки зрения общей формы.

Мультисигнальное шумоподавление

Чтобы выполнить более тонкое упрощение мультисигнала, сохраняя эти выпуклости, которые явно связаны с электрическим сигналом, давайте обнулим мультисигнал.

Процедура шумоподавления выполняется с использованием трех этапов:

1) Разложение: Выберите вейвлет и уровень разложения N, а затем вычислите вейвлет-разложение сигналов на уровне N.

2) Порог: Для каждого уровня от 1 до N и для каждого сигнала выбирается порог и применяется порог к коэффициентам детализации.

3) Реконструкция: Вычислите реконструкции вейвлет с помощью исходных коэффициентов приближения уровня N и измененных коэффициентов детализации уровней от 1 до N.

Давайте выберем теперь уровень разложения N = 5 вместо N = 7, используемый ранее.

dirDec = 'r';         % Direction of decomposition
level  = 5;           % Level of decomposition
wname  = 'sym4';      % Near symmetric wavelet
decROW = mdwtdec(dirDec,X,level,wname);

[XD,decDEN] = mswden('den',decROW,'sqtwolog','mln');
Residuals = X-XD;

subplot(3,1,1)
plot(X','r')
axis tight
title('Original Data: 35 days of electrical consumption')
subplot(3,1,2)
plot(XD','b')
axis tight
title('Denoised Data: 35 days of electrical consumption')
subplot(3,1,3)
plot(Residuals','k')
axis tight
title('Residuals')
xlabel('Minutes from 1 to 1440')

Качество результатов хорошее. Удары в начале и в конце сигналов хорошо восстанавливаются, и, наоборот, невязки выглядят как шум, за исключением некоторых оставшихся ударов из-за сигналов. Кроме того, величина этих оставшихся ударов имеет небольшой порядок.

Мультисигнальные сигналы строки сжатия

Как и шумоподавление, процедура сжатия выполняется с использованием трех этапов (см. выше).

На шаге 2 находится различие с процедурой шумоподавления. Существует два подхода к сжатию:

  • Первый состоит в том, чтобы принимать вейвлет расширения сигналов и сохранять наибольшие коэффициенты абсолютных значений. В этом случае можно задать глобальный порог, эффективность сжатия или относительную квадратную норму эффективности восстановления. Таким образом, необходимо выбрать только один зависящий от сигнала параметр.

  • Второй подход состоит в применении визуально определенных зависящих от уровня порогов.

Чтобы упростить представление данных и сделать более эффективным сжатие, вернемся к разложению на уровне 7 и сжимаем каждую строку мультисигнала, применяя глобальный порог, приводящий к восстановлению 99% энергии.

dirDec = 'r';         % Direction of decomposition
level  = 7;           % Level of decomposition
wname  = 'sym4';      % Near symmetric wavelet
decROW = mdwtdec(dirDec,X,level,wname);

[XC,decCMP,THRESH] = mswcmp('cmp',decROW,'L2_perf',99);

subplot(3,1,1)
plot(X','r')
axis tight
title('Original Data: 35 days of electrical consumption')
subplot(3,1,2)
plot(XC','b')
axis tight
title('Compressed Data: 35 days of electrical consumption')
subplot(3,1,3)
plot((X-XC)','k')
axis tight
title('Residuals')
xlabel('Minutes from 1 to 1440')

Как видно, общая форма сохраняется, в то время как локальными неровностями пренебрегают. Невязки содержат шум, а также компоненты из-за небольших шкал по существу.

Компрессионная Эффективность

Теперь рассмотрим соответствующие плотности ненулевых элементов.

cfs = cat(2,[decCMP.cd{:},decCMP.ca]);
cfs = sparse(cfs);
perf = zeros(1,nbSIG);
for k = 1:nbSIG
    perf(k) = 100*nnz(cfs(k,:))/nbVAL;
end

figure
plot(perf,'r-*')
title('Percentages of nonzero coefficients for the 35 days')
xlabel('Signal indices')
ylabel('% of nonzero coefficients')

Для каждого сигнала процент необходимых коэффициентов для восстановления 99% энергии лежит между 1,25% и 1,75%. Это иллюстрирует способность вейвлетов концентрировать энергию сигнала в нескольких коэффициентах.

Кластеризация сигналов строк

Кластеризация предлагает удобную процедуру для суммирования большого набора сигналов с помощью разреженных представлений вейвлет. Иерархическую кластеризацию можно реализовать с помощью mdwtcluster. Для использования необходимо иметь Statistics and Machine Learning Toolbox™ mdwtcluster.

Сравните три различные кластеризации 35-дневных данных. Первое основано на исходном мультисигнале, второе на коэффициентах приближения на уровне 7, а последнее основано на деноцированном мультисигнале.

Установите количество кластеров равным 3. Вычислите P1 и P2 структур, которые содержат соответственно два первых раздела и третий.

P1 = mdwtcluster(decROW,'lst2clu',{'s','ca7'},'maxclust',3);
P2 = mdwtcluster(decDEN,'lst2clu',{'s'},'maxclust',3);
Clusters = [P1.IdxCLU P2.IdxCLU];

Теперь мы можем проверить равенство трех разделов.

EqualPART = isequal(max(diff(Clusters,[],2)),[0 0])
EqualPART =

  logical

   1

Так что три перегородки одинаковы. Давайте теперь постройте и исследуем кластеры.

figure
stem(Clusters,'filled','b:')
title('The three clusters of the original 35 days')
xlabel('Signal indices')
ylabel('Index of cluster')
ax = gca;
xlim([1 35])
ylim([0.5 3.1])
ax.YTick = 1:3;

Первый кластер (маркированный как 3) содержит 25 дней в середине недели, а два других (маркированные как 2 и 1) содержат пять субботних и пять воскресных дней соответственно. Это снова иллюстрирует периодичность базовых временных рядов и трех различных общих форм, наблюдаемых на двух первых графиках, отображаемых в начале этого примера.

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

CA7 = mdwtrec(decROW,'ca');
IdxInCluster = cell(1,3);
for k = 1:3
    IdxInCluster{k} = find(P2.IdxCLU==k);
end
figure('Units','normalized','Position',[0.2 0.2 0.6 0.6])
for k = 1:3
    idxK = IdxInCluster{k};
    subplot(2,3,k)
    plot(X(idxK,:)','r')
    axis tight
    ax = gca;
    ax.XTick = [200 800 1400];
    if k==2
        title('Original signals')
    end
    xlabel(['Cluster: ' int2str(k) ' (' int2str(length(idxK)) ')'])
    subplot(2,3,k+3)
    plot(CA7(idxK,:)','b')
    axis tight
    if k==2
        title('Coefficients of approximations at level 7')
    end
    xlabel(['Cluster: ' int2str(k) ' (' int2str(length(idxK)) ')'])
end

Те же самые разбиения получают из исходных сигналов (1440 выборок для каждого сигнала) и из коэффициентов приближений на уровне 7 (18 выборок для каждого сигнала). Это иллюстрирует, что использования менее 2% коэффициентов достаточно, чтобы получить те же кластерные разделы 35 дней.

Сводные данные

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