Чтобы масштабировать значения из спектрограммы Matlab в реальный диапазон

я бегу

spectrogram(data, 64, 60, 256, 2,  'yaxis');

я получил

введите здесь описание изображения

Я хочу получить диапазон от 0 до 180 Гц вместо нормализованного диапазона от 0 до 1. Я могу изменить ось на

axis([0 450 0 180])

но это не меняет значения.

я бегу безуспешно

spectrogram(180 .* data, 64, 60, 256, 2,  'yaxis');

Как масштабировать диапазон от нормализованного до реального диапазона?


person Léo Léopold Hertz 준영    schedule 23.12.2013    source источник
comment
spectrogram на самом деле имеет время по оси Y и частоту как ось х. Так ты уверен, что не просто неправильно пометил свои оси?   -  person thewaywewalk    schedule 23.12.2013
comment
@thewaywewalk Вы правы. Я рисую преобразование Фурье данных вместо времени и частоты.   -  person Léo Léopold Hertz 준영    schedule 23.12.2013


Ответы (1)


По оси x должна быть частота. Вам нужно знать частоту дискретизации fs (это 2?) из data. Тогда диапазон частот будет (0:63)/64*fs

На самом деле вы можете получить выходную частоту в функции спектрограммы:

[B,F,T]=spectrogram(data,64,60,256,2);  % if fs = 2 in your case

F — диапазон частот.

person lennon310    schedule 23.12.2013
comment
Как вы можете построить частотно-временной график из этих точек в F и T? Я получаю двойной размер 129x1 для F и двойной размер 1x218 для T. - person Léo Léopold Hertz 준영; 23.12.2013
comment
используйте imagesc(abs(B)), а F для столбца, а T для строки - person lennon310; 23.12.2013
comment
imagesc(T, F, abs(B)) вроде работает. Еще проблема с пробегом. Значения от [0,1], хотя должны быть [0,180] Гц. - person Léo Léopold Hertz 준영; 23.12.2013
comment
F*fs — ваша фактическая частота (2*F) в вашем случае. см. мой ответ на (0:63)/64*fs. Они эквивалентны. Но проблема в том, что ваша частота дискретизации составляет всего 2 Гц, поэтому вы не получите сигнал 180 Гц. - person lennon310; 23.12.2013
comment
Большое спасибо за объяснение! Я изменил fs = 360, поэтому я получаю максимум 180 Гц, что, как я знаю, должно быть максимальной частотой. - person Léo Léopold Hertz 준영; 23.12.2013
comment
Теперь мне нужно повернуть изображение, чтобы получить пики сверху вниз. Теперь я вижу это: dl .dropboxusercontent.com/u/62073194/ Есть идеи? Умножение на -1 ставит также минус -метку на оси Y, чего я не хочу. - person Léo Léopold Hertz 준영; 23.12.2013
comment
что вы имеете в виду, потому что пики уже на вершине? Вы можете повернуть матрицу с помощью imagesc(abs(B')), я не уверен, что вы этого хотите. - person lennon310; 23.12.2013
comment
Он помещает эти пики в левую часть: ="nofollow noreferrer">dl.dropboxusercontent.com/u/62073194/ Я хочу снизить эти пики. - person Léo Léopold Hertz 준영; 23.12.2013
comment
imagesc(abs(B(конец:-1:1,:))) - person lennon310; 23.12.2013
comment
Большое спасибо за вашу поддержку и ответы в этом вопросе! - person Léo Léopold Hertz 준영; 23.12.2013
comment
Теперь я думаю о расширении проблемы, но для распределения Вигнера-Вилле здесь: real-range-in-matlab" title="для масштабирования значений от распределения Вигнера Виля до реального диапазона в Matlab"> stackoverflow.com/questions/20750660/ Очевидно, у меня проблема с инициализацией окон. - person Léo Léopold Hertz 준영; 24.12.2013