# How can I force the time-axis unit of spectrogram to be 'second(s)' ?

18 ビュー (過去 30 日間)
zhehao.nkd 2021 年 5 月 25 日
コメント済み: zhehao.nkd 2021 年 5 月 31 日
When I use the spectrogram function (https://www.mathworks.com/help/signal/ref/spectrogram.html) , I find that depends on the time duration of the y data, the time-axis units are dynamic, shifting between 'second(s)' and 'milisecond(s)'. So is it possible to force the unit to be 'second(s)'?
##### 2 件のコメント表示 1 件の古いコメント非表示 1 件の古いコメント
zhehao.nkd 2021 年 5 月 26 日
Sorry for my vague description. I am referring to the plot generated by function spectrogram without defining the output.
For example,
fs = 32000;
y1 = wgn(1*fs,1,1);
y2 = wgn(2*fs,1,1);
figure;
subplot(2,1,1)
spectrogram(y1,hamming(512),512-round(fs/1e3),512,fs,'yaxis');
subplot(2,1,2)
spectrogram(y2,hamming(512),512-round(fs/1e3),512,fs,'yaxis');
This two subplots will have different time units as ms and s. So how can I force the unit to be s?

サインインしてコメントする。

### 採用された回答

Adam Danz 2021 年 5 月 26 日

I don't know whether there's an input to spectrogram that could solve this but here's how to fix the labels after the plots are created.
You could detect whether the x-axis is in seconds or ms by the xlabel;
if strcmpi(ax1.XLabel.String, 'Time (ms)')
ax1.XTickLabels = compose('%.1f',ax1.XTick/1000); % set tick labels
xlabel(ax1, 'Time (s)') % set axis label
end
P1=[10,-1];
fs = 32000;
y1 = wgn(1*fs,1,1);
y2 = wgn(2*fs,1,1);
figure;
ax1 = subplot(2,1,1); % get handle
spectrogram(y1,hamming(512),512-round(fs/1e3),512,fs,'yaxis');
subplot(2,1,2)
spectrogram(y2,hamming(512),512-round(fs/1e3),512,fs,'yaxis');
ax1.XTickLabels = compose('%.1f',ax1.XTick/1000); % set tick labels
xlabel(ax1, 'Time (s)') % set axis label ##### 1 件のコメント表示 なし非表示 なし
zhehao.nkd 2021 年 5 月 31 日
Thank you! It's a great solution.

サインインしてコメントする。

### カテゴリ

Find more on Axis Labels in Help Center and File Exchange

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!