0

信号のウィンドウで瞬時周波数を見つけたいです。私は信号のごく一部を取り、そのウィンドウで瞬時周波数を見つけようとしています。しかし、その周波数は信号の実際の周波数と一致しません。以下は私のコードです。

close all; clear all; clc

fs = 25000;
T = 0.5;
t = 0:1/fs:T;
n = length(t);

m = floor(n/4);
f1 = 100;
z1 = cos(2*pi*f1*t(1:m));

f1 = 200;
z2 = cos(2*pi*f1*t(1:m));

f1 = 300;
z3 = cos(2*pi*f1*t(1:m));

f1 = 400;
z4 = cos(2*pi*f1*t(1:(n-3*m)));

z = [z1 z2 z3 z4];

window = 100;
wStart = 1;
wEnd = wStart + window;
freqs = [];

while wEnd < length(z)
    x = z(wStart:wEnd);
    y = t(wStart:wEnd);

    h=hilbert(x);   
    unrolled_phase = unwrap(angle(h));

    dx = diff(unrolled_phase);
    dy = diff(y);
    p = dx./dy;
    inst_freq = p/(2*pi) + 2*pi;
    freqs = [freqs inst_freq];

    wStart = wEnd;
    wEnd = wStart + window;
end

「freqs」のプロットは次のとおりです。 プロット(周波数)

周波数の計算方法に問題があると思いますが、よくわかりません。誰でも助けてもらえますか?コードから明らかなように、周波数を 100、200、300、および 400 として取得する必要があります。私がやりたいのは、各周波数の開始点(時間)を見つけることだけです

4

1 に答える 1

0

最初の理論的な答えは、信号は実際には複数の周波数の組み合わせであるということです。また、信号を 100Hz、200Hz、300Hz などのビンで 100 Hz の範囲に分解する場合、変換された信号とまったく同じ信号に信号を再作成することはできません。つまり、逆変換は 4 つの周波数しか使用できず、入力信号と復元された信号が同じに聞こえないように組み合わせます。

于 2014-03-24T17:50:38.493 に答える