MATLAB中解释频谱图中的S和P

3

我一直在努力更好地理解MATLAB的spectrogram()的以下用法:

[S,F,T,P] = spectrogram(x,window,noverlap,f,fs)

假设x是实数。据我了解,Px的PSD估计值(相当于使用pwelch()?),而S的列是沿着x的汉明窗口的STFT。 P似乎与S的幅度的平方根成比例关系。
这个比例因子从哪里来?PS的“单位”分别是什么?
2个回答

0

我查看了MATLAB文档中的spectrogram

但是,Spectrograms是二维函数,包括时间和频率。 S代表时间向量T的样本的DFT,相对于频率向量W上的频率。
由于使用了窗口,结果是窗口化时间样本。

P向量用于在相同的窗口化样本和频率上计算PSD(S的平方绝对值)。


我已经阅读了文档。对于我在问题中使用的spectrogram()特定形式,文档没有说明为什么P向量通常只与S的平方绝对值成比例而不是相等。 - Hackiisan
我从文档中复制了以下内容: [___,ps] = spectrogram(___) 也会返回一个矩阵 ps,其中包含每个小节的功率谱密度 (PSD) 或功率谱的估计。因为 PSD 需要整个信号 $ \left( - \infty, \infty \right) $,所以它是一种估计。 - Royi

0

正如您所提到的,S是窗口化x的STFT,而P是PSD。

P可以通过S计算得出。

您可以在这里找到计算背景。这里

下面的示例展示了如何从S计算P。

t = 0:0.001:2;
x = chirp(t,0,1,150); % 2 second chirp signal

nfft=256;

cFactor=0.3974; % Noise gain of hamming window

[S,F,T,P] = spectrogram(x,nfft,100,nfft,1e3); % S is STFT of hamming windowed signal

fbin=F(2)-F(1); %Frequency resolution

nS=(1/(2*(nfft/2+1)))*S; % normalizing by length of S

Pxx=2*(1/fbin)*(1/cFactor)*nS.*conj(nS);  %PSD of AC value

Pxx(1,:)=(1/fbin)*(1/cFactor)*nS(1,:).*conj(nS(1,:)); %PSD of DC value

这里,Pxx变量将与P变量相同。

您可以通过使用下面的图表来检查结果

figure(1)
subplot(2,1,1)
waterfall(F,T,P')
xlabel('frequency(Hz)')
ylabel('time(sec)')

figure(1)
subplot(2,1,2)
waterfall(F,T,real(Pxx)')
xlabel('frequency(Hz)')
ylabel('time(sec)')

Pwelch函数也可以给出功率谱密度(PSD),并且计算方法与谱图相同,除了在所有STFT上进行平均。

如果你使用Pwelch函数的方式与上面的例子相同,你会发现得到的是所有STFT段的平均图形。

请尝试使用相同的信号运行以下代码,看看Pwelch如何工作。

t = 0:0.001:2;
x = chirp(t,0,1,150); % 2 second chirp signal

nfft=256;
[P,F] = pwelch(x,nfft,100,nfft,1e3); 

figure(2)
plot(F,P)
xlabel('frequency(Hz)')

在图(2)中,您将看到图(1)瀑布图的平均图形。
关于S和P的单位,
S没有单位,因为DFT不关心单位。
P是每Hz时间信号有效值的平方。
如果时间信号单位为伏特(V),则P的单位为Vrms ^ 2 / Hz。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接