Matlab syntax for 2-d fourier transform

Click For Summary

Discussion Overview

The discussion revolves around performing a 2-dimensional Fourier transform of a function defined in MATLAB, specifically without using built-in functions like fft. Participants explore the implementation details, including the use of summations and the challenges associated with handling functions of two variables.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant describes their function f(x,y) using meshgrid and seeks guidance on performing a 2D Fourier transform using summations.
  • Another participant suggests that a 2D Fourier transform can be achieved by performing a series of 1D Fourier transforms along each dimension, but emphasizes avoiding for loops in favor of vector operations.
  • Some participants express confusion about how to implement the 2D transform in MATLAB, particularly regarding the notation for functions of two variables and the use of loops versus vectorization.
  • There is a discussion about the overhead of for loops in MATLAB and the benefits of using vectorized operations, with examples provided for 1D transforms.
  • One participant notes that their function cannot be separated into independent variables, raising questions about how to handle such cases in the context of a 2D Fourier transform.
  • Clarification is sought on how to represent a function of two variables in MATLAB, with suggestions that it can be treated as a 2D array.

Areas of Agreement / Disagreement

Participants generally agree on the concept of using 1D transforms to achieve a 2D Fourier transform, but there is disagreement on the best approach to implement this in MATLAB, particularly regarding the use of loops versus vector operations. The discussion remains unresolved regarding the specific implementation details for functions that cannot be separated into independent variables.

Contextual Notes

Participants express uncertainty about the limitations of their current understanding of MATLAB syntax, particularly in relation to handling functions of two variables and the implications of using loops versus vectorized operations.

Ben Wilson
Messages
90
Reaction score
16
I have a function f(x,y) which i have defined in this way:

a vector x and a vector y

meshgrid[x,y]

z= f(meshgrid[x,y]).

how do i do a 2-d Fourier transform of f(x,y)?

the transform must be done without using operations like fft, and must be done using summations written in the code.
 
Physics news on Phys.org
Ben Wilson said:
I have a function f(x,y) which i have defined in this way:

a vector x and a vector y

meshgrid[x,y]

z= f(meshgrid[x,y]).

how do i do a 2-d Fourier transform of f(x,y)?

the transform must be done without using operations like fft, and must be done using summations written in the code.
To further illustrate what i mean, my transforms for 1-D functions (f(x)) have been written like this (neglecting some constants):

create a k vector and an x vector.

f = f(x)

for i = 1:length(k)
F(i) = 0
for j = 1:length(x)
F(i) = F(i) + f(j)*exp[-1i*x(j)*k(i)]
end
end
 
A 2D Fourier transform is simply a series of 1D Fourier transforms. For each value of x, you Fourier transform f(x,y) along y to get f1(x,y), then for each value of y you Fourier transform f1(x,y) along x to get f2(x,y). The resulting f2 contains the 2D FT of f(x,y).

By the way, you should not use for loops in Matlab for things you can do using vector operations.
 
DrClaude said:
A 2D Fourier transform is simply a series of 1D Fourier transforms. For each value of x, you Fourier transform f(x,y) along y to get f1(x,y), then for each value of y you Fourier transform f1(x,y) along x to get f2(x,y). The resulting f2 contains the 2D FT of f(x,y).

By the way, you should not use for loops in Matlab for things you can do using vector operations.

Why should I not? and how can I write the loop in vector operations? p.s thanks for you help it feels much clearer now.
 
Ben Wilson said:
Why should I not? and how can I write the loop in vector operations?
For loops have an important overhead that is not present when using vector operations (the latter are optimized in Matlab). This is less a problem nowadays that Matlab does compilation on the fly (instead of being only an interpreter as it used to be), but it is still faster to use vector operations and your code looks more like Matlab code than C code.

An example from your code above: instead of
Matlab:
for j = 1:length(x)
F(i) = F(i) + f(j)*exp[-1i*x(j)*k(i)]
end
use
Matlab:
F(i) = sum(f.*exp(-1i*x*k(i)))
or
Matlab:
F(i) = dot(f,exp(-1i*x*k(i)))
 
DrClaude said:
A 2D Fourier transform is simply a series of 1D Fourier transforms. For each value of x, you Fourier transform f(x,y) along y to get f1(x,y), then for each value of y you Fourier transform f1(x,y) along x to get f2(x,y). The resulting f2 contains the 2D FT of f(x,y).

By the way, you should not use for loops in Matlab for things you can do using vector operations.
sadly
DrClaude said:
For loops have an important overhead that is not present when using vector operations (the latter are optimized in Matlab). This is less a problem nowadays that Matlab does compilation on the fly (instead of being only an interpreter as it used to be), but it is still faster to use vector operations and your code looks more like Matlab code than C code.

An example from your code above: instead of
Matlab:
for j = 1:length(x)
F(i) = F(i) + f(j)*exp[-1i*x(j)*k(i)]
end
use
Matlab:
F(i) = sum(f.*exp(-1i*x*k(i)))
or
Matlab:
F(i) = dot(f,exp(-1i*x*k(i)))

F and f here are still functions of one variable, my initial problem is how to write the above statements (in vector or loop form) for a function of 2 variables?
 
Ben Wilson said:
F and f here are still functions of one variable, my initial problem is how to write the above statements (in vector or loop form) for a function of 2 variables?
I told you the recipe: you need to do a series of 1D transforms. As you already know how to do one, it shouldn't be hard to extend the code to loop over the other dimension. (Note that you will probably have to use a loop here. I can't see how you could do the full 2D FT only with vector operations. If you are more comfortable with loops, it may be better to start writing the code using for loops, and then try to eliminate some later.)
 
DrClaude said:
I told you the recipe: you need to do a series of 1D transforms. As you already know how to do one, it shouldn't be hard to extend the code to loop over the other dimension. (Note that you will probably have to use a loop here. I can't see how you could do the full 2D FT only with vector operations. If you are more comfortable with loops, it may be better to start writing the code using for loops, and then try to eliminate some later.)

In matlab, i have in 1 dimension done what you have said by using a vector to define a function as a new vector. then in my loops i do things like f(i) and x(i) and k(j).

in MATLAB one can't simply write f(x,y). how do i write f(x,y) in matlab? i.e i want to do the sums by writing what should in my head look like f( x(i), y(j) ) etc.

my actual function in my work f(x,y) can not be separated into f1(x) and f2(y) or any other parametric form.
 
Ben Wilson said:
In matlab, i have in 1 dimension done what you have said by using a vector to define a function as a new vector. then in my loops i do things like f(i) and x(i) and k(j).

in MATLAB one can't simply write f(x,y). how do i write f(x,y) in matlab? i.e i want to do the sums by writing what should in my head look like f( x(i), y(j) ) etc.

my actual function in my work f(x,y) can not be separated into f1(x) and f2(y) or any other parametric form.
i think its the whole loop vs vector issue that's the problem which is why i want someone with MATLAB expertise to show me how my pattern of thinking is wrong for matlab
 
  • #10
Ben Wilson said:
in MATLAB one can't simply write f(x,y). how do i write f(x,y) in matlab? i.e i want to do the sums by writing what should in my head look like f( x(i), y(j) ) etc.
Just like you write a function f(x) as an array f(i), a function f(x,y) is a 2D array f(i,j).
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 7 ·
Replies
7
Views
5K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 0 ·
Replies
0
Views
2K
  • · Replies 7 ·
Replies
7
Views
3K
Replies
5
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K