在matlab中编程(如何实时处理)

Rav*_*ave 3 matlab

我想在matlab中制作一个频谱图,这是我的代码:

% Record your voice for 100 seconds.
recObj = audiorecorder;
disp('Start speaking.')
recordblocking(recObj, 100);

% Store data in double-precision array.
my= getaudiodata(recObj);
figure;
specgram(my,512);
Run Code Online (Sandbox Code Playgroud)

问题是,虽然我说我想要显示频谱图,所以它应该在我说话时更新.当音频来自麦克风时,如何绘制频谱图?所以我应该能够实时看到频谱图

我也尝试过这个

% Record your voice for 100 seconds.
recObj = audiorecorder;
disp('Start speaking.')
a=0;
figure;
while a<60
    recordblocking(recObj, 100);

    % Store data in double-precision array.
    my= getaudiodata(recObj);

    specgram(my,512);
    a=a+1;
end
Run Code Online (Sandbox Code Playgroud)

但它只会在while循环钓鱼时显示频谱图(因此在运行60次后)

Mat*_* B. 6

MATLAB本质上是单线程的.一次只能发生一件事.这使得实时任务有些困难.如您所述,recordblocking在100秒过去之前,不会将控制权返回给您的脚本.关键在于阻止这个词.

解决这个问题的方法是使用回调和非阻塞函数.audiorecorder对象有一些方法和属性可以实现这种行为.

audiorecorder属性:
- StartFcn:设置将在启动的异步记录执行功能
- StopFcn:在停止记录所要执行的功能
- TimerFcn:该功能将被执行的每TimerPeriod秒的记录期间.

然后该record方法将在后台开始记录和处理,按照指示调用上述功能.

通过定期更新回调函数中的数据,您可以更新您的绘图.不幸的是,以允许实时更新的有效方式做同样不容易.但这应该让你开始.