Main Content

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

信号多重解像度アナライザー

時間を揃えた成分に信号を分解

R2018b 以降

説明

信号多重解像度アナライザー アプリは、実数値の 1 次元信号の多重レベル ウェーブレットに基づいた分解やデータ適応に基づいた分解を可視化して結果を比較するための対話型ツールです。このアプリは、単精度データと倍精度データをサポートしています。このアプリでは、以下を行うことができます。

  • 自分の MATLAB® ワークスペース内のすべての実数値の 1 次元信号にアクセスする。

  • 固定帯域幅およびデータ適応の多重解像度解析 (MRA) 法を使用して分解を生成する。

    • 固定帯域幅: 最大重複離散ウェーブレット変換 (MODWT) (既定)、および経験的モード分解 (EMD)

    • データ適応: 経験的ウェーブレット変換 (EWT)、調整可能な Q ファクター ウェーブレット変換 (TQWT)、および変分的モード分解 (VMD)

  • 既定のパラメーターを調整し、複数の分解を可視化して比較する。

  • 信号の再構成に含める分解レベルを選択する。

  • 分解レベルの周波数範囲を取得する

  • 複数のレベルにおける信号の相対エネルギーを特定する。

  • 再構成した信号と分解をワークスペースにエクスポートする。

  • MATLAB スクリプトを生成することにより、ワークスペースで分解を再作成する。

Signal Multiresolution Analyzer app

信号多重解像度アナライザー アプリを開く

  • MATLAB ツールストリップ: [アプリ] タブの [信号処理と通信] でアプリのアイコンをクリックします。

  • MATLAB コマンド プロンプト: signalMultiresolutionAnalyzer と入力します。

すべて展開する

阪神淡路大震災のデータを読み込みます。このデータは、オーストラリアのホバートにあるタスマニア大学の地震計で 1995 年 1 月 16 日 20:56:51 (GMT) から 51 分間にわたって 1 秒間隔で記録された測定値 (垂直加速度、nm/sec2) です。

load kobe

信号多重解像度アナライザーを開き、[インポート] をクリックします。アプリで処理できるすべてのワークスペース変数をリストしたウィンドウが表示されます。

ex1_1.2.png

ダイアログ ボックスから阪神淡路大震災のデータを選択して、[インポート] をクリックします。既定では、信号の 4 レベルの MODWTMRA 分解が [MODWT] タブに表示されます。既定の設定では、分解は関数 modwt および関数 modwtmra を使用して求められます。[分解] ペインのプロットは、各スケールにおける信号のウェーブレット分解を元の信号部分空間に投影したものです。[分解された信号] ペインでは、分解された信号に kobe1 という名前が付けられます。メソッド MODWT は、分解を識別します。元の信号 kobe と再構成 kobe1 は、[再構成] ペインにプロットされます。

ex1_2_12.png

既定では、プロットはサンプル インデックスに対して行われ、周波数の単位はサンプルあたりのサイクル数です。時間に関してプロットし、周波数をヘルツ単位で表示するには、[信号多重解像度アナライザー] タブの [サンプルレート] ラジオ ボタンを選択します。既定のサンプル レートは 1 ヘルツです。プロットと周波数が、このサンプルレートを使用するよう更新されます。

ex1_4_cropped.png

[レベルの選択] ペインには、各スケールにおける信号の相対エネルギーと周波数帯域が表示されます。

ex1_4_cropped3.png

[表示] 列のチェック ボックスは、そのレベルを [分解] ペインに表示するかどうかを制御します。[含める] 列のチェック ボックスは、そのレベルのウェーブレット分解を再構成に含めるかどうかを制御します。[分解] ペインのプロットをクリックすることによっても、信号の再構成でそのレベルを含めるか除外するかを制御できます。

新しい分解を生成するには、[MODWT] タブのツールストリップでいずれかのウェーブレット パラメーターを変更し、[分解] をクリックします。

  • ウェーブレット - ウェーブレット ファミリ

  • 数値 - ウェーブレット フィルターの番号

  • レベル - ウェーブレット分解のレベル

ツールストリップのパラメーターを変更すると、[分解] ボタンが有効になります。

ノイズがある Doppler 信号を読み込みます。この信号は、Donoho および Johnstone の Doppler テスト信号 [1] にノイズを加えたものです。

load noisdopp

信号多重解像度アナライザーを開き、信号をアプリにインポートします。既定では、[MODWT] タブで信号の 4 レベルの MODWTMRA 分解が作成されます。[分解された信号] ペインでは、ウェーブレット分解に noisdopp1 という名前が付けられます。[再構成] ペインに、元の信号と再構成された信号が異なる 2 色でプロットされます。

EMD 分解を追加するため、まず [信号多重解像度アナライザー] タブに切り替えてから、[追加] ▼ をクリックして [EMD] を選択します。

ex2_1_a.png

少し待つと、EMD 分解 noisdopp2[EMD] タブに表示されます。既定の設定では、分解は関数 emd を使用して求められます。残差は [再構成] ペインで最も太いプロットになります。ツールストリップのパラメーターを変更して [分解] をクリックすると、異なる EMD 分解を求められます。パラメーターおよび EMD アルゴリズムの詳細については、emdを参照してください。

ex2_2_a.png

2 つの再構成の違いを調べやすくするため、プロットの凡例の noisdopp をクリックします。テキストが薄くなり、元の信号のプロットが非表示になります。凡例を使用すると、[再構成] ペインの任意のプロットを非表示にすることができます。

ex2_3_a_cropped.png

この例では、分解を複製して変更する方法を示します。この例ではさらに、スクリプトを生成してワークスペースで分解を再作成する方法も示します。

阪神淡路大震災のデータをワークスペースに読み込みます。このデータは、オーストラリアのホバートにあるタスマニア大学の地震計で 1995 年 1 月 16 日 20:56:51 (GMT) から 51 分間にわたって 1 秒間隔で記録された測定値 (垂直加速度、nm/sec2) です。

load kobe

信号多重解像度アナライザーを開き、地震のデータをアプリにインポートします。既定では、既定の設定で関数 modwt および関数 modwtmra を使用して、kobe1 という名前で信号の 4 レベルの MODWTMRA 分解が作成されます。時間に関してプロットを表示し、周波数を Hz 単位で表すには、[信号多重解像度アナライザー] タブの [サンプルレート] ラジオ ボタンをクリックします。

分解の複製

次数 4 の Coiflet を使用して、新しい 6 レベルの分解を作成します。[信号多重解像度アナライザー] タブで、ツールストリップの [複製] をクリックします。kobe1 は現在 [分解された信号] で選択されている項目なので、1 番目の分解の複製が作成されます。複製の名前は kobe1Copy になります。[再構成] のプロットが更新され、新しい分解が追加されます。複製は、色以外は 1 番目の分解と同じです。[分解された信号] の名前を右クリックすることにより、複製の名前を変更できます。

[MODWT] タブで、ツールストリップの設定を以下の値に変更してから、[分解] をクリックします。

  • ウェーブレット: coif

  • 数値: 4

  • レベル: 6

[レベルの選択] で、再構成に含まれる分解の成分 (Approximation とレベル 5 およびレベル 6 の Detail) に注意してください。

levelSelectionPanelCropped.png

レベル 4 には、全エネルギーの約 60% があります。レベル 5 および 6 を再構成から削除し、レベル 4 は含めます。[分解] ペインに Approximation とレベル 4 の Detail のみを表示します。分解と再構成の位置をほぼ合わせるには、[分解] ペインを [再構成] ペインの下にドラッグします。

ex3_2_a.png

MODWT スクリプトの生成

エクスポートの選択肢は 3 つあります。選択した分解済み信号の再構成または分解全体をワークスペースにエクスポートするか、MATLAB™ スクリプトをエクスポートしてワークスペースで分解を再作成できます。スクリプトを生成するには、[信号多重解像度アナライザー] タブで、[エクスポート][MATLAB スクリプトの生成] をクリックします。

ex3_3_a_cropped.png

エディターで無題のスクリプトが開き、次の実行可能なコードが表示されます。levelForReconstruction の true と false の値は、[レベルの選択] での Include ボックスの選択に対応します。スクリプトをそのまま保存するか、同じ分解設定を他の信号に適用するように修正できます。コードを実行します。

% Logical array for selecting reconstruction elements
levelForReconstruction = [false,false,false,true,false,false,true];

% Perform the decomposition using modwt
wt = modwt(kobe,'coif4',6);

% Construct MRA matrix using modwtmra
mra = modwtmra(wt,'coif4');

% Sum down the rows of the selected multiresolution signals
kobe1Copy = sum(mra(levelForReconstruction,:),1);

元の信号と再構成をプロットします。このプロットは、色が異なる可能性がある以外、アプリに表示されている kobe1Copy の再構成と一致します。

t = 0:numel(kobe)-1;
plot(t,kobe)
grid on
hold on
plot(t,kobe1Copy,LineWidth=2)
xlabel("Seconds")
title("Reconstruction")
legend("Original","Reconstruction",Location="northwest")
axis tight
hold off

Figure contains an axes object. The axes object with title Reconstruction contains 2 objects of type line. These objects represent Original, Reconstruction.

EMD スクリプトの生成

[追加] ▼ をクリックし、[信号多重解像度アナライザー] タブで [EMD] を選択して、阪神淡路大震災のデータの EMD 分解を追加します。[分解された信号] ペインにおける分解された信号の名前は kobe3 です。既定では、再構成は残差のみで構成されます。既定の設定では、分解は関数 emd を使用することで求められます。

[エクスポート][MATLAB スクリプトの生成] をクリックして、EMD 分解を作成するスクリプトを生成します。エディターで無題のスクリプトが開き、次の実行可能なコードが表示されます。コードを実行します。

% Logical array for selecting reconstruction elements
levelForReconstruction = [false,false,false,false,false,true];

% Perform the decomposition using EMD
[imf,residual,info] = emd(kobe, ...
    SiftRelativeTolerance=0.2, ...
    SiftMaxIterations=100, ...
    MaxNumIMF=5, ...
    MaxNumExtrema=1, ...
    MaxEnergyRatio=20, ...
    Interpolation='spline');

% Construct MRA matrix by appending IMFs and residual
mra = [imf residual].';

% Sum down the rows of the selected multiresolution signals
kobe3 = sum(mra(levelForReconstruction,:),1);

再構成 kobe3 を元の信号と比較します。この場合、再構成は残差のみで構成されます。

plot(t,kobe)
grid on
hold on
plot(t,kobe3,LineWidth=2)
xlabel("Seconds")
title("Reconstruction")
legend("Original","Reconstruction",Location="northwest")
axis tight
hold off

Figure contains an axes object. The axes object with title Reconstruction contains 2 objects of type line. These objects represent Original, Reconstruction.

関連する例

パラメーター

すべて展開する

多重解像度解析 (既定) を生成するために使用する直交ウェーブレット ファミリ。以下を指定します。

  • sym — Symlet

  • coif — Coiflet

  • db — Daubechies ウェーブレット

  • fk — Fejér-Korovkin ウェーブレット

Wavelet パラメーターは、多重解像度解析の生成のみに適用されます。

ウェーブレットの詳細については、関数 waveinfo を使用してください。たとえば、Daubechies ウェーブレットの詳細を調べるには、「waveinfo('db')」と入力します。

経験的モード分解で包絡線構築に使用する内挿法。次のいずれかを指定します。

  • spline — 3 次スプライン内挿

  • pchip — 区分的 3 次エルミート内挿多項式法

Interpolation パラメーターは、経験的モード分解の生成のみに適用されます。経験的モード分解を作成するときに、アプリで他のオプションを変更できます。詳細については、emd を参照してください。

プログラムでの使用

すべて展開する

signalMultiresolutionAnalyzer は、信号多重解像度アナライザー アプリを開きます。アプリが初期化されたら、[インポート] をクリックして解析用の信号をインポートします。

signalMultiresolutionAnalyzer(sig) は、信号多重解像度アナライザー アプリを開き、sym4 ウェーブレットと既定設定により modwtmramodwt を使用して、sig の多重解像度解析をインポート、分解、プロットします。

sig はワークスペースの変数です。sig は次のいずれかになります。

  • 1 行 N 列または N 行 1 列の実数値のベクトル。

  • 単精度または倍精度。

既定では、このアプリは分解レベルをサンプル インデックスの関数としてプロットします。時間に関してプロットするには、このアプリを使用してサンプルレートまたはサンプル周期を設定できます。

ヒント

  • 複数の信号を同時に分解するには、信号多重解像度アナライザーアプリのインスタンスを複数実行できます。

  • MODWT 分解法や TQWT 分解法の場合、信号多重解像度アナライザー アプリによって生成されたスクリプトは、gpuArray (Parallel Computing Toolbox)入力をサポートします。

アルゴリズム

すべて展開する

参照

[1] Percival, Donald B., and Andrew T. Walden. Wavelet Methods for Time Series Analysis. Cambridge Series in Statistical and Probabilistic Mathematics. Cambridge ; New York: Cambridge University Press, 2000.

バージョン履歴

R2018b で導入