我试图通过 numbars 移动信号,并通过将每个频率的相位移动其 numbars 等效值来“推断”信号。以下代码工作正常,除了最后一个(预测的)numbars 环绕到第一个值。我做错了吗,或者这是 (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 中绘制)。