Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

多重信号の 1 次元ウェーブレット解析

1 次元の多重信号は、行単位 (または列単位) で構成される行列として格納される、同じ長さの 1 次元信号のセットです。

この例の目的は、多重信号の解析、ノイズ除去または圧縮を行い、多重信号を構成する信号のさまざまな表現または簡略化されたバージョンをクラスター化する方法を示すことです。

この例では、最初に信号の解析が行われ、さまざまな表現または簡略化されたバージョンが生成されています。

  • 指定のレベルで再構成した Approximation

  • ノイズ除去後のバージョン

  • 圧縮後のバージョン

ノイズ除去と圧縮は、ウェーブレットの主要な用途の 2 つであり、多くの場合にクラスタリングの前の前処理手順として使用されます。

この例の最後の手順では、いくつかのクラスタリング手法を実行してそれらを比較します。これにより、スパース ウェーブレット表現を使用して大規模な信号のセットを集計できます。

多重信号の読み込みとプロット

これらの機能を説明するために、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 つの異なる一般的な形状の区別はできていることがわかります。

データの表面表現

多重信号の周期性を強調表示するために、3 次元表現を使用するデータについて調べましょう。

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];

表されている 5 週間は、さらに明確にわかるようになります。

多重信号の行の分解

'sym4' ウェーブレットを使用して、ウェーブレット分解をレベル 7 で実行します。

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 の信号および Approximation

各行の信号のレベル 7 で Approximation を再構成してみましょう。次に、Approximation を元の信号と比較するために、2 つのプロットを表示します (以下の図を参照)。1 番目はすべての元の信号を表示し、2 番目はすべての対応するレベル 7 での Approximation を表示します。

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 での Approximation によって得られますが、興味深い特徴の一部が失われています。たとえば、信号の最初と最後のバンプが消失しています。

重ね合わされた信号および Approximation

さらに注意深く元の信号とレベル 7 の対応する Approximation を比較するために、2 つのプロットを表示します (以下の図を参照)。1 番目は最初の 4 つの信号を考慮し、2 番目は最後の 4 つの信号を考慮します。これらのプロットのそれぞれが、元の信号とレベル 7 の対応する Approximation を重ね合わせたものを表します。

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'])

おわかりのように、一般的な形状については元の信号の Approximation は視覚的に正確です。

多重信号のノイズ除去

電気信号に明確に起因するこれらのバンプを維持する多重信号のより繊細な単純化を実行するために、多重信号のノイズ除去を行います。

3 つの手順を使用してノイズ除去手順を実行します。

1) 分解: ウェーブレットを選択し、分解のレベル N を選択してレベル N の信号のウェーブレット分解を計算します。

2) しきい値の設定: 1 から N までの各レベルおよび各信号でしきい値を選択し、Detail 係数にしきい値の設定を適用します。

3) 再構成: レベル N の元の Approximation 係数と、レベル 1 から N までの変更済みの Detail 係数を使用して、ウェーブレットの再構成を計算します。

次に、以前使用されていた分解レベル N = 7 ではなく、N = 5 を選択します。

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')

結果の品質は良好です。信号の最初と最後のバンプは十分に回復していますが、逆に残差は、信号に起因する一部の残りバンプを除いてノイズのように見えます。さらに、このような残りバンプの振幅の程度は小さいです。

行の信号を圧縮する多重信号

ノイズ除去のように、次の 3 つの手順を使用して圧縮手順を実行します (上記を参照)。

ノイズ除去手順との違いは、手順 2 にあります。利用可能な圧縮方法は 2 つあります。

  • 1 番目は信号のウェーブレット拡張を利用し、最大の絶対値係数を維持します。この場合、グローバルしきい値、圧縮性能または相対的な二乗ノルムの回復性能を設定します。したがって、1 つの信号依存パラメーターのみを選択する必要があります。

  • 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 を使用して階層クラスタリングを実装できます。mdwtcluster を使用するには、Statistics and Machine Learning Toolbox™ がなければなりません。

35 日間のデータの 3 つの異なるクラスタリングを比較します。1 番目は元の多重信号、2 番目はレベル 7 の Approximation 係数、最後はノイズ除去された多重信号に基づいています。

クラスター数を 3 に設定します。最初の 2 つの分割および 3 番目の分割をそれぞれ含む構造体 P1 および P2 を計算します。

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

次に、3 つの分割が同等であることをテストします。

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

  logical

   1

この 3 つの分割は同じです。次にクラスターをプロットして調べます。

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 つ (ラベル 2 および 1) にはそれぞれ土曜日が 5 日と日曜日が 5 日含まれています。再度、これは、この例の最初に表示された最初の 2 つのプロットにみられる基底となる時系列と 3 つの異なる一般的な形状の周期性を示しています。

次に、3 つの分割のうち 2 つを取得するために使用される元の信号と対応する Approximation 係数を表示します。

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 での Approximation の係数 (各信号の 18 サンプル) から同じ分割が取得されます。これは、35 日間の同じクラスタリング分割を取得するのに 2% 未満の係数の使用で十分であることを示しています。

まとめ

ウェーブレットを使用したノイズ除去、圧縮およびクラスタリングは非常に効率的な方法です。いくつかの係数の信号エネルギーを集中させるためのウェーブレット表現の能力が効率性の鍵です。さらに、クラスタリングは、スパース ウェーブレット表現を使用して大規模な信号のセットを集計する簡単な手続きです。