How to do FT Time shift and Time scaling properties

94 ビュー (過去 30 日間)
ong
ong 2013 年 3 月 28 日
コメント済み: Peter Seibold 2022 年 8 月 29 日
Currently i am trying use matlab to do the FT properties -time shift and time scaling, can someone help me in the implementation? i would like to prove that Timeshift: F[x(t-τ) ]= e^(-jwτ) F[x(t)]
Time scaling: F[x(at)]=1/(|a|) X(w/a)
Thanks.

採用された回答

Wayne King
Wayne King 2013 年 3 月 28 日
編集済み: Wayne King 2013 年 3 月 28 日
t=0:0.001:0.1-0.001;
Fs = 1e3;
freq1 = 100;
x1=cos(2*pi*freq1*t);
Delay=2;
yp = fft(x1);
yp = yp(1:length(x1)/2+1);
f = 0:Fs/length(x1):500;
yp = yp.*exp(-1i*2*pi*f*Delay*(1/Fs));
yp = [yp conj(fliplr(yp(2:end-1)))];
y = ifft(yp,'symmetric');
plot(t(1:100),x1(1:100),'b');
hold on;
plot(t(1:100),y(1:100),'r');
  2 件のコメント
ong
ong 2013 年 3 月 29 日
Hi Wayne, thanks for your help. I am able to observe the shift but i couldn't get the same plot result when comparing:
D=2;
Fs=1000;
freq1=100;
t=0:0.001:1-0.001;
x=cos(2*pi*freq1*(t-D));
y1 = fft(x);
and
x1=cos(2*pi*freq1*t);
Delay=2;
yp = fft(x1);
yp = yp(1:length(x1)/2+1);
f = 0:Fs/length(x1):500;
yp = yp.*exp(-1i*2*pi*f*Delay*(1/Fs));
any reason why? Thanks.
AYDIN KARA
AYDIN KARA 2021 年 1 月 2 日
Your code just fails when sampling frequency increases.
For f = 1e4 it gives matrix dimensions must match error. Other wise if I keep your sampling frequency at 1e6
After that point, even if I increase the delay by 2000. I could not observe any delay.
Sorry but it seems your code works for one case.

サインインしてコメントする。

その他の回答 (6 件)

Wayne King
Wayne King 2013 年 3 月 29 日
編集済み: Wayne King 2013 年 3 月 29 日
They agree if you get the delay right. You're not delaying the signal by 2. You're trying to delay the signal by two samples, but that has to take into account the sampling interval, so you're actually delaying the signal by 0.002 seconds.
t = 0:0.001:1-0.001;
freq1 = 100;
Fs = 1000;
x1=cos(2*pi*freq1*t);
Delay=2;
yp = fft(x1);
yp = yp(1:length(x1)/2+1);
f = 0:Fs/length(x1):500;
yp = yp.*exp(-1i*2*pi*f*Delay*(1/Fs));
yp = [yp conj(fliplr(yp(2:end-1)))];
yrec = ifft(yp,'symmetric');
Compare with
D=2;
Fs=1000;
freq1=100;
t=0:0.001:1-0.001;
x=cos(2*pi*freq1*(t-(D*(1/Fs))));
y1 = fft(x);
y1T = ifft(y1,'symmetric');
max(abs(y1T-yrec))
You can see the above are identical. Thank you for accepting my answer if I have helped you.
  1 件のコメント
ong
ong 2013 年 3 月 29 日
Hi there, Thanks for the clear explanation. However, i have one more issue, does it work the same way if i m having my fft display in the angle instead of abs?
I tried having it plot in the phase domain but there is some differ in the result.

サインインしてコメントする。


Wayne King
Wayne King 2013 年 3 月 28 日
編集済み: Wayne King 2013 年 3 月 28 日
n = 0:159;
x = cos(pi/4*n);
y = cos(pi/4*(n-2));
xdft = fft(x);
ydft = fft(y);
xdft(21)
ydft(21)
Note that 80+i0 has become 0-80i due to the predicted phase shift of e^{-i\pi/2}
Obviously, the only way to properly "prove" that theorem is mathematically.
The scaling one you have to be careful with in discrete-time because scaling doesn't work the same with a discrete variable as it does with continuous time.
  1 件のコメント
ong
ong 2013 年 3 月 28 日
Is there anyway that i can do it in this form:
t=0:0.001:1
x1=cos(2*pi*freq1*t)
Delay=2
yp = fft(x1);
yp = yp.*exp(-j*2*pi*t*Delay);

サインインしてコメントする。


ong
ong 2013 年 4 月 3 日
To update on this question, Wayne King provided the explanation and the steps provided are accurate. However there is one problem, instead of ifft the abs function, it was to display in the phase domain, here, the phase for the time shift properties and the function:cos(2*pi*freq1*(t-(D*(1/Fs) doesnt match.
There are error to the phase shift, anyone can help please?
Thanks.
  1 件のコメント
Irfan Ali Dahani
Irfan Ali Dahani 2021 年 1 月 19 日
visit and you will get easy made time shifting, time scaling and amplitude scaling all in one project. surely both projects will help you.

サインインしてコメントする。


SHREEVARSHINI R
SHREEVARSHINI R 2021 年 10 月 24 日
1.Write a MATLAB program to find Fourier transform of the signal Ate-btu(t)
2.Write a MATLAB program to perform amplitude scaling, time scaling and time shift on the signal x(t) = 1+t; for t=0 to 2

Sk Group
Sk Group 2021 年 10 月 25 日
  1 件のコメント
Peter Seibold
Peter Seibold 2022 年 8 月 29 日
Proposed code NOT working! Unknown function 'sigshift1'.

サインインしてコメントする。


Sk Group
Sk Group 2021 年 10 月 25 日

カテゴリ

Help Center および File ExchangeSpectral Measurements についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by