2017-01-08 2 views
0

Я хотел бы знать, можно ли настроить график, сгенерированный функцией spectrogram MATLAB, таким образом, чтобы его ось X не представляла время, а другой физический сигнал y2, захваченный одновременно с входной сигнал y1 (используется для вычисления спектрограммы). Поэтому можно предположить, что y1 и y2 имеют те же временные метки, что и ось х, как в следующем примере.Настроить вывод функции спектрограммы MATLAB

N = 1024; 
n = 0:N-1; 
w0 = 2*pi; 
y1 = sin(w0*n); 
y2 = n; 
spectrogram(y1,'yaxis'); 

ответ

0

Чтобы контролировать масштаб осей произвольно, вы можете вручную построить спектрограммы с помощью imagesc. Вот как:

N = 1024; 
n = 0:N-1; 
w0 = 2*pi/10; 
y1 = sin(w0*n); 
y2 = n; 

% compute spectrogram 
[s,w,t]=spectrogram(y1,'yaxis'); 

% find values in y2 corresponding to spectrogram time-grid 
t2 = interp1((1:N), y2, t); 

% use imagesc to plot spectrogram 
figure; 
imagesc(t2,w/pi,10*log10(abs(s.^2)/length(w)/pi)) 
set(gca,'YDir','normal'); 
colorbar; 
ylabel('Normalized Frequency (\times \pi rad/sample)'); 
% caxis([-160, 20]) % manually tweak the color range for best detail 

Обратите внимание, что я сделал два незначительных изменений в код:

  1. Изменено w0 от 2*pi к 2*pi/10, потому что прежние результаты в y1 быть все нули.
  2. Изменено y2, чтобы быть чем-то другим, чем 1:N, что является спектрограммой по умолчанию.

Я хотел бы также отметить, что встроенный в spectrogram сюжете действительно позволяет управлять оси масштабировать различные способы, в том числе с указанием sample rate.

Смежные вопросы