实时频谱图分析

Real time spectrogram analysis

我正在尝试执行实时声音分析。目前我能够获得频谱的实时流,但是当我尝试绘制频谱图时,即使我尝试减少计算,它也会引入大约 4 秒的延迟。

我想知道是否有一种方法可以更快地绘制频谱图(至于绘制数据,更新轴而不是更新图)。

目前我正在使用一个包含 1024 个样本的输入缓冲区:

Spectrogram(audio, 256, round(256/2), 256, 1800)

我试着减小 window 尺寸和 NFFT 但结果总是一样。

尝试为频谱图的每次更新设置图像 CData(参见下面的示例代码)。如果您可以足够快地计算您的频谱图,这应该不会导致长时间的延迟。通过仅调用没有输出的频谱图来生成新图像实际上可能会导致延迟。

您可以使用

tic
S=Spectrogram(audio, 256, round(256/2), 256, 1800);
toc

看看每次计算需要多长时间,但我怀疑这会在足够的时间内计算出来,而你的瓶颈是整个图形的生成,当你调用没有输出的频谱图时。

figure
audio=randn(1024,1);
[S,F,T]=spectrogram(audio,256,round(256/2),256,1800);
im=image(F,T,abs(S).^2);

for i=1:100
    audio=randn(1024,1);
    S=spectrogram(audio,256,round(256/2),256,1800);
    set(im,'CData',abs(S).^2);
    pause(1/30);
end