0

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]');

私は得る

ここに画像の説明を入力

周波数は [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 のデフォルトのスペクトログラム関数によって行われます。ここで説明します。

ここに画像の説明を入力

4

2 に答える 2

2

Wigner-Ville 分布には重複の概念はありません。これは、STFT と、STFT の二乗係数であるスペクトログラムにのみ適用されます。

「tfrwv」(および TFTB のすべての TFR 計算) の結果は、正規化された周波数単位です。サンプリング周波数\レートを指定しないと、周波数と秒の単位を取得できません。

入力引数が多すぎます。

[B,T,F] = tfrwv(データ, 1:長さ(データ), 長さ(データ), ハミング(長さ(データ)/10), ハミング(長さ(データ)/4));

3 つの出力引数と最大 4 つの入力引数があるため、5 つ指定するとエラーがスローされます。また、4 番目の入力引数はトレースをオンにするためのブール値であり、計算時に Matlab コマンド ウィンドウに進捗情報を出力するだけです。

現実を確認するために、tfrwv出力引数なしで呼び出しを行います (つまり>> tfrwv(blah, blah);)。これによりtfrqview、メニュー駆動のプロット ツールが呼び出されます。メニューのオプションの 1 つは、サンプリング周波数を変更することです (Matlab コマンド プロンプトでサンプリング周波数をヘルツで入力します)。これにより、図が更新され、y 軸に実際の周波数が、x 軸に時間が表示されます。それ以外の場合、デフォルトは正規化された周波数であり、y 軸は実際にはサンプル単位の時間です。

これを手作業で行うには、3D「プロット」を使用する必要があります。このプロットでは、サンプリング レートを使用してTFベクトルを、サンプルと正規化された周波数ではなく、真の時間と真の周波数に変換できます (正規化された周波数は [0 0.5])。次に、TFRz 軸に色を適用するために使用されます。>>imagesc(T.*1/Fs, F.*Fs, TFR);

TFTB は、オープン ソースのサード パーティ製 Matlab ツールボックスから今まで見た中で最高のドキュメントを備えた素晴らしいツールボックスです。「refguide.pdf」と「tutorial.pdf」を探してください。

于 2014-12-19T17:47:56.530 に答える
2

以下のコマンドを使えばtfrwv同等だと思います。spectrogram

時間間隔はt = 1/360です。を選択しfs = 360.5ます。

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

tfrwvおそらく、ウィンドウ サイズとオーバーラップが で使用したものとは異なるため、より多くのピークがありますspectrogram

結果

ここに画像の説明を入力

于 2013-12-24T15:24:10.887 に答える