Main Content

複素チャープの瞬時周波数

この例では、フーリエ シンクロスクイーズド変換を使用して、信号の瞬時周波数を計算する方法を示します。

正弦関数的に変化する周波数成分をもつチャープを生成します。信号はホワイト ガウス ノイズに組み込まれ、3 kHz で 1 秒間サンプリングされます。

fs = 3000;
t = 0:1/fs:1-1/fs;

x = exp(2j*pi*100*cos(2*pi*2*t)) + randn(size(t))/100;

信号のフーリエ シンクロスクイーズド変換を計算し、プロットします。時間が x 軸に、周波数が y 軸に表示されます。

fsst(x,fs,'yaxis')

Figure contains an axes object. The axes object with title Fourier Synchrosqueezed Transform contains an object of type image.

信号の瞬時周波数を求めるために、フーリエ シンクロスクイーズド変換の最大エネルギーの時間-周波数リッジを抽出します。

[sst,f,tfs] = fsst(x,fs);

fridge = tfridge(sst,f);

リッジを変換プロットに重ね合わせます。時間をミリ秒に、周波数を kHz に変換します。

hold on
plot(t*1000,fridge/1000,'r')
hold off

Figure contains an axes object. The axes object with title Fourier Synchrosqueezed Transform contains 2 objects of type image, line.

実信号の場合、関数 instfreq を使用して瞬時周波数をより簡単に検出できます。たとえば、解析信号を計算し、その位相を微分することで複素チャープの実数部の瞬時周波数を表示します。

ax = real(x);

instfreq(ax,fs,'Method','hilbert')

Figure contains an axes object. The axes object with title Instantaneous Frequency Estimate contains an object of type line.

参考

| | | | |

関連するトピック