Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ウェーブレット時間-周波数アナライザー

信号のスカログラムの可視化

R2022a 以降

説明

ウェーブレット時間-周波数アナライザー アプリは、実数値および複素数値の 1 次元信号のスカログラムを可視化するための対話型ツールです。スカログラムは、時間と周波数の関数としてプロットされた連続ウェーブレット変換 (CWT) の絶対値です。対数スケールで周波数がプロットされます。このアプリでは、以下を行うことができます。

  • MATLAB® ワークスペースですべての 1 次元信号にアクセス

  • 複数の信号を同時にインポート

  • 既定のパラメーターの調整と、cwt を使用したスカログラムの可視化

  • 目的の解析ウェーブレットの選択

  • 解析 Morse ウェーブレット対称性と時間-帯域幅パラメーターの調整

  • CWT をワークスペースにエクスポート

  • MATLAB スクリプトを生成して、ワークスペースでスカログラムを再作成

  • 複数の信号のインポート

詳細については、Using Wavelet Time-Frequency Analyzer Appを参照してください。

Wavelet Time-Frequency Analyzer app

ウェーブレット時間-周波数アナライザー アプリを開く

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

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

すべて展開する

3 つの 1 次元信号 (心電図信号、双曲線チャープ信号、および NPG2006 データセット) を MATLAB® ワークスペースに読み込みます。

load wecg
load hyperbolchirp
load npg2006

構造体配列 npg2006 から複素数値信号を抽出します。

npgdata = npg2006.cx;
whos
  Name                  Size            Bytes  Class        Attributes

  hyperbolchirp      2048x1             33759  timetable              
  npg2006               1x1             37184  struct                 
  npgdata            1117x1             17872  double       complex   
  wecg               2048x1             16384  double                 

[ウェーブレット時間-周波数アナライザー] を開き、[信号のインポート] をクリックします。アプリで処理できるすべてのワークスペース変数をリストしたウィンドウが表示されます。

importSignals.png

すべての信号を選択し、[インポート] をクリックします。簡単な 1 回限りの初期化の後、[信号] ペインに、インポートされた信号の名前とそのタイプが表示されます。hyperbolchirp の場合、hyperbolchirp_hchirp のように、信号を含む timetable 変数の名前が timetable の名前に追加されます。アプリによって、強調表示された信号のスカログラムが表示されます。スカログラムは、既定の設定で関数cwtを使用して取得されます。エッジの影響が顕著になる円錐状影響圏もプロットされます。白い破線の外側のグレーの領域がエッジの影響が顕著になる領域です。既定では、頻度の単位はサイクル/サンプルです。

screenshot1.png

ECG 信号は実数値です。[信号] ペインで、複素数値信号 npgdata を選択します。スカログラムの正成分と負成分が表示されます。

screenshot3.png

hyperbolchirp_hchirp を選択します。timetable には時間情報が含まれているため、スカログラムは周波数の関数としてヘルツ単位でプロットされ、timetable の行時間が時間軸の基底として使用されます。無効化された [サンプル レート] フィールドには、行時間から決定されたサンプル レートが表示されます。

timetableScalo.png

双曲線チャープ信号を読み込みます。

load hyperbolchirp

[ウェーブレット時間-周波数アナライザー] を開き、信号をアプリにインポートします。パラメーター設定にアクセスするには、[スカログラム] タブをクリックします。既定では、アプリは解析 Morse (3, 60) ウェーブレットおよび既定の設定の関数cwtを使用して取得したスカログラムを表示します。

[パラメーターをリセット] をクリックすると、いつでも CWT パラメーターを既定値にリセットできます。パラメーターをリセットすると、[スカログラムの計算] ボタンが有効になります。

screenshot4.png

(1,5) Morse ウェーブレットを使用してスカログラムを可視化するには、[時間-帯域積] を 5 に設定します。ステータス バーに、保留中の変更があることを示すテキストが表示されます。[スカログラムの計算] ボタンが有効になります。代わりに、最初に [対称性] を 1 に設定した場合、アプリによって値が自動的に変更されます。対称性の値 1 は、"時間-帯域積""対称性" の比が 40 を超えてはならないという制約の違反となるためです。詳細については、ヒントを参照してください。

screenshot5.png

[対称性] を 1 に設定し、[スカログラムの計算] をクリックします。(1, 5) Morse ウェーブレットを使用して取得したスカログラムがアプリに表示されます。

screenshot7.png

(6, 50) Morse ウェーブレットを使用してスカログラムを可視化するには、まず [時間-帯域積] を 50 に、[対称性] を 6 に設定してから、[スカログラムの計算] をクリックします。

信号のインポート

双曲線チャープ信号をワークスペースに読み込みます。

load hyperbolchirp

スカログラムの可視化

[ウェーブレット時間-周波数アナライザー] を開き、信号をインポートします。パラメーター設定にアクセスするには、[スカログラム] タブをクリックします。既定では、アプリは Morse (3,60) ウェーブレットおよび既定の設定の関数cwtを使用して取得したスカログラムを表示します。信号は timetable であるため、スカログラムは周波数の関数としてヘルツ単位でプロットされます。時間軸は、timetable の行時間に基づきます。

[スカログラム] タブで、既定の設定を調整します。Morse (5,20) ウェーブレットを指定します。オクターブあたり 26 音で、周期的な境界拡張を使用してスカログラムを可視化します。周波数は対数スケールでプロットされます。

2021-11-04_15-22-25.png

スクリプトの生成

スカログラムで周波数軸のスケールを調整するには、まずワークスペースでウェーブレット解析を再現します。

ワークスペースでスカログラムを再作成するスクリプトを生成します。[エクスポート] ▼ メニューから [Generate MATLAB Script] を選択します。MATLAB® エディターで無題のスクリプトが開きます。円錐状影響圏の境界線をプロットに含めるには、スクリプト内の関数 cwt の呼び出しに 3 番目の出力引数 coi を追加します。スクリプトを保存して実行します。変数 scalogramfrequency には、それぞれスカログラムと周波数のベクトルが格納されます。

%Parameters
waveletParameters = [5,20];
voicesPerOctave = 26;
extendSignal = false;

%Compute cwt
%Run the function call below without output arguments to plot the results
[waveletTransform,frequency,coi] = cwt(hyperbolchirp,...
    WaveletParameters = waveletParameters,...
    VoicesPerOctave = voicesPerOctave,...
    ExtendSignal = extendSignal);
scalogram = abs(waveletTransform);

正しい時間軸を使用してスカログラムをプロットするために、hyperbolchirp timetable から行時間のベクトル Time を抽出します。

dataTimes = hyperbolchirp.Time;

周波数軸の調整 — 線形スケール

関数 pcolor を使用してスカログラムをプロットします。円錐状影響圏を含めます。周波数は線形スケールでプロットされます。

pcolor(dataTimes,frequency,scalogram)
shading flat
title("Scalogram")
xlabel("Time (s)")
ylabel("Frequency (Hz)")
hold on
plot(dataTimes,coi,"w--",LineWidth=2)
hold off
colorbar

Figure contains an axes object. The axes object with title Scalogram, xlabel Time (s), ylabel Frequency (Hz) contains 2 objects of type surface, line.

周波数軸の調整 — 対数スケール

対数スケールで周波数をプロットするには、現在の座標軸のハンドルを取得し、YScale"log" に設定します。

AX = gca;
set(AX,YScale="log")

Figure contains an axes object. The axes object with title Scalogram, xlabel Time (s), ylabel Frequency (Hz) contains 2 objects of type surface, line.

MATLAB の対数軸の単位は 10 のべき乗です。MATLAB の既定の設定では、周波数の目盛りが 1、10、および 100 の位置 (最小周波数と最大周波数の間の 10 のべき乗) に配置されます。周波数軸の目盛りを増やすには、frequency の最小周波数と最大周波数を取得します。最小周波数から最大周波数までの間の対数的に等間隔である周波数セットを作成します。cwt は高から低の順に周波数を返すことに注意してください。

minf = frequency(end);
maxf = frequency(1);
numfreq = 10;
freq = logspace(log10(minf),log10(maxf),numfreq);

周波数軸の目盛りとラベルを新しい周波数に置き換えます。

AX.YTickLabelMode = "auto";
AX.YTick = freq;

Figure contains an axes object. The axes object with title Scalogram, xlabel Time (s), ylabel Frequency (Hz) contains 2 objects of type surface, line.

CWT では、周波数が 2 のべき乗で計算されます。2 のべき乗の周波数の目盛りと目盛りラベルを作成します。

freq = 2.^(round(log2(minf)):round(log2(maxf)));
AX.YTickLabelMode = "auto";
AX.YTick = freq;

Figure contains an axes object. The axes object with title Scalogram, xlabel Time (s), ylabel Frequency (Hz) contains 2 objects of type surface, line.

関連する例

パラメーター

すべて展開する

CWT の計算に使用する解析ウェーブレット。有効なオプションは MorseMorlet、および bump で、それぞれ Morse、Morlet (ガボール)、および Bump のウェーブレットを指定します。

Morse ウェーブレットの時間-帯域積を [対称性] の値以上のスカラーとして指定します。[対称性] の値に対する [時間-帯域積] の値の比が 40 を超えることはできません。

[時間-帯域積][対称性] の値は、cwt の名前と値の引数 WaveletParameters に対応します。

例: [時間-帯域積] を 40 に設定し、[対称性] の値を 5 に設定することは、名前と値の引数 WaveletParameterscwt(…,WaveletParameters=[5 40],…) に設定することと等価です。

Morse ウェーブレットの対称性パラメーターを 1 以上のスカラーとして指定します。[対称性] の値に対する [時間-帯域積] の値の比が 40 を超えることはできません。

[対称性][時間-帯域積] の値は、cwt の名前と値の引数 WaveletParameters に対応します。

CWT に使用するオクターブあたりの音の数を 1 ~ 48 の整数で指定します。指定したオクターブあたりの音の数を使用して CWT のスケールが離散化されます。ウェーブレットの周波数と時間のエネルギーの広がりは、最小スケールと最大スケールによって自動的に決まります。

プログラムでの使用

すべて展開する

waveletTimeFrequencyAnalyzer は、ウェーブレット時間-周波数アナライザー アプリを開きます。アプリが初期化されたら、[信号のインポート] をクリックして解析用の信号をインポートします。

waveletTimeFrequencyAnalyzer(sig)ウェーブレット時間-周波数アナライザー アプリを開き、既定の設定で cwt を使用して sig のスカログラムをインポート、生成、およびプロットします。

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

  • 実数値または複素数値のベクトル。

  • 単一変数の一定間隔でサンプリングされる timetable。

  • 単精度または倍精度のデータ。

sig は少なくとも 4 つのサンプルをもたなければなりません。

既定では、アプリはスカログラムをサイクル/サンプル単位の周波数の関数としてプロットし、サンプル インデックスを時間軸の基底として使用します。信号が timetable の場合、アプリはスカログラムを周波数の関数としてヘルツ単位でプロットし、timetable の行時間を時間軸の基底として使用します。

制限

  • ワークスペースでスカログラムを作成するために生成する MATLAB スクリプトは、[信号] ペインで選択された信号の名前を使用します。変数が MATLAB ワークスペースに存在しない場合、スクリプトはエラーをスローします。エラーが発生した場合は、スクリプト内の変数名を元の信号の名前に置き換えるか、ワークスペース内でその変数を作成します。

  • MATLAB セッションで実行できるウェーブレット時間-周波数アナライザー アプリのインスタンスは 1 つだけです。

ヒント

  • Morse ウェーブレット パラメーター [時間-帯域積][対称性] は、次の 3 つの制約を満たさなければなりません。

    • [対称性] またはガンマは 1 以上でなければなりません。

    • [時間-帯域積][対称性] 以上でなければなりません。

    • [対称性] に対する [時間-帯域積] の比が 40 を超えることはできません。

    無効な設定を使用してスカログラムの可視化が試みられることのないように、アプリは変更されたすべてのパラメーターを検証します。制約に違反する値を入力すると、アプリによって自動的に有効な値に置き換えられます。新しい値は、目的の値ではない可能性があります。予期しない結果を避けるために、入力したすべての値が必ず有効な設定になるようにする必要があります。詳細については、Morse ウェーブレット パラメーターの調整の例を参照してください。

バージョン履歴

R2022a で導入