Изменение единиц осей спектрограммы MATLAB - PullRequest
1 голос
/ 02 июня 2019

Как можно заставить единицы оси фигуры, сгенерированной spectrogram, всегда быть "s" (секунды) для оси x и "Hz" (Герц) для оси y?

Следующая спектрограмма может служить демонстратором. В этом примере они были автоматически настроены MATLAB на «mins» и «kHz».

t = 0:0.0001:200;
x = chirp(t,100,1,200,'quadratic');
spectrogram(x,128,120,128,2e3,'yaxis')

1 Ответ

2 голосов
/ 03 июня 2019

Функция spectrogram вызывает pspectrogram для выполнения фактической работы, а это, в свою очередь, вызывает engunits, чтобы определить «технические единицы», подходящие для вашего сигнала.Очевидно, spectrogram не имеет опции ввода, чтобы избежать преобразования единиц.

Поэтому, похоже, наилучшим способом является получение фактических значений spectrogram и построение изображения самостоятельно, без преобразования единиц:

[~,F,T,P] = spectrogram(x,128,120,128,2e3,'yaxis');
imagesc(T, F, 10*log10(P+eps)) % add eps like pspectrogram does
axis xy
ylabel('Frequency (Hz)')
xlabel('Time (s)')
h = colorbar;
h.Label.String = 'Power/frequency (dB/Hz)';
  • Изображение, сгенерированное исходным кодом :

    enter image description here

  • Изображение получено с кодом выше :

    enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...