필터 지우기
필터 지우기

Space-Time Fourier Transform: Wavenumber-Frequency Domain Shift

조회 수: 27 (최근 30일)
Marina
Marina 2013년 6월 12일
답변: nadav potasman 2021년 5월 11일
Hello, I am performing Time and Space domain Fourier Transform. The input data is 2D (x,t) organized in a matrix where each column represents a position in space and each row a time-sample. For the moment I need to go from space-time to space-frequency to wavenumber (kx)-frequency(w) and there apply a time-shift proportional to a depth difference zo=co*to that is a function of angle (and thus requiring using kz); then go back to space-time, so:
D(x,t)->D(x,w)->D(kx,w)->D(kx,w)*exp(-i*kz*zo)->D'(x,w)->D'(x,t)
which in the code are named as:
* D(x,t)=data; (data in the time-space domain)
* D(x,w)=w_data; (data in the frequency-space domain)
* D(kx,w)=wk_data; (data in the frequency-wavenumber domain)
* D(kx,w)*exp(-i*kz*zo)=shifted_wk_data; (shifted data in the frequency-wavenumber domain)
* D'(x,w)=shifted_w_data; (shifted data in the frequency-space domain)
* D'(x,t)=shifted_data; (shifted data in the time-space domain)
The ' is just to set it apart from the non-shifted data, it does not stand for transposition, differentiation or anything else.
I use the following: The input data, t_data is organized as -tmax:0:tmax (in time) and -xmax:0:xmax (in space), with the w following fft so: 0:wmax:-wmax:-dw, and similar for kx=0:kxmax:-kxmax:-dkx. w is angular frequency and kx is angular horizontal wavenumber. kz is then defined as:
kz= + sqrt((w/c)^2-kx^2) if w>0
kz= - sqrt((w/c)^2-kx^2) if w<0
w_data=fft(data,[],1);
wk_data=ifft(w_data,[],2);
shifted_wk_data=wk_data.*exp(-1i*kz.*dz);
shifted_w_data=fft(shifted_wk_data,[],2);
shifted_data=ifft(shifted_w_data,[],1,'symmetric');
The code is successfully applying the transformations and the data is organized properly, BUT after shifting, the amplitudes of the data are being reduced substantially.
I checked each domain separately and the output is correctly recovered:
- time-shifting: D(x,t)->D(x,w)->D(x,w)*exp(-i*w*to)->D(x,t-to)
- space-shifting: D(x,t)->D(kx,t)->D(kx,t)*exp(i*kx*xo)->D(x-xo,t)
The problem thus lies on the D(kx,w) implementation.
  댓글 수: 5
Marina
Marina 2013년 6월 12일
yes, D(kx,w)=wk_data, as for the others I actually edited the question to include this info. So again:
  • D(x,t)=data; (data in the time-space domain)
  • D(x,w)=w_data; (data in the frequency-space domain)
  • D(kx,w)=wk_data; (data in the frequency-wavenumber domain)
  • D(kx,w)*exp(-i*kz*zo)=shifted_wk_data; (shifted data in the frequency-wavenumber domain)
  • D'(x,w)=shifted_w_data; (shifted data in the frequency-space domain)
  • D'(x,t)=shifted_data; (shifted data in the time-space domain)
And yes, zo=dz.
Matt J
Matt J 2013년 6월 12일
편집: Matt J 2013년 6월 12일
OK. But I still can't see anything suspicious other than the missing 2*pi coefficient mentioned below in my Answer.
You say only the amplitudes AFTER the shift look strange? So, shifted_data looks improperly scaled, but every other intermediate result looks fine? What if you set dz=0? In that case, you are just applying a succession of transforms followed directly by their inverses and you should get "data" back again. Is that not what happens?

댓글을 달려면 로그인하십시오.

답변 (2개)

Matt J
Matt J 2013년 6월 12일
One thing that jumps out at me is that MATLAB FFTs assume frequencies are expressed in Hz, so instead of
exp(-1i*kz.*dz);
you should probably have
exp(-1i*2*pi*kz.*dz);

nadav potasman
nadav potasman 2021년 5월 11일
anyone solve the problem? i'm in the same situation.
one more question - why wk_data calculated by the inverst fft on the second diminsion? isn't suppose to be the fft2 of the data?

카테고리

Help CenterFile Exchange에서 Bartlett에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by