exponenta event banner

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

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

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

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

  • Реконструированные аппроксимации на заданных уровнях,

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

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

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

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

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

Чтобы проиллюстрировать эти возможности, рассмотрим реальный мультисигнал, представляющий 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. Для использования 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 дней.

Резюме

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