Чтобы масштабировать значения от распределения Вигнера-Вилле до реального диапазона в Matlab
Я запускаю с помощью функции tfrwv.m в Time-Frequency Toolbox
[B,T,F] = tfrwv(data, 1:length(data), length(data), 1);
B(1:130, :) = 0; % remove the duplicate part of the distribution
imagesc(T, F, abs(B));
colormap(hot);
xlabel('t [s]');
ylabel('f [Hz]');
я получил
Частота должна быть в пределах [0,180] Гц и время [0,2,5 с].
Как вы можете масштабировать время и частоту до реальных значений?
В руководствах говорится
%TFRWV Wigner-Ville time-frequency distribution.
% [TFR,T,F]=TFRWV(X,T,N,TRACE) computes the Wigner-Ville distribution
% of a discrete-time signal X,
% or the cross Wigner-Ville representation between two signals.
%
% X : signal if auto-WV, or [X1,X2] if cross-WV.
% T : time instant(s) (default : 1:length(X)).
% N : number of frequency bins (default : length(X)).
% TRACE : if nonzero, the progression of the algorithm is shown
% (default : 0).
% TFR : time-frequency representation. When called without
% output arguments, TFRWV runs TFRQVIEW.
% F : vector of normalized frequencies.
%
% Example :
% sig=fmlin(128,0.1,0.4); tfrwv(sig);
%
и я бегу
[B,T,F] = tfrwv(data, 1:length(data), length(data), hamming(length(data)/10), hamming(length(data)/4));
и я получаю
Error using tfrwv
Too many input arguments.
Error in flow_wv (line 8)
[B,T,F] = tfrwv(data, 1:length(data), length(data),
hamming(length(data)/10), hamming(length(data)/4));
Я думаю, что проблема здесь заключается в инициализации окон для времени и частоты. Я пытаюсь манипулировать обеими осями, редактируя значения параметров.
Соответствующая спектрограмма тех же данных, но с метками оси справа, сделанная функцией спектрограммы по умолчанию Matlab, обсуждается здесь:
2 ответа
Я думаю tfrwv
эквивалентно spectrogram
если вы используете следующую команду.
Временной интервал t = 1/360
, выберите fs = 360.5
,
imagesc(T*t, F*fs, abs(B));
Есть больше пиков в tfrwv
вероятно, потому что размер окна и перекрытия отличаются от того, что вы использовали в spectrogram
,
Результат
В распределении Вигнера-Вилля нет понятия перекрытия. Это относится только к STFT и спектрограмме, которая является квадратным модулем STFT.
Результаты из 'tfrwv' (и все вычисления TFR в TFTB) представлены в нормализованных единицах частоты. Вы не можете получить единицы по частоте и секундам без предоставления частоты дискретизации \ частоты.
Это слишком много входных аргументов.
[B, T, F] = tfrwv (данные, 1: длина (данные), длина (данные), Хемминга (длина (данные)/10), Хемминга (длина (данные)/4));
Есть три выходных аргумента и до четырех входных аргументов, так что если вы дадите пять, это приведет к ошибке. Кроме того, четвертый входной аргумент - это логическое значение для включения трассировки, которое просто выводит некоторую информацию о ходе выполнения в командное окно Matlab во время вычислений.
Просто для проверки реальности сделайте свой tfrwv
вызов без выходных аргументов (т.е. >> tfrwv(blah, blah);
) это вызовет tfrqview
который является инструментом для построения графиков. Одной из опций в меню является изменение частоты дискретизации (введите частоту дискретизации в Герцах в командной строке Matlab), и он обновит фигуру, чтобы иметь действительные частоты по оси Y и времена по оси X. В противном случае значение по умолчанию - нормализованная частота, а ось Y - это время в единицах выборок.
Чтобы сделать это вручную, вам нужно будет использовать трехмерный "график", в котором вы можете использовать частоту дискретизации для преобразования T
а также F
векторы - это истинное время и истинная частота вместо выборок и нормализованной частоты (нормализованная частота составляет [0 0,5]). Тогда TFR
используется для нанесения цвета на ось Z, т.е. >>imagesc(T.*1/Fs, F.*Fs, TFR);
TFTB - это потрясающий инструментарий с лучшей документацией, которую я когда-либо видел из стороннего набора инструментов Matlab с открытым исходным кодом. Покопайтесь в нем для "refguide.pdf" и "tutorial.pdf".