这是确定特定大小的频谱图时确定信号长度的一种方法

时间:2020-09-12 20:45:10

标签: matlab image-processing signal-processing fft spectrogram

是否可以确定用于创建用户指定尺寸x*y的频谱图的信号长度和窗口大小?例如,为了创建大小为100*100的频谱图,信号的长度为N=80050w = 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*4050*50等?

1 个答案:

答案 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).