信号を数値でシフトし、すべての周波数の位相をその数値に相当する数値でシフトすることにより、信号を「外挿」しようとしています。次のコードは、最後の (予測された) 数値バーが最初の値にラップアラウンドすることを除いて、正常に機能します。私はこれを間違っていますか、それともこれは (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 でプロットしてください)。