MATLAB 实现相关分析和谱估计


对于没有系统学过《信号与原理》的自己来说,即使已经在用各种信号处理的方法,仍然在每次接触相关的概念和方法时觉得陌生和模糊。本篇文章整理自己学习过程中的理解和备忘,希望对同样的信号分析小白有所帮助。感谢网上各种资源和分享对我学习过程的帮助。
(提醒自己:概念的描述,要落实在一句话总结,详细解释和应用场景三个方面。最好加上公式或信号的例子)

一. 基本概念

1.1 什么是信号?

信号– f ( t ) f(t) f(t):信号表示,时域,频域(与傅里叶变换),信号调制(与边频带和倒频谱)

信号在数学上即为一个或多个变量的函数,相应的,对函数的处理可以适用于对信号的处理中。
函数的平移、对称和缩放,对应了信号在时域上的基本变换(时移、反转–相关性和卷积会用到,尺度变换–小波变换会用到)。
从函数的周期性出发,我们便有了频域角度来描述信号的初级理解。
(有限个不同周期性的函数叠加,可以在时域得到一个连续的周期函数。通过傅里叶变换来实现时域和频域的相互转换,频域非周期离散,时域周期连续。而时域非周期连续,频域也会是非周期连续的。——)

能量– E E E E = lim ⁡ T → ∞ ∫ − T T ∣ f ( t ) ∣ 2 d t E=\lim_{T\to\infty} \int_{-T}^{T} |f(t)|^2dt E=TlimTTf(t)2dt
功率– P P PP = lim ⁡ T → ∞ 1 2 T ∫ − TT ∣ f ( t ) ∣ 2 dt P=\lim_{T\to\infty} \frac{1}{2T} \int_{-T}^{ T} |f(t)|^2dtP=T リム2T_ _1Tf ( t ) 2 dt
パワーとエネルギーの概念は、実際には物理学の定義との類推によって与えられます。信号値を電圧信号、抵抗を 1、電圧の 2 乗がエネルギー、エネルギーを時間で割ったものが電力に相当すると考えてください。

確定信号: 確定信号はエネルギー信号とパワー信号に分けられます。
ランダム信号: ランダム信号はパワー信号のみです。

電力(限定)信号:各種周期信号、一定信号、ステップ信号など 無限に長いホワイト ノイズも電力信号です。電力は限られていますが、エネルギーは無限です。
エネルギー (限定) 信号: さまざまな過渡信号など有限数のパルス信号はすべてエネルギー信号です。エネルギーは有限、電力はゼロ(無限周期に相当するため)。

参考资料:
信号&系统 | 信号的概念与常用信号
随机过程(随机信号)
能量信号和功率信号的分别
傅里叶分析之掐死教程(完整版)更新于2014.06.06
傅里叶变换的基本性质

从时域到频域再到复数域!
傅里叶变换则可以让微分和积分在频域中变为乘法和除法

1.2 信号频域分析方法的理解

一般来说,频谱分析指的是将信号做傅里叶变换从而进行分析。(“谱”意味着自变量为频率,也就是在频域进行分析。)
完整的频域分析应该得到被测信号包含的频率成分,还有每个频率成分的幅度和相位关系。即信号功率谱相位谱的分析。

FFT(快速傅里叶变换,离散傅里叶变换的快速算法)的假设条件:根据狄里赫利条件,只有能量信号才可以做 FFT 得到频谱
对于能量信号,能量谱(密度)是原信号傅里叶变换的平方

功率谱(密度)是针对随机信号分析提出的概念。(随机信号一定是功率信号)
对于功率信号,先求自相关,再做傅里叶变换,物理意义上就是功率谱。对应间接法求功率谱(见1.4)。
功率信号也可以先进行有限截断(变为能量信号),这样才可以做 FFT。再对 FFT 幅值做平方,对应直接法求功率谱(见1.4)。

1を要約すると:
概念的な理解

スペクトル密度: 自動およびクロススペクトル
スペクトル解析 : クロススペクトル密度
スペクトル密度の推定: 推定が必要な理由。非定常信号はありますか?

参考資料:
信号の周波数領域解析手法の理解(スペクトル、エネルギースペクトル、パワースペクトル、ケプストラム、ウェーブレット解析)
フーリエ解析とウェーブレット解析の関係を一般的に説明するにはどうすればよいでしょうか?

1.3 信号(時間遅延)の相関

(さまざまなカテゴリの信号の自己相関関数)
(周期性、さまざまなカテゴリの信号の区別、局所相関などの相関関数の説明)

関連解析: 時間領域の畳み込み、周波数領域の
積 振幅変調: 時間領域の積、周波数領域の畳み込み

関連機能ここに画像の説明を挿入します
ここに画像の説明を挿入します

相関係数ここに画像の説明を挿入します

応用:

  1. タイムシフト測距 – レーダー; タイムシフト → 位相シフトfdt fdtfdt _
  2. ノイズ信号の自己相関関数は時間シフトの増加とともに急速に減少するため
    、周期信号を測定する場合、工学的には相関フィルタリングと呼ばれる自己相関または相互相関によってランダムノイズを除去できます。

ホワイトノイズ以外の特徴的な周波数がある場合、対象となる周波数を抽出してから相関分析を行う必要がありますか?

参考資料:
matlab 関数 xcorr を使用して信号の相関分析を実行する (不偏推定パラメーターが追加される理由を含む)
信号の相関分析 | 相関係数 + 相関関数 + 相関定理
自己相関と相互相関

1.4 パワースペクトル密度 PSD 推定方法

パワースペクトル密度 PSD : 単位周波数帯域内の信号パワー。パワースペクトルは、FFTで得られるスペクトルと比較すると、スペクトルの位相情報が失われています。
スペクトル密度推定の実現方法直接法(周期法)間接法(自己相関関数法);系列または推定した自己相関関数に窓処理を加えたもので、前者をデータ窓、後者をラグ窓と呼びます。[2]

  • 直接法: ランダムシーケンスx ( n ) x(n)x ( n )NNN 個の観測データをエネルギーが限られた系列とみなし、x ( n ) x(n)x ( n )を離散フーリエ変換するX ( k ) X(k)X ( k )、その大きさを 2 乗してNNN、シーケンスとしてx ( n ) x(n)x ( n )の真のパワー スペクトルの推定値
  • 間接法: 最初にシーケンスx ( n ) x(n)を使用します。x ( n )は自己相関関数R ( n ) R(n)R(n) ,然后对 R ( n ) R(n) R ( n )に対してフーリエ変換を実行して、 x ( n ) x(n)を取得します。x ( n )のパワー スペクトル推定パワー スペクトルと自己相関関数はフーリエ変換のペアです。-- ウィーナー・ヒンヘンの定理

原理的には違いはないようですが、MATLABのシミュレーション結果から判断すると、相関関数法の方がノイズ抑制効果が高く、グラフも滑らかです。2
(スペクトル推定: グラフによる説明と公式の証明)

方法の改善:
Bartlett の平均周期図法はNNを変換することですNx ( n ) x(n)x ( n ) のピリオドグラムを区分的に求め
Welch の方法は、Bartlett の方法を次の 2 つの側面で修正しました: Welch の重複セグメント平均スペクトル推定

  • 1 つは、適切なウィンドウ関数 w ( n ) w(n)を選択することです。w ( n )を計算し、ピリオドグラム計算の直前に追加します。ウィンドウを追加する利点は、どのような種類のウィンドウ関数であっても、スペクトル推定を非負 (?) にできることです
  • 第 2 に、セグメント化するときにセグメント間に重複が生じる可能性があり、これにより分散が減少します [3]。

psepctrum/Signal Analyzer APP では、セグメント全体の分析によって得られる分解能が達成できない場合、APP はウェルチ ピリオドグラムを計算します。[6]

利用可能な参考資料:
周波数領域の固有値抽出のための MATLAB コード実装 (スペクトル、パワー スペクトル、ケプストラム)

1.5 窓関数とスペクトル漏れ

(窓関数: グラフィック表現と数式表現。)

(窓関数の形状と長さはどのように選択しますか?)
(窓処理と信号の有限長の関係は何ですか?)
周波数分解能スペクトル漏洩は、それぞれ窓付き周波数変換におけるメイン ローブサイド ローブの幅に対応します。分解能が高いほどスペクトルも良くなり、漏れも大きくなりますたとえば、長方形のウィンドウはメインバンドが最も狭く、サイドバンド(?)が最も高く、非常に近く、同様のエネルギーを持つ 2 つの周波数成分を区別できますが、より弱い信号は検出できません。[5]

β=5.7 | kaiser(l,beta)、つまり l=1-(β/40)=0.8575 | pspetrum(...,'Leakage',l) の場合、Kaiser ウィンドウは Hann ウィンドウと似ています。 l=1、つまり β=0 の場合、カイザー ウィンドウは長方形ウィンドウに相当します。[5]

※窓関数とスペクトル漏れ(?)を理解する
「窓の波形図を見ると、窓自体がメインローブといくつかのサイドローブを持つ連続スペクトルであることがわかります。メインローブは時間の周波数成分の中心です」ドメイン信号であり、サイド ローブは 0 に近いです。サイド ローブの高さは、メイン ローブの周囲の周波数に対する窓関数の効果を示しています。強い正弦波信号に対するサイド ローブの応答は、より近い信号に対するメイン ローブの応答を超える場合があります。弱い正弦波信号 (つまり、スペクトル漏れ)。一般に、サイド ローブが低いと FFT の漏れが減少しますが、メイン ローブの帯域幅が増加します。サイド ローブの低下率は、サイド ローブ ピークの緩やかな減衰率です。サイドローブのドロップ率を増やすと、スペクトルの漏れを減らすことができます。

「ハミング ウィンドウとハニング ウィンドウはどちらも正弦波の形状をしています。両方のウィンドウは、広いピークと低いサイド ローブの結果を生成します。ハニング ウィンドウはウィンドウの両端が 0 で、すべての不連続性が排除されます。ハミング ウィンドウは 0 です。ハミング ウィンドウは、最も近いサイド ローブを減らすのには適していますが、他のサイド ローブを減らすのは苦手です。ハミング ウィンドウとハニングは、適切です。より高い周波数精度とより低いサイドローブを必要とするノイズの測定。」

2. Matlab が信号コードを生成する

2.1 信号の種類

200 kHz で 0.1 秒間サンプリングされた、3 つのノイズのある正弦波と 1 つのチャープで構成される信号を作成します。正弦波の周波数は、1 kHz、10 kHz、および 20 kHz です。正弦波の振幅とノイズ レベルは異なります。ノイズのないチャープには、 20 kHz から始まり、サンプリング中に 30 kHz まで直線的に増加する周波数 [1]
注: 行列乗算は、さまざまな周波数成分を持つ信号を重み付けするために使用され、コードはシンプルで明確です。
Fs = 200e3;
Fc = [1 10 20]' 1e3;
Ns = 0.1
Fs;

t = (0:Ns-1)/Fs;
x = [1 1/10 10] sin(2 pi Fc t)+[1/200 1/2000 1/20]*randn(3,Ns);
x = x+chirp(t,20e3,t(end),30e3);

2.2 データ型 (SignalAnalyzer APP の場合)

2.2.1 表

期間配列

時刻表配列

table2timetable
array2timetable = array2table + table2timetable

時系列オブジェクト

ラベル付きSignalSet オブジェクト

stackedplot (共通の x 軸を持つ複数の変数の積み上げプロット) R2023a

2.2.2 グループ

3. シグナルアナライザーアプリ

3.1 SignalAnalyzer APP ワークフロー: [4]

解析する信号の選択 - MATLAB® ワークスペースで使用可能な信号を選択します。このアプリは、MATLAB timetable 配列、timeseries オブジェクト、labeledSignalSet オブジェクトなど、固有の時間情報を持つ数値配列と信号を受け入れます。詳細については、「信号アナライザーでサポートされるデータ型」を参照してください。サンプル レート、数値ベクトル、持続時間配列、または MATLAB 式を使用して、信号にタイミング情報を追加します。

信号の前処理-切り捨て、クリッピング、またはクロッピング操作を使用して信号を編集します。ローパス、ハイパス、バンドパス、またはバンドストップフィルター信号。トレンドを除去し、信号エンベロープを計算します。移動平均、回帰、Savitzky-Golay フィルター、またはその他の方法を使用して信号を平滑化しますウェーブレットを使用して信号のノイズを除去します信号のサンプル レートを変更するか、不均一にサンプリングされた信号を均一なグリッド上に内挿します ( resample )。独自のカスタム関数を使用して信号を前処理します。MATLAB 関数を生成して前処理操作を自動化します。

信号のプローブ- データ、そのスペクトル、スペクトログラム、またはスケール プロットをプロット、測定、比較します。時間領域、周波数領域、時間-周波数領域の特性とパターンを見つけます。持続スペクトルを計算して頻度の低い信号を分析し、再配置を使用してスペクトログラム推定値を鮮明にします。信号から関心のある領域を抽出します。時間領域で信号統計 (最小値、最大値、平均値、rms 値など) を測定します。

分析の共有- 表示をアプリからクリップボードに画像としてコピーします。信号を MATLAB ワークスペースにエクスポートするか、MAT ファイルに保存します。MATLAB スクリプトを生成して、パワー スペクトル、スペクトログラム、または永続スペクトル推定を自動的に計算し、関心領域を自動的に抽出します。信号アナライザー セッションを保存して、後でまたは別のマシンで分析を続行します。

美しく整理されたチュートリアル Web ページ[7]

3.2 spectrogram.m と pspectrum('spectrogram') の比較

(2 つの関数によって描画されるスペクトログラムの違い)適切なベータ | 漏れを選択し、カイザー ウィンドウ ~ ハン/ハニング ウィンドウを作成し、適切な周波数解像度を指定します。pspectrum はスペクトログラムと同様の結果を得ることができます。pspectrum での TimeResolution の指定では
その逆も同様です。
望ましい結果が得られませんでした (pspectrum で表示される時間解像度はオーバーラップの変化とは無関係であり、オーバーラップがゼロの状況に近いです。そのため、時間解像度を指定する場合は、ウィンドウの結果を直接使用する必要があります) (window-noverlap)/fs) ではなく /fs)、なぜですか? 周波数と時間分解能を指定するための pspectrum の操作の違いは何ですか? Signal Analyzer で周波数分解能を変更するオプションがない場合はどうなりますか? – RWB の説明と詳細な処理については、ヘルプ ドキュメント [5] を参照してください。このドキュメントは @2022/8/26 にしばらく保留されます。
同じような解像度と窓関数があるのに、得られるパワー値が異なるのはなぜですか? スペクトログラムに表示されるのは dB/Hz (「spectrumtype」のデフォルトは「psd」 - パワー スペクトル密度ですが、「power」 - パワーに設定することもできます)、pspectrum で表示されるのは dB です。
再割り当てされたスペクトログラムの時間周波数推定をシャープにする 3 つの方法
: pspectrum(“reassign”)
シンクロスクイーズド変換: fsst ifsst
クロス スペクトログラム: xspectrogram
COMPARE fsst & pspectrum('Reassign',true)/spectrogram('reassigned') (同期圧縮と再割り当て)
fsst は逆変換してパターンを再構成できます - 再割り当てされたスペクトログラムとは異なり、シンクロスクイーズド変換は可逆であるため、個々のパターンを再構成できます。 fsst
ウィンドウの長さとタイプ (ウィンドウ) のみを調整できますが、オーバーラップ ポイントと DFT ポイント (noverlap と nfft) を調整することはできません。この制限は、逆変換を実行できるようにするためのものです。[10]
DFT ポイントの数は、指定されたウィンドウの長さと同じです。
隣接するウィンドウ セグメント間のオーバーラップは、ウィンドウの長さより 1 少ない値です。
再割り当ては周波数に対してのみ実行されます。
スペクトログラム(sig,kaiser(256,10),255,256,fs);

3.3 COMPARE 持続スペクトル & スペクトログラム (持続スペクトルとスペク​​トログラム)

persistence spectrum 只存在于 SignalAnalyzer 或等价函数 pspectrum 中,persistence spectrum 与 spectrogram 都是 STFT 的图像显示, 只是图像显示方式不同.
STFT对每一帧的时间序列进行 fft.
spectrogram 用热力图来表达, 横坐标表示该帧对应的时间, 纵坐标表示频率, 颜色表示该帧,该频率下的power(dB).(缺点: 1 时间分辨率, 频率分辨率受"测不准定理"的限制. 2 很多人对相近颜色的区别不是太敏感.)
persistence spectrum 可以理解为对每一帧的频谱线进行了重叠, 即很多个频谱画在了一张图上, 然后对图形进行离散化, 从而可以看出哪些部位重叠度比较高. 最后也是热力图.横坐标表示频率, 纵坐标表示power (dB), 颜色表示重叠的比例(0-100%). 虽然是热力图, 但是可以清晰的看到一条一条"频谱线", 特别是当帧的数量不是很多时.(优点:可以清晰看到由哪些局部信号构成,比靠颜色来分辨 power(dB)直观的多;不足:却无法得知这些"频谱线"的先后顺序.)
spectrogram(STFT) & scalogram(cwt) (频谱图 和 尺度图)
cwt 结果:高频部分低 Fres 高 Tres,低频部分高 Fres 低 Tres
暂时搁置@2022/8/26

四、Matlab 信号预处理

五、Matlab 相关分析

六、Matlab 谱分析

3.1 总表和简单介绍

相关、频谱、互谱、功率谱

FUNCTION FUNCTION of FUNCTION COMMENT
fft 快速傅里叶变换 (Fast Fourier transform) 频谱
Xcorr 相互相関
mscohere (マグニチュード二乗コヒーレンス) ? クシー
CSD クロススペクトル密度 csd は CPSD に置き換えられました。
psd パワースペクトル密度 psd は非推奨になっています。代わりに PERIODOGRAM または PWELCH を使用してください。)
CPSD クロスパワースペクトル密度 CPSD はトレンド除去をサポートしていません。シグナルのトレンドを除去する必要がある場合は、DETREND 関数を使用してください。
プエルチ ウェルチのパワースペクトル密度推定

統計概念の違いに注意してください

関数 機能の機能 コメント
xcov 相互共分散()
間違っています ピアソン相関係数 = 2 つの変数の共分散の積を標準偏差で割ったもの。3

時間スペクトル

非定常信号は、周波数成分が時間とともに変化する信号です。
非定常信号のスペクトログラムは、その周波数成分の時間発展の推定値であり、高速フーリエ変換 (STFT) または連続ウェーブレット変換を使用して取得する必要があります。
STFT 関連関数:
spectrogram: 短時間フーリエ変換を使用したスペクトログラム
xspectrogram: 短時間フーリエ変換を使用したクロス スペクトログラム 出力結果には、相互相関スペクトルの強度情報のみが含まれ、位相情報は含まれません (位相情報が必要な場合)。 、独自のプログラムを作成する必要があります pspectrum:
周波数領域および時間-周波数領域で信号を分析します。選択できるさまざまな「モード」があります。SignalAnalyzer APP と同等の機能はどれですか。 fsst
: フーリエ シンクロスクイーズド変換 フーリエ シンクロスクイーズド変換?
tfridge: 時間-周波数リッジ

2.4 スペクトル推定相関関数

2.5 その他の機能

pow2db: Convert power to decibels
downsample: Decrease sample rate by integer factor

2.6 共通入力変数の設定

2.6.1 相関関係の計算

window
noverlap
nfft

ウィンドウを追加する前の分解能の計算式:
fs サンプリング レート (1 秒間の取得ポイント数)
N FFT に一度に入力されるサンプリング ポイントの数 (nfft に相当)
T = N/fs サンプリング時間 (デフォルト)ここのウィンドウは選択した時間全体をカバーします)
dt = 1/ fs 時間分解能 (t = (0:N-1) dt = 0:(1/fs):(T-1/fs))
df = 1/T = 1 /(N
dt) = fs/N 周波数分解能 レート (f = (0:N-1) df = (0:N-1) (fs/N) = 0:(1/T):(fs-1/ T))、インデックス 1 に対応する周波数セグメント 0:fre を選択します: fre/df = 1:fre T
dt
df = 1/N
ウィンドウ解像度の計算式 [9]:
df = fs/nfft
は [nfft/2] に対応しますまたは [nfft/2+1] 周波数
dt = (t(end)-t(1))/((length(x)-noverlap)/(window-noverlap)/(window-noverlap)) = (window-noverlap)/fs は [ に対応します。 (length(x)-noverlap)/(
window -noverlap)] 時間ビン
注: 上記の t は、元の t ではなく、スペクトログラムの出力です
パラメータ選択の概要:
周波数分解能に影響します: nfft、ウィンドウ形状/リーク、ゼロ パディング(?)
時間解像度に影響します: ウィンドウ幅、ノーバーラップ、選択したウィンドウはほぼ定常信号になる可能性があります、ウィンドウ ノーオーバーラップは最終的なレンダリング効果に影響します % fs
= 1e6
% nfft = 1024 8
% nT = nfft/fs
% window = 1024
8
% noverlap = round(window*0.9)
%
% df = fs/nfft
% dt = 1/fs
% dwt = (window - noverlap)/fs
% dwtno = window/fs

2.6.2 表示関連

w
f
fs
freqrange
trace    'mean'(默认)'minhold' or 'maxhold' 分别对应各片段(segments) 功率谱估计的的平均值、最小值和最大值

私のオリジナルメモ: スペクトル推定手法と MATLAB 実装
参考文献
[1] C:\Users\User\Documents\MATLAB\Examples\R2020b\signal\WelchSpectrumEstimatesExample\WelchSpectrumEstimatesExample.mlx
[2] MATLAB デジタル信号処理 (1) 4 つの古典の比較パワー スペクトル推定方法_FPGADesigner のブログ - CSDN ブログ_デジタル信号パワー スペクトル
[3] Matlab による古典的なパワー スペクトル解析と推定の実装_MissXy_ のブログ - CSDN ブログ_MATLAB パワー スペクトル
[4]信号アナライザの使用 - MATLAB & Simulink - MathWorks China
[5] pspectrum matlab ヘルプ ドキュメント
[6] ]信号アナライザーでのスペクトル図計算 - MATLAB & Simulink - MathWorks China
[7] Matlab Signal Analyzer 信号解析 | Yinghuo (jychen.cn) - 教育ネットワークのようです
[8]信号周波数領域解析方法 (スペクトル) を理解することだけを開く、エネルギー スペクトル、パワー スペクトル、ケプストラム、ウェーブレット解析) - Zhihu (zhihu.com) [9] スペクトログラム
matlabヘルプ ドキュメント
[10] fsst matlab ヘルプ ドキュメント


  1. Matlab Signal Analyzer 信号解析 | Yinghuo (jychen.cn) - 開くには教育ネットワークが必要なようです ↩︎

  2. 周波数領域特徴量抽出(スペクトル、パワースペクトル、ケプストラム)のMATLABコード実装 ↩︎

  3. ピアソン相関係数と Matlab corr()、corrcoef()シミュレーションについての深い理解↩︎

おすすめ

転載: blog.csdn.net/RainaRaina/article/details/132067333