是否可以确定用于创建用户指定尺寸x*y
的频谱图的信号长度和窗口大小?例如,为了创建大小为100*100
的频谱图,信号的长度为N=80050
和w = 80
。我已经用matlab产生了一个信号的频谱图:
N = 80050;
w = 80;
signal = randn(1,N);
spec=spectrogram(signal,w,0,256);
specto= spec(1:100,1:100);
specto_power=(20*log10(abs(specto)));
specMin_1 = min(specto_power(:));
specMax_1 = max(specto_power(:));
figure(1)
pcolor(specto_power)
caxis([specMin_1 specMax_1])
shading flat
pcolor(specto_power)
caxis([specMin_1 specMax_1])
shading flat
如何确定N
和窗口大小w
来生成不同尺寸的频谱图,例如40*40
,50*50
等?
答案 0 :(得分:2)
除信号和窗口长度外,另一个可用的调节旋钮是频谱图分析中连续段之间的步长(或“跳数”),这在计算多少帧输出中也起着一定作用。在Matlab's spectrogram function中,步骤由与noverlap
相关的noverlap = w - step
arg确定。
对于信号长度N
,窗口长度w
和步骤step
,频谱图中的帧(列)数为
# frames = floor((N - w) / step) + 1
(例如,如果N == w,则为一帧;如果N == w +步骤,则为两帧;等等)
在另一个维度上,频谱图中的频率数与FFT大小参数nfft
有关。实际信号的频谱具有复杂的共轭(Hermitian)对称性,因此大约一半的条带是多余的。通常将多余的条带从频谱图中排除。假设这样做,频谱图中的频率(行)数为
# frequencies = floor(nfft / 2) + 1
要生成特定大小的频谱图,我们可以将上述公式反推为
N = w + ((# frames) - 1) * step,
nfft = 2 * ((# frequencies) - 1).