在Wlab中将Wigner-Ville分布的值缩放到实际范围

时间:2013-12-23 20:26:07

标签: matlab distribution time-frequency

我使用Time-Frequency Toolbox

中的函数tfrwv.m运行
[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]');

我得到了

enter image description here

频率应在[0,180] Hz和时间[0,2.5s]之内。

如何将时间和频率缩放到实际值?

手册说

%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的默认频谱图功能完成,讨论here

enter image description here

2 个答案:

答案 0 :(得分:2)

如果您使用以下命令,我认为tfrwv等同于spectrogram

时间间隔为t = 1/360。 选择fs = 360.5

imagesc(T*t, F*fs, abs(B)); 

tfrwv中有更多峰值可能是因为窗口大小和重叠与您在spectrogram中使用的不同。

结果

enter image description here

答案 1 :(得分:2)

Wigner-Ville分布中没有重叠的概念。这仅适用于STFT和频谱图,它是STFT的平方模数。

&#t; tfrwv' (以及TFTB中的所有TFR计算)都是标准化的频率单位。你不能在不提供采样频率率的情况下获得频率和秒数的单位。

这是太多的输入参数。

  

[B,T,F] = tfrwv(数据,1:长度(数据),长度(数据),汉明(长度(数据)/ 10),汉明(长度(数据)/ 4));

有三个输出参数和最多四个输入参数,所以是的,给它五个会抛出一个错误。此外,第四个输入参数是一个用于打开跟踪的布尔值,它只是在计算时将一些进度信息输出到Matlab命令窗口。

只是为了实际检查,使您的tfrwv调用没有输出参数(即>> tfrwv(blah, blah);),这将导致它调用tfrqview这是一个菜单驱动的绘图工具。菜单中的选项是更改采样频率(在Matlab命令提示符下以赫兹为单位输入采样频率),它将更新图形,使y轴上的实际频率和x轴上的时间。否则,默认值是标准化频率,y轴实际上是以样本为单位的时间。

要手动执行此操作,您需要使用3D"情节",您可以使用采样率将TF矢量转换为是真实时间和真实频率而不是样本和归一化频率(归一化频率为[0 0.5])。然后TFR用于将颜色应用于z轴,即>>imagesc(T.*1/Fs, F.*Fs, TFR);

TFTB是一个很棒的工具箱,拥有我从开源第三方Matlab工具箱中看到过的最好的文档。在其中挖掘" refguide.pdf"和" tutorial.pdf"。