Main Content

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

2 つの信号の周波数成分の比較

スペクトル コヒーレンスは、周波数領域の信号間の類似性を識別するのに役立ちます。値が大きい場合は、信号に共通の周波数成分があることを示します。

2 つの音声信号をワークスペースに読み込みます。これらは 1 kHz でサンプリングされています。periodogram を使用してパワー スペクトルを計算し、隣り合わせてプロットします。

load relatedsig

Fs = FsSig;

[P1,f1] = periodogram(sig1,[],[],Fs,'power');
[P2,f2] = periodogram(sig2,[],[],Fs,'power');

subplot(2,1,1)
plot(f1,P1,'k')
grid
ylabel('P_1')
title('Power Spectrum')

subplot(2,1,2)
plot(f2,P2,'r')
grid
ylabel('P_2')
xlabel('Frequency (Hz)')

Figure contains 2 axes objects. Axes object 1 with title Power Spectrum, ylabel P_1 contains an object of type line. Axes object 2 with xlabel Frequency (Hz), ylabel P_2 contains an object of type line.

各信号には大きなエネルギーをもつ 3 つの周波数成分があります。これらの成分のうち、2 つは共有されているようです。関数 findpeaks を使用して一致する周波数を求めます。

[pk1,lc1] = findpeaks(P1,'SortStr','descend','NPeaks',3);
P1peakFreqs = f1(lc1)
P1peakFreqs = 3×1

  165.0391
   35.1562
   94.7266

[pk2,lc2] = findpeaks(P2,'SortStr','descend','NPeaks',3);
P2peakFreqs = f2(lc2)
P2peakFreqs = 3×1

  165.0391
   35.1562
  134.7656

共通の成分は 165 Hz と 35 Hz の辺りにあります。mscohere を使用して、一致する周波数を直接求めることができます。コヒーレンス推定をプロットします。0.75 のしきい値より大きいピークを見つけます。

[Cxy,f] = mscohere(sig1,sig2,[],[],[],Fs);

thresh = 0.75;
[pks,locs] = findpeaks(Cxy,'MinPeakHeight',thresh);
MatchingFreqs = f(locs)
MatchingFreqs = 2×1

   35.1562
  164.0625

figure
plot(f,Cxy)
ax = gca;
grid
xlabel('Frequency (Hz)')
title('Coherence Estimate')
ax.XTick = MatchingFreqs;
ax.YTick = thresh;
axis([0 200 0 1])

Figure contains an axes object. The axes object with title Coherence Estimate, xlabel Frequency (Hz) contains an object of type line.

前と同じ値が得られます。2 つの信号を別々に調べなくても、それらに共通の周波数成分を求めることができます。

参考

| |

関連するトピック