メインコンテンツ

信号アナライザー

複数の信号とスペクトルの可視化および比較

説明

信号アナライザー アプリは、時間領域、周波数領域、時間-周波数領域における信号の視覚化、前処理、測定、解析、比較用の対話型ツールです。このアプリを使用して以下ができます。

  • MATLAB® ワークスペース内のすべての信号への容易なアクセス。

  • アプリを起動したままの状態での、欠損データの補完 (R2024a 以降)、および信号の平滑化、フィルター処理、リサンプリング、トレンド除去、ノイズ除去、抽出、編集。

  • カスタム前処理関数の追加および適用。

  • オーディオ信号の再生。 (R2024a 以降)

  • 複数の信号の波形、スペクトル、パーシステンス、スペクトログラム、およびスカログラム表現の可視化および比較の同時実行。

  • データおよび信号統計の測定。

信号アナライザー アプリを使用すると、持続時間が異なる多数の信号を同じビュー内で同時に扱うことができます。

詳細については、信号アナライザー アプリの使用を参照してください。

  • スカログラム ビューを使用したり、信号にウェーブレット ノイズ除去を適用したりするには、Wavelet Toolbox™ のライセンスが必要です。

Signal Analyzer app

信号アナライザー アプリを開く

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

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

すべて展開する

Fs=7418Hz でサンプリングされた音声信号を読み込みます。ファイルには、"MATLAB®" という単語を発声している女性の録音音声が含まれています。

load mtlb

オーディオ データの 70% が欠落している状況をシミュレートするには、信号に NaN 値をランダムに割り当てます。

rng(2024) 
numToReplace = round(length(mtlb) * 0.70);
missing = randperm(length(mtlb),numToReplace);

mtlbMissing = mtlb;
mtlbMissing(missing) = NaN;

信号アナライザーを開いて、[ワークスペース ブラウザー] ペインから mtlb 変数と mtlbMissing 変数を [信号をフィルター] テーブルにドラッグします。2 つの信号を選択します。[アナライザー] タブで、[時間値] をクリックし、Sample Rate and Start Time を選択します。[サンプル レート] を Fs Hz、[開始時間]0 秒として指定します。[グリッドの表示] をクリックして、2 つのディスプレイを並べて作成します。mtlb を左側のディスプレイにプロットし、mtlbMissing を右側のディスプレイにプロットします。オーディオ信号を聞くには、mtlb オーディオ信号を選択し、[表示] タブのツールストリップの [再生] セクションで [再生] をクリックします。信号を繰り返す場合は、再生する前に [ループ再生] を選択します。

Signal Analyzer app, showing the Display strip, the "mtlb" signal is selected and played in loop.

欠損データのある信号を選択し、[アナライザー] タブの [前処理] をクリックして前処理モードに入り、前処理オプションのリストから Fill Missing を選択します。[関数パラメーター] パネルを使用して、Fill Missing パラメーターを調整します。Autoregressive model を選択し、[適用] をクリックして、信号の欠損を埋めます。[すべて確定] をクリックして前処理結果を保存し、モードを終了します。代替の埋め込み関数の詳細については、fillmissingおよびfillgapsを参照してください。

Signal Analyzer app, showing the Search bar in the Preprocess strip. Clicking the Search bar shows a variety of preprocessing options. The "Fill Missing" option is selected.

[再生] ボタンを使用して、埋めた信号を再生できるようになりました。欠損データを埋めることによる効果をスペクトログラム上で確認するには、[表示] タブで [時間-周波数] をクリックします。[スペクトログラム] タブで、20 ms の時間分解能を指定し、隣接するセグメント間のオーバーラップとして 80% を指定します。[パワーの範囲]–50 dB と –10 dB に設定します。左側の表示をクリックして、この手順を繰り返します。

Signal Analyzer app, showing the Spectrogram strip, the "mtlb" and "mtlbMissing" signals with their respective spectrograms.

解析ウィンドウのスペクトル漏れを調整して、"信号アナライザー" で正弦波を分解できます。

100Hz で 2 秒間サンプリングされた 2 チャネルの信号を生成します。

  1. 最初のチャネルは、20Hz トーンと 21Hz トーンで構成されます。どちらのトーンにも単位振幅があります。

  2. 2 番目のチャネルも 2 つのトーンをもちます。1 つのトーンは単位振幅および 20Hz の周波数をもちます。もう 1 つのトーンは 1/100 の振幅および 30Hz の周波数をもちます。

fs = 100;
t = (0:1/fs:2-1/fs)';

x = sin(2*pi*[20 20].*t)+[1 1/100].*sin(2*pi*[21 30].*t);

ホワイト ノイズに信号を組み込みます。40 dB の S/N 比を指定します。

x = x + randn(size(x)).*std(x)/db2mag(40);

"信号アナライザー" を開いて信号をプロットします。[アナライザー] タブで、信号テーブルで選択した信号について [時間値] をクリックして Sample Rate and Start Time を選択します。[サンプル レート]fs Hz、[開始時間]0 秒として指定します。[表示] タブの [スペクトル] をクリックして、ディスプレイにスペクトル プロットを追加します。

Signal Analyzer app, showing the Display strips, from which the Time and Spectrum views are selected. The app also displays the signal "x" with channels 1 and 2, in time domain and frequency domain.

[スペクトル] タブをクリックします。スペクトル漏れを制御するスライダーは、中央の位置にあり、分解能帯域幅の約 1.28 Hz に相当します。1 番目のチャネルの 2 つのトーンは、分解されていません。2 番目のチャネルの 30Hz トーンは、他のトーンよりもかなり弱いにもかかわらず表示されています。

分解能帯域幅がおよそ 0.83 Hz になるように漏れを増やします。2 番目のチャネルの弱いトーンは、明確に分解されます。

Signal Analyzer app, showing the Spectrum strip, from which Leakage is selected. The app also displays the signal "x" with channels 1 and 2, in time domain and frequency domain.

スライダーを最大値に移動します。分解能帯域幅はおよそ 0.5Hz です。1 番目のチャネルの 2 つのトーンは、分解されています。2 番目のチャネルの弱いトーンは、大きいウィンドウのサイドローブによってマスクされています。

[表示] タブをクリックします。水平方向のズームを使用して周波数軸を拡大します。ディスプレイに 2 つのカーソルを追加して周波数領域のカーソルをドラッグし、トーンの周波数を推定します。

Signal Analyzer app, showing the Display strips, from which the Data Cursor toggle button is selected. The app also displays the signal "x" with channels 1 and 2. Two vertical data cursors are shown in the time-domain and frequency-domain plots.

電子歯ブラシの音声録音を MATLAB® に読み取ります。信号は 48 kHz でサンプリングされています。歯ブラシは約 1.75 秒で電源が入り、約 2 秒間持続します。

[y,fs] = audioread("toothbrush.m4a");

信号アナライザーを開いて、"ワークスペース ブラウザー" から信号テーブルに信号をドラッグします。信号テーブルでそれを選択し、[アナライザー] タブで [時間値] をクリックすることで、信号に時間情報を追加します。Sample Rate and Start Time を選択して、サンプル レートに fs を入力します。

[表示] タブで [グリッドの表示] をクリックして、2 行 2 列のグリッドの表示を作成します。各ディスプレイを選択し、[スペクトル] をクリックしてスペクトル ビューを追加し、[時間] をクリックして時間ビューを削除します。信号を 4 つのディスプレイすべてにドラッグします。

Signal Analyzer app, showing the Display strip, from which the Spectrum view is selected. The app also shows the signal "y" in frequency domain in a 2-by-2 grid of displays. The four displays show the same spectrum for "y".

[スペクトル] タブをクリックして、各ディスプレイのスペクトル ビューを変更します。

  1. 左上のディスプレイをクリックして選択します。漏れの値が 32 になるまで [漏れ] スライダーを動かします。

  2. 右上のディスプレイをクリックして選択します。[分解能タイプ] セクションで [ウィンドウの長さ] を選択します。[ウィンドウの長さ] セクションで、[指定] を選択し、ウィンドウの長さを 1500 サンプルに指定します。[ウィンドウ オプション] セクションで、Rectangular ウィンドウを選択し、オーバーラップ率 20 を指定します。

  3. 左下のディスプレイをクリックして選択します。[分解能タイプ] セクションで [ウィンドウの長さ] を選択します。[ウィンドウの長さ] セクションで、[指定] を選択し、ウィンドウの長さを 500 サンプルに指定します。[ウィンドウ オプション] セクションで、Hamming ウィンドウを選択し、オーバーラップ率 50 を指定します。[NFFT] セクションで、離散フーリエ変換点を 550 に指定します。

  4. 右下のディスプレイをクリックして選択します。[分解能タイプ] セクションで [ウィンドウの長さ] を選択します。[ウィンドウの長さ] セクションで、[指定] を選択し、ウィンドウの長さを 5000 サンプルに指定します。[ウィンドウ オプション] セクションで、Chebyshev ウィンドウを選択し、サイドローブの減衰を 50 dB、オーバーラップ率を 90 に指定します。

分解能は高いが漏れが多いビューもあれば、漏れは少ないが分解能が低いビューもあることがわかります。

Signal Analyzer app, showing the Display strip, from which the Spectrum view is selected. The app also shows the signal "y" in frequency domain in a 2-by-2 grid of displays. The four displays now show different spectra for "y", each of them modified with its own spectrum settings.

関連する例

プログラムでの使用

すべて展開する

signalAnalyzer信号アナライザー アプリを開きます。

signalAnalyzer(sig)信号アナライザー アプリを開き、信号 sig をインポートしてプロットします。‎アプリが既に開いている場合は、現在のディスプレイで sig がプロットされます。sig が既にプロットされたが、変更されている場合、関数呼び出しでプロットが更新されます。

sig はワークスペースの変数または MATLAB の式です。sig は以下になります。

  • 各列に独立した信号を含むベクトルまたは行列。

  • 時間値が持続時間として指定された timetable

  • timeseries オブジェクト。

詳細については、信号アナライザーでサポートされるデータ型を参照してください。

既定では、アプリは信号をサンプル インデックスの関数としてプロットします。時間情報を指定した場合、または信号が固有の時間情報をもつ場合、アプリは信号を時間の関数としてプロットします。

signalAnalyzer(sig1,...,sigN) は、N 個の信号ベクトルまたは行列をインポートし、現在のディスプレイでプロットします。アプリは、同じ関数呼び出しによる、固有の時間情報をもつ信号と固有の時間情報をもたない信号のインポートはサポートしません。

signalAnalyzer(___,'SampleRate',fs) は、サンプル レート fs を Hz 単位の正のスカラーとして指定します。アプリはこのサンプル レートを使用し、開始時間をゼロとして 1 つ以上の信号を時間に対してプロットします。固有の時間情報をもたない信号のサンプル レートを指定できます。

signalAnalyzer(___,'SampleTime',ts) は、サンプル時間 ts を秒単位の正のスカラーとして指定します。アプリはこのサンプル時間を使用し、開始時間をゼロとして 1 つ以上の信号を時間に対してプロットします。固有の時間情報をもたない信号のサンプル時間を指定できます。

signalAnalyzer(___,'StartTime',st) は、信号の開始時間 st を秒単位のスカラーとして指定します。サンプル レートまたはサンプル時間を指定しない場合、アプリはサンプル レートを 1 Hz と仮定します。固有の時間情報をもたない信号の開始時間を指定できます。

signalAnalyzer(___,'TimeValues',tv) は、時間値がデータ点に対応するベクトル tv を指定します。tv は秒単位の値をもつ実数の数値ベクトルとして指定できます。tv は配列 duration としても指定できます。tv の値は一意で、NaN にすることはできませんが、その間隔は均一である必要はありません。すべての入力信号は tv と同じ長さでなければなりません。固有の時間情報をもたない信号に、時間値のベクトルを指定できます。

フィルター処理とスカログラム ビューは不等間隔サンプル信号をサポートしていません。

バージョン履歴

R2016a で導入

すべて展開する