实时频谱图分析
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
我正在尝试执行实时声音分析。目前我能够获得频谱的实时流,但是当我尝试绘制频谱图时,即使我尝试减少计算,它也会引入大约 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