# IFFT function in julia

**URL:** https://discourse.julialang.org/t/ifft-function-in-julia/63454
**Category:** Signal and Image Processing
**Tags:** fftw, matlab, matrices
**Created:** [June 23, 2021, 4:09pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454 "2021-06-23T16:09:37Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![juls](https://avatars.discourse-cdn.com/v4/letter/j/ecc23a/32.png) [@juls](https://discourse.julialang.org/u/juls)
#### Post date: [June 23, 2021, 4:09pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/1 "2021-06-23T16:09:37Z")

</div>

I am trying to implement the below matrix computation from matlab in julia. But the ifft function gives different output than obtained in matlab

```julia
a = zeros(5,10);
for i = 1:5
    
    a(i,:) = ifft((c(i,:).*(d)));
end

```

where ‘c’ is a non- zero 5_10 matrix and ‘d’ is a non- zero 1_10 matrix.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [June 23, 2021, 4:14pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/2 "2021-06-23T16:14:35Z")

</div>

> [@juls](#):
>
> different output than obtained in matlab

please provide a minimal working example to show the difference

---

<div class="post-metadata">

### Author: ![mgkuhn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mgkuhn/32/6276_2.png) [@mgkuhn](https://discourse.julialang.org/u/mgkuhn)
#### Post date: [June 23, 2021, 4:48pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/3 "2021-06-23T16:48:56Z")

</div>

I can’t reproduce the problem.

Julia:

```julia
using FFTW
c = [-0.3 0.7 0.4 1.1 -1.3 -0.1 -1.4 0.3 0.7 -0.1;
      0.1 -2.0 -1.9 -1.4 -0.6 -2.4 -0.8 -0.9 -2.4 -2.2;
      0.2 -1.5 -2.5 2.2 -0.2 -1.0 -0.1 2.3 1.1 -1.9;
     -1.5 0.5 0.7 2.3 1.5 2.3 1.0 1.3 1.3 2.1;
      1.8 1.5 -0.6 0.4 2.0 0.4 -0.2 2.0 0.8 -1.6 ];
d = [0.9 -0.0 -1.0 0.6 -0.2 -0.6 0.7 -1.7 -0.9 -0.6]';
a = zeros(Complex, 5, 10);
for i = 1:5
    a[i,:] = ifft(c[i,:] .* d);
end
round.(a, digits=4)

```

```julia
5×10 Matrix{ComplexF64}:
 -0.175+0.0im -0.0064+0.2025im 0.0298-0.1789im 0.0384+0.0299im 0.0052+0.013im -0.229+0.0im 0.0052-0.013im 0.0384-0.0299im 0.0298+0.1789im -0.0064-0.2025im
  0.716+0.0im 0.1115-0.2877im -0.2041-0.0662im -0.462+0.0937im 0.2286-0.3182im 0.026+0.0im 0.2286+0.3182im -0.462-0.0937im -0.2041+0.0662im 0.1115+0.2877im
  0.081+0.0im 0.1794+0.7688im 0.1997-0.2212im -0.4099-0.6105im -0.0452+0.092im 0.251+0.0im -0.0452-0.092im -0.4099+0.6105im 0.1997+0.2212im 0.1794-0.7688im
 -0.629+0.0im -0.1634+0.4014im -0.0811+0.0315im 0.1384-0.2139im -0.2869+0.4296im 0.065+0.0im -0.2869-0.4296im 0.1384+0.2139im -0.0811-0.0315im -0.1634-0.4014im
 -0.148+0.0im 0.4013+0.4im 0.4163-0.2029im -0.1063-0.4076im 0.0027+0.1795im 0.34+0.0im 0.0027-0.1795im -0.1063+0.4076im 0.4163+0.2029im 0.4013-0.4im

```

Same output in MATLAB as your code with the same input matrix/vector:

```julia
c = [-0.3 0.7 0.4 1.1 -1.3 -0.1 -1.4 0.3 0.7 -0.1;
      0.1 -2.0 -1.9 -1.4 -0.6 -2.4 -0.8 -0.9 -2.4 -2.2;
      0.2 -1.5 -2.5 2.2 -0.2 -1.0 -0.1 2.3 1.1 -1.9;
     -1.5 0.5 0.7 2.3 1.5 2.3 1.0 1.3 1.3 2.1;
      1.8 1.5 -0.6 0.4 2.0 0.4 -0.2 2.0 0.8 -1.6 ];
d = [0.9 -0.0 -1.0 0.6 -0.2 -0.6 0.7 -1.7 -0.9 -0.6];
a = zeros(5,10);
for i = 1:5    
    a(i,:) = ifft((c(i,:).*(d)));
end
a

```

```julia
a =

  Columns 1 through 8

  -0.1750 + 0.0000i -0.0064 + 0.2025i 0.0298 - 0.1789i 0.0384 + 0.0299i 0.0052 + 0.0130i -0.2290 + 0.0000i 0.0052 - 0.0130i 0.0384 - 0.0299i
   0.7160 + 0.0000i 0.1115 - 0.2877i -0.2041 - 0.0662i -0.4620 + 0.0937i 0.2286 - 0.3182i 0.0260 + 0.0000i 0.2286 + 0.3182i -0.4620 - 0.0937i
   0.0810 + 0.0000i 0.1794 + 0.7688i 0.1997 - 0.2212i -0.4099 - 0.6105i -0.0452 + 0.0920i 0.2510 + 0.0000i -0.0452 - 0.0920i -0.4099 + 0.6105i
  -0.6290 + 0.0000i -0.1634 + 0.4014i -0.0811 + 0.0315i 0.1384 - 0.2139i -0.2869 + 0.4296i 0.0650 + 0.0000i -0.2869 - 0.4296i 0.1384 + 0.2139i
  -0.1480 + 0.0000i 0.4013 + 0.4000i 0.4163 - 0.2029i -0.1063 - 0.4076i 0.0027 + 0.1795i 0.3400 + 0.0000i 0.0027 - 0.1795i -0.1063 + 0.4076i

```

---

<div class="post-metadata">

### Author: ![mgkuhn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mgkuhn/32/6276_2.png) [@mgkuhn](https://discourse.julialang.org/u/mgkuhn)
#### Post date: [June 23, 2021, 4:57pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/4 "2021-06-23T16:57:59Z")

</div>

Does the above answer your question?

---

<div class="post-metadata">

### Author: ![juls](https://avatars.discourse-cdn.com/v4/letter/j/ecc23a/32.png) [@juls](https://discourse.julialang.org/u/juls)
#### Post date: [June 23, 2021, 5:27pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/5 "2021-06-23T17:27:03Z")

</div>

Thank you, the c and d input matrices I am using are complex and am I getting little difference

```julia
c =

  Columns 1 through 5

  97.9713 + 0.0000i 3.7743 -90.6967i -70.9956 - 6.0008i -5.8363 +44.4675i 18.1929 + 3.5097i
  97.9619 + 0.0000i 3.7759 -90.6841i -70.9751 - 6.0029i -5.8372 +44.4393i 18.1620 + 3.5090i
  97.9337 + 0.0000i 3.7791 -90.6464i -70.9149 - 6.0057i -5.8356 +44.3569i 18.0727 + 3.5015i
  97.8861 + 0.0000i 3.7812 -90.5838i -70.8161 - 6.0049i -5.8257 +44.2231i 17.9287 + 3.4810i
  97.8153 + 0.0000i 3.7835 -90.4930i -70.6775 - 6.0029i -5.8118 +44.0387i 17.7319 + 3.4534i

  Columns 6 through 10

   0.1821 + 1.6917i 11.9049 + 2.6249i 3.7467 -12.7256i -7.3258 - 2.8909i -0.7121 + 0.1283i
   0.1806 + 1.7176i 11.9192 + 2.6249i 3.7430 -12.7262i -7.3161 - 2.8828i -0.7013 + 0.1158i
   0.1706 + 1.7907i 11.9568 + 2.6305i 3.7372 -12.7221i -7.2808 - 2.8632i -0.6726 + 0.0715i
   0.1455 + 1.9077i 12.0153 + 2.6483i 3.7360 -12.7122i -7.2198 - 2.8388i -0.6323 - 0.0040i
   0.1124 + 2.0667i 12.0940 + 2.6710i 3.7329 -12.6976i -7.1353 - 2.8048i -0.5774 - 0.1089i

```

d=

```julia
  Columns 1 through 5

   3.1922 + 0.0000i 0.3826 - 6.7552i -15.0138 - 1.4812i -3.4435 +23.5588i 30.5882 + 6.0793i

  Columns 6 through 10

   9.3782 -37.2328i -44.3985 -13.4759i -18.3235 +51.3590i 57.3788 +23.7564i 29.7857 -62.8610i

```

```julia
a = zeros(5,10);

for i = 1:5
    a(i,:) = ifft(c(i,:) .* d);
end

```

a in MATLAB:  
a =

```julia
   1.0e+02 *

  Columns 1 through 5

   0.0578 - 0.0712i 0.0089 + 0.0020i -0.1765 + 0.2240i -0.9484 + 0.7314i 2.4748 - 3.7660i
   0.0576 - 0.0718i 0.0085 + 0.0015i -0.1773 + 0.2235i -0.9504 + 0.7310i 2.4760 - 3.7627i
   0.0567 - 0.0735i 0.0070 - 0.0001i -0.1800 + 0.2221i -0.9567 + 0.7301i 2.4797 - 3.7510i
   0.0549 - 0.0762i 0.0043 - 0.0023i -0.1845 + 0.2200i -0.9670 + 0.7292i 2.4863 - 3.7306i
   0.0525 - 0.0799i 0.0005 - 0.0054i -0.1908 + 0.2173i -0.9809 + 0.7281i 2.4951 - 3.7025i

  Columns 6 through 10

   2.0623 - 0.3361i -0.6152 + 3.8925i -0.0011 - 0.3264i 0.1463 - 0.2339i 0.1185 - 0.1163i
   2.0594 - 0.3350i -0.6109 + 3.8924i -0.0006 - 0.3275i 0.1464 - 0.2346i 0.1184 - 0.1169i
   2.0529 - 0.3325i -0.5984 + 3.8916i 0.0005 - 0.3309i 0.1464 - 0.2369i 0.1180 - 0.1189i
   2.0440 - 0.3306i -0.5787 + 3.8899i 0.0020 - 0.3367i 0.1463 - 0.2408i 0.1171 - 0.1220i
   2.0318 - 0.3277i -0.5516 + 3.8872i 0.0040 - 0.3446i 0.1460 - 0.2461i 0.1158 - 0.1264i

```

In Julia,

a =

```julia
5×10 Array{Complex,2}:
 6.10126-7.5036im 1.08646-0.29492im … 12.2904-11.8982im
 6.0691-7.54846im 1.03751-0.332524im 12.2716-11.9514im
 5.95686-7.69857im 0.870022-0.454864im 12.205-12.1323im
 5.76391-7.94203im 0.587843-0.649582im 12.0858-12.4299im
 5.49364-8.27828im 0.194955-0.91658im 11.9176-12.8427im

```

---

<div class="post-metadata">

### Author: ![mgkuhn](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mgkuhn/32/6276_2.png) [@mgkuhn](https://discourse.julialang.org/u/mgkuhn)
#### Post date: [June 23, 2021, 5:50pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/6 "2021-06-23T17:50:20Z")

</div>

Do these examples have to be so big? Can you not show the problem with e.g. just a 2x4 matrix? And can you please include both the _full_ MATLAB and the _full_ Julia code that you used (including the assignments to c and d, as well as the using statement), such that we have nothing other to do than to copy&paste to reproduce exactly what you are getting? Otherwise trying to reproduce your matrices in Julia from your MATLAB outputs is quite labour intensive.

---

<div class="post-metadata">

### Author: ![roflmaostc](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/roflmaostc/32/30123_2.png) [@roflmaostc](https://discourse.julialang.org/u/roflmaostc)
#### Post date: [June 23, 2021, 6:17pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/7 "2021-06-23T18:17:35Z")

</div>

Julia always calculates the fft over all dimensions.

Maybe Matlab does that differently and you maybe need so specify over which dimensions you want to transform?

---

<div class="post-metadata">

### Author: ![apo383](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/apo383/32/11272_2.png) [@apo383](https://discourse.julialang.org/u/apo383)
#### Post date: [June 23, 2021, 7:56pm UTC](https://discourse.julialang.org/t/ifft-function-in-julia/63454/8 "2021-06-23T19:56:33Z")

</div>

@Sukera already answered almost the same question for `fft`, which boiled down to the fact that Matlab by default computes the `fft` for each column, whereas Julia computes a multi-dimensional one.

> [@Getting different output for fft function in julia and matlab](https://discourse.julialang.org/t/getting-different-output-for-fft-function-in-julia-and-matlab/63349/4):
>
> You can just give fft the dimensions: help?\> fft fft(A [, dims]) Performs a multidimensional FFT of the array A. The optional dims argument specifies an iterable subset of dimensions (e.g. an integer, range, tuple, or array) to transform along. [...] julia\> m …

The same applies to `ifft`. I’d like to gently suggest looking at the documentation, `?ifft` in Julia and `help ifft` in Matlab.
