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

Is ther a way to determine Length of signal in computing the spectrogram for a specific size

有没有办法确定信号的长度和 window 应该用于创建用户指定维度 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 和 window 大小 w 以生成不同维度的不同频谱图,例如 40*4050*50 等?

除了信号和 window 长度之外,您可以使用的另一个调谐旋钮是频谱图分析中连续段之间的步长(或“跳变”),它也影响输出帧数被计算。在 Matlab's spectrogram function 中,步骤由 noverlap arg 确定,与 noverlap = w - step 相关。 对于信号长度N、window、长度w、步长step,频谱图中的帧(列)数为

# frames = floor((N - w) / step) + 1

(例如,如果 N == w 则为一帧;如果 N == w + step 则为两帧;等等)

在另一个维度上,频谱图中的频率数与 FFT 大小参数有关,nfft。实信号的频谱具有复共轭(厄米特)对称性,因此大约一半的区间是冗余的。冗余箱通常被排除在频谱图中。假设这样做了,频谱图中的频率(行)数是

# frequencies = floor(nfft / 2) + 1

要生成特定大小的频谱图,我们可以将上述公式逆向计算为

N = w + ((# frames) - 1) * step,
nfft = 2 * ((# frequencies) - 1).