0

我的任务
是 .wav 格式的信号,采样频率为 44100Hz。我想得到它的功率谱。我想用大小为 200ms 且窗口周期为 50Hz 的 Hann 窗口来做 STFT。我强制的频率范围是 0 ~ 22000Hz。

我的问题
我可以用下面的代码得到我想要的吗?

[y, Fs, nbits, opts] = wavread('a.wav');
[S,F,T,P]=spectrogram(y,hanning(8820),7938,[0:100:22000],Fs);

上面代码返回的矩阵 P 就是我想要的,对吗?

进一步的问题

  1. 窗口大小与其FFT大小有什么关系?我通过他们过去是独立的,但我不确定。任何人都可以提供一个简单的答案或一些参考读物?
  2. 我有一个命令 specgram(x, 512, 8000, hamming(80)); --- 我猜最初的目的是:
    信号采样频率:8000
    窗口 nfft:1024
    窗口周期:10ms
    其实我并不确定这段代码的最初目的,任何人都可以阅读它吗?
4

1 回答 1

2

我认为您没有正确格式化频谱图代码。

命令如下

 [S,F,T,P] = spectrogram(X,WINDOW,NOVERLAP,NFFT,Fs)

X你的数据在哪里,WINDOW你的汉宁窗口NOVERLAP是什么,你的窗口跳跃NFFT是什么,你的 FFT 大小Fs是数据的采样率。有了这个你会想要

 NFFT = 2^nextpow2(Fs*200/1000);
 spectrogram(y,hanning(NFFT),Fs/50,NFFT,Fs);

所以你的汉宁窗口是多少样本在 200 毫秒内,这取决于你的采样率。

这应该按照您的意愿窗口化,并为您提供所需的频谱图,然后您可以随心所欲地使用它。

至于是否P是你想要的问题。是的,这将返回功率谱。如果那是你想要的,那当然。

于 2013-07-25T14:29:49.357 回答