使用 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 中的一个错误。
您的选择是:
将标准图形工具栏添加到您的 GUI。您可以在 OpeningFcn
中以编程方式执行此操作,以便 spectrogram
可以找到它
set(handles.hfig, 'Toolbar', 'figure')
或者您可以添加工具栏using GUIDE
调用spectrogram
前临时添加模拟旋转工具的工具,调用spectrogram
后删除
htoolbar = uitoolbar('Parent', ancestor(hObject, 'figure'));
uitoggletool('Parent', htoolbar, 'Tag', 'Exploration.Rotate', 'State', 'off');
spectrogram(...)
% Delete the toolbar
delete(htoolbar)
你能帮我看看为什么这段代码不起作用吗?
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 中的一个错误。
您的选择是:
将标准图形工具栏添加到您的 GUI。您可以在
OpeningFcn
中以编程方式执行此操作,以便spectrogram
可以找到它set(handles.hfig, 'Toolbar', 'figure')
或者您可以添加工具栏using GUIDE
调用
后删除spectrogram
前临时添加模拟旋转工具的工具,调用spectrogram
htoolbar = uitoolbar('Parent', ancestor(hObject, 'figure')); uitoggletool('Parent', htoolbar, 'Tag', 'Exploration.Rotate', 'State', 'off'); spectrogram(...) % Delete the toolbar delete(htoolbar)