使用 GUIDE 脚本打印频谱图

Printing the spectrogram with a GUIDE script

你能帮我看看为什么这段代码不起作用吗?

freq = 440;
samples = 0:1/44100:1.4;
x = sin(2*pi*freq*samples);
axes(handles.uipanel1);

spectrogram(x,'yaxis');

我想在特定的 UIpanel 中打印(以某种方式)频谱图,但我无法做到。此代码在单独的 .m 文件中运行良好,但在我的 GUIDE 脚本中运行不正常 - 显示空标准图和错误:"Struct contents reference from a non-struct array object."

此外,我想独立打印此频谱图 - 不是通过任何类型的按钮,只是在开始时打印。它应该分配给任何类型的 uipanel1_Callback 或 OpeningFcn 吗?

问题是 spectrogram 函数需要图形工具栏可见,因为它试图获取 3D 旋转工具的句柄。它检查工具是否确实存在,这会导致您的错误。

hRotate = uigettool(ancestor(h,'Figure'),'Exploration.Rotate');
if strcmp(hRotate.State,'off')

在我看来,这是 MATLAB 中的一个错误。

您的选择是:

  1. 将标准图形工具栏添加到您的 GUI。您可以在 OpeningFcn 中以编程方式执行此操作,以便 spectrogram 可以找到它

    set(handles.hfig, 'Toolbar', 'figure')
    

    或者您可以添加工具栏using GUIDE

  2. 调用spectrogram前临时添加模拟旋转工具的工具,调用spectrogram

    后删除
    htoolbar = uitoolbar('Parent', ancestor(hObject, 'figure'));
    uitoggletool('Parent', htoolbar, 'Tag', 'Exploration.Rotate', 'State', 'off');
    
    spectrogram(...)
    
    % Delete the toolbar
    delete(htoolbar)