1

信号を数値でシフトし、すべての周波数の位相をその数値に相当する数値でシフトすることにより、信号を「外挿」しようとしています。次のコードは、最後の (予測された) 数値バーが最初の値にラップアラウンドすることを除いて、正常に機能します。私はこれを間違っていますか、それともこれは (i) fft の基本ですか (そして、この方法を使用して信号を推定することはできません)?

    t = 1:97;
    x = sin(2*pi*1/10*t+ 2*pi/4) + -0.5+0.01*t + cos(2*pi*1/20*t+pi/3); % eg signal
    numbars = 3; %shift by 3 bars into the future

    % algorithm:
    N = length(x);
    df = 1/N;
    X = fft(x);
    Q = ceil((N+1)/2); % Q = No. of unique spectral points for real-valued time signals
    fQ = (Q-1)*df; % Maximum real frequency
    if N==2*Q-1 % N odd
        X = [ X(1:Q), fliplr(conj(X(2:Q))) ];
    else % N even (= 2*Q-2)
        X = [ X(1:Q), fliplr(conj(X(2:Q-1))) ];
    end;

    %Convert the unipolar spectrum to the bipolar frequency form
    if N==2*Q-1 % N odd
        Xb = [ fliplr(conj(X(2:Q))), X(1:Q) ];
        fb = [ -fQ: df : fQ ];
    else % N even (= 2*Q-2)
        Xb = [ fliplr(conj(X(2:Q-1))), X(1:Q) ];
        fb = [ -fQ: df : fQ-df ];
    end

    % Now to implement a time advance z(t) = x(t+t0)
    t0 = numbars;
    phi0b = 2*pi*fb*t0;
    newsig1 = real(ifft (ifftshift (exp(-1i*phi0b).* Xb)));
    plot([x' newsig1']);

問題は、シグナルの最後のバー数が「正しく」なく、シグナルの先頭にラップしているように見えることです - 最後の 3 つの外挿されたバーは上昇するはずですが、代わりにシフトされたシグナルが開始した領域に下降します (持っていません)。画像を追加するのに十分な評判、matlab でプロットしてください)。

4

1 に答える 1

1

FFT および IFFT 変換の基底ベクトルは、より長い純粋な正弦波として外挿される場合、すべて円形になります。したがって、これらの基底ベクトルのみを使用した再構成を使用したデータの「外挿」は、必然的に循環し、データ ウィンドウの先頭に戻ります。

これは、(FFT と同じ長さの) IFFT の基本です。

この循環効果の一部を除去する可能性があるため、FFT 結果の周波数のすべてのスペクトル ピークを補間してから、元のウィンドウ アパーチャで周期的でない補間された周波数ピークを使用して、外挿された再構成を試みることができます。近くの FFT ビンの代わりにこれらの周期的なピーク。そのように推定されたアパーチャ内の非周期的な周波数は、元の FFT 長で循環的にラップアラウンドしません。元の FFT 長で周期的でない周波数を使用して、はるかに長い長さの IFFT を使用するか、単純に正弦波を合計して、(再) 構築または外挿を試みることにより、信号を作成できます。

追加: 自己回帰、線形予測、または最尤アルゴリズム (分析用の初期 FFT の代わりに) も、外挿の使用により適している場合があります。

于 2014-02-09T15:19:27.180 に答える