Matlab 为什么光谱图';s结果矩阵没有所选窗口的长度?

Matlab 为什么光谱图';s结果矩阵没有所选窗口的长度?,matlab,Matlab,我正在学习音频处理技术,并一直在使用频谱图进行分析。现在,我认为光谱图的结果是一个M x N矩阵,其中M是窗口长度,N是窗口数。但是,spectrogram函数返回的矩阵长度与我预期的不同: data = [...]; % the data, a 1 x 9171 array wdw = 160; % window size overlap = 80; % window overlap numWindows = floor(length(data)/(wdw - overlap)) -

我正在学习音频处理技术,并一直在使用频谱图进行分析。现在,我认为光谱图的结果是一个M x N矩阵,其中M是窗口长度,N是窗口数。但是,spectrogram函数返回的矩阵长度与我预期的不同:

data = [...]; % the data, a 1 x 9171 array

wdw = 160; %  window size

overlap = 80; % window overlap

numWindows = floor(length(data)/(wdw - overlap)) - 1; % returns 113 as expected

nfft = 256; % fft size

Fs = 16000; % sample freq

s = spectrogram(data,hamming(wdw),overlap,nfft,Fs);

s返回的是129 x 113矩阵,而我期望的是160 x 113矩阵。有人知道为什么函数会截断每个窗口的长度吗?

我认为
S
不会返回您认为它返回的值。从文件中:

S的每一列都包含对短期、局部时间的估计 信号X的频率内容。时间在各列中增加 从左到右的S。频率沿行向下增加,开始 在0。如果X是长度为NX的复数信号,则S是具有 NFFT行和k=固定((NX-NOVERLAP)/(长度(窗口)-NOVERLAP))列。 对于实X,如果NFFT为偶数,则S有(NFFT/2+1)行,并且(NFFT+1)/2行 如果NFFT是奇数


129是256/2+1,这是您得到的。

我认为
S
不会返回您认为它返回的值。从文件中:

S的每一列都包含对短期、局部时间的估计 信号X的频率内容。时间在各列中增加 从左到右的S。频率沿行向下增加,开始 在0。如果X是长度为NX的复数信号,则S是具有 NFFT行和k=固定((NX-NOVERLAP)/(长度(窗口)-NOVERLAP))列。 对于实X,如果NFFT为偶数,则S有(NFFT/2+1)行,并且(NFFT+1)/2行 如果NFFT是奇数


129是256/2+1,这就是您得到的。

感谢您的洞察力!你为什么期望160呢?160正是你窗户的大小。由于这种大小和重叠,您可以得到数量等于113的“窗口”。对于每一个这样的“窗口”,你可以得到它的频率内容,用256点的“频率分辨率”表示。我已经有一段时间没有处理频谱了,但是,“除以二”业务可能与0轴周围的傅里叶频谱对称性有关。我想它将在每个窗口上执行
fft(windowArray)
,我知道
fft(X)
返回与
X
大小相同的数组,尽管正如你所指出的,它做的是
fft(X,n)
。我熟悉在寻找信号的单侧频谱时将频谱减半的方法。感谢您的洞察力!你为什么期望160呢?160正是你窗户的大小。由于这种大小和重叠,您可以得到数量等于113的“窗口”。对于每一个这样的“窗口”,你可以得到它的频率内容,用256点的“频率分辨率”表示。我已经有一段时间没有处理频谱了,但是,“除以二”业务可能与0轴周围的傅里叶频谱对称性有关。我想它将在每个窗口上执行
fft(windowArray)
,我知道
fft(X)
返回与
X
大小相同的数组,尽管正如你所指出的,它做的是
fft(X,n)
。我熟悉在找到信号的单侧频谱时将频谱减半的方法。