Сравните содержимое частоты двух сигналов

Спектральная когерентность помогает идентифицировать подобие между сигналами в частотном диапазоне. Большие значения указывают на частотные составляющие, характерные для сигналов.

Загрузите два звуковых сигнала в рабочую область. Они производятся на уровне 1 кГц. Вычислите их спектры мощности с помощью 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. Axes 1 with title Power Spectrum contains an object of type line. Axes 2 contains an object of type line.

Каждый сигнал имеет три частотных составляющие со значительной энергией. Два из тех компонентов, кажется, совместно используются. Найдите соответствующие частоты с помощью 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 и 35 Гц. Можно использовать mscohere найти соответствующие частоты непосредственно. Постройте оценку когерентности. Найдите peaks выше порога 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. The axes with title Coherence Estimate contains an object of type line.

Вы получаете те же значения как прежде. Можно найти содержимое частоты характерным для двух сигналов, не изучая два сигнала отдельно.

Смотрите также

| |

Похожие темы