Дизайнер приложений Matlab, как изменить размер UIAx до того же размера изображения и вручную установить значения оси Y & X - PullRequest
0 голосов
/ 16 января 2019

Изначально я пытался создать спектограмму изначально в конструкторе приложений, однако мне сообщили, что это невозможно. Пожалуйста, дайте мне знать, если это так! У меня есть обходной путь, когда я сохраняю спектрограмму как изображение Я столкнулся с несколькими проблемами, связанными с настройкой uiAxes того же размера, что и изображение, а затем установкой оси данных на freq (x) и time (y) соответственно. Это то, что я до сих пор enter image description here и это то, чего я хочу достичь. enter image description here Я попытался определить размер изображения, используя [h, w, d] = size (Image), однако это просто возвращает 1,1,1. Я также понятия не имею, как установить ось на время и частоту соответственно и выровнять ее с изображением. Это мой код для генерации спектограммы

ax = uiaxes(app.UIFigure,"Position",app.UIAxes.Position);
[S,F,T] = spectrogram(y,256,200,256,app.fs);
z=imagesc(ax, T, F, log(abs(S'))); %plot the log spectrum`
[height,width,depth]=size(z)
ax.Position=[113,99,width,height];
 set(ax,'YDir', 'normal');
 plot(F,T);
colorbar(ax)

1 Ответ

0 голосов
/ 21 мая 2019

Поздний ответ, но да, вы можете построить спектрограмму в конструкторе приложений.

ниже приведен фрагмент кода, который я использовал.

[s,f,t] = spectrogram(app.Bx.Data,512,50,512,app.Frequency);
imagesc(app.UIAxesPSBx,t,f,log(abs(s)));
app.UIAxesPSBx.View = [90 90];
app.UIAxesPSBx.YLim = [0 (app.Frequency/2)];
app.UIAxesPSBx.YLabel.String = 'Frequency (Hz)';
app.UIAxesPSBx.XLim = [0 (app.DataLength/app.Frequency)];
app.UIAxesPSBx.XLabel.String = 'Time (UTC)';
colorbar(app.UIAxesPSBx, 'Color',[0.8 0.8 0.8]);

просто помните, что вы меняете угол обзора для осей пользовательского интерфейса, поэтому, если вы хотите изменить его на спектральную плотность мощности Уэлча, вам нужно изменить угол обзора, как показано ниже.

[pxx,f] = pwelch(app.Bx.Data,[],[],[],app.Frequency);
line(app.UIAxesPSBx,f,10*log10(pxx),'Color',[0.27 0.87 1], 'LineWidth',0.8);
app.UIAxesPSBx.View = [0 90];
app.UIAxesPSBx.YLimMode = 'auto';
app.UIAxesPSBx.XLimMode = 'auto';
colorbar(app.UIAxesPSBx,'off');
app.UIAxesPSBx.XLabel.String = 'Frequency (Hz)';
app.UIAxesPSBx.YLabel.String = 'Power/frequency (dB/Hz)';
...