簡體   English   中英

在FFT之后,在時域中延遲信號,頻域中的相位變化

[英]Delay a signal in time domain with a phase change in the frequency domain after FFT

我在Matlab腳本中實現了基本時間/頻率屬性的問題。 該物業是:

IM1

我試圖在Matlab腳本中實現它。 我假設一個頻率值為5Hz的正弦信號,采樣頻率等於800Hz,我想把這個信號延遲1.8秒。 所以我實現了這個腳本:

Fs = 800;
Time_max = 4; % seconds
t = 0:(1/Fs):Time_max;
delay = 1.8; % One second of delay

f = 5; %Hz
y = sin(2 * pi * f * t);

figure
subplot(2,1,1)
plot(t,y);
xlabel('time (s)')
legend('Original');

%FFT
SIZE = 2^nextpow2(length(y));
Y = fft(y,SIZE);

df = Fs/SIZE;
f= -Fs/2:df:Fs/2 - df;

for k = 1:SIZE

    Y(k) = Y(k)*exp(-(1i*2*pi*f(k)*delay));

end

subplot(2,1,2)
plot(real(ifft(Y)),'r')
legend('Shifted');

輸出圖是:

輸出圖

問題出在哪兒? 如何實現正確的延時?

謝謝

問題不在於實現,而在於FFT的屬性(分別是DFT):你發布的時間延遲的公式是正確的,但你必須記住,你正在進行循環移位 這意味着從2.2s到4.0s的所有信號部分將被復制到輸出的開頭。 這正是你所看到的:

之前

您想要的信號從1.8s開始,但是從0到0.6837s,由於循環移位而插入的部分。 小計算:輸入信號為1 x 3201 ,即零填充895個零。 在幾秒鍾內,這是1.1187秒的零。 循環移位將在開頭插入最后的1.8s,即1.8 - 1.1187 = 0.86秒不會為零而是包含正弦。 這正是我們在情節中看到的數量。

為了避免這種影響,您必須用至少為延遲信號的零點填充輸入信號。 在你的情況下,將是

Fs = 800;
Time_max = 4; % seconds
t = 0:(1/Fs):Time_max;
delay = 1.8; % One second of delay

f = 5; %Hz
y = sin(2 * pi * f * t);
y = [y, zeros(1,delay*Fs)];          % Zero-pad the signal by the amount of delay

SIZE = 2^nextpow2(length(y));
Y = fft(y,SIZE);

df = Fs/SIZE;
f= -Fs/2:df:Fs/2 - df;

for k = 1:SIZE
    Y(k) = Y(k)*exp(-(1i*2*pi*f(k)*delay));
end

td = (0:SIZE-1)/Fs;
yd = real(ifft(Y));

這給了我們

結果

我相信您需要采用更大的FFT來適應移位/延遲。 您可以通過使用適當數量的零(使用您提供的采樣頻率和延遲量>> 1440)對輸入進行零填充來強制執行此操作。 然后你得到了想要的結果。

用墊正弦移位

你原來的情節有尾巴纏繞,因為FFT / IFFT限制在4096個二進制位,這不足以包含整個移位信號+前導零。

你可以試試這個:

Fs = 800;
Time_max = 4; % seconds
t = 0:(10/Fs):Time_max;
delay = 1.8; % One second of delay
f = 5; %Hz
y = sin(2 * pi * f * t);
figure;subplot(2,1,1);plot(t,y);xlabel('time (s)')
legend('Original');

w = 2*pi*f;
X=fft(y);
Y=X.*exp(-1i*w*(t+delay));
ynew = real(ifft(Y));
subplot(2,1,2);plot(ynew);
legend('Shifted');

考慮使用矢量化實現,您可以擺脫for-loop

結果如下:

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM