Discussion:
[Numpy-discussion] FFT and reconstruct
Vasco Gervasi
2016-05-14 13:27:14 UTC
Permalink
Hi all,
I am trying to understand how FFT work, so I wrote the attached script.
The idea is to extract amplitude and phase of a signal and then reconstruct
using amplitude and phase information.
As you can see, I create some cosine curve on the interval t0-t1.
Let's start with t0=1.0 and t1=3.0 and consider just y['1']
= cos(1.0*omega*t), the signal is.
[image: Immagine incorporata 1]
The amplitude and phase for each order are:
[image: Immagine incorporata 2]
But if I try to reconstruct the signal using amplitude and phase:
[image: Immagine incorporata 3]
So as you can see there is a shifting of 180 deg.

Now let's consider another case, t0=2 and t1=3, the signal is
y['Signal'] = 1.0*cos(1.0*omega*t) + 2.0*cos(2.0*omega*t) +
3.0*cos(3.0*omega*t + pi/4) + 4.0*cos(4.0*omega*t) + 5.0*cos(5.0*omega*t) +
1.0
The reconstructed signal is very similar to the initial one:
[image: Immagine incorporata 4]
but is not exactly the same.
Any advice?

Thanks
Feng Yu
2016-05-16 06:46:18 UTC
Permalink
Hi Vasco,

It looks slightly strange that you are using cos instead of exp in the
reconstruction of the signal.

I'd recommend you take a look at
http://docs.scipy.org/doc/numpy-1.10.1/reference/routines.fft.html

Also the documents of fftfreq, fftshift, and ifft.

Best,

- Yu
Post by Vasco Gervasi
Hi all,
I am trying to understand how FFT work, so I wrote the attached script.
The idea is to extract amplitude and phase of a signal and then
reconstruct using amplitude and phase information.
As you can see, I create some cosine curve on the interval t0-t1.
Let's start with t0=1.0 and t1=3.0 and consider just y['1']
= cos(1.0*omega*t), the signal is.
[image: Immagine incorporata 1]
[image: Immagine incorporata 2]
[image: Immagine incorporata 3]
So as you can see there is a shifting of 180 deg.
Now let's consider another case, t0=2 and t1=3, the signal is
y['Signal'] = 1.0*cos(1.0*omega*t) + 2.0*cos(2.0*omega*t) +
3.0*cos(3.0*omega*t + pi/4) + 4.0*cos(4.0*omega*t) + 5.0*cos(5.0*omega*t) +
1.0
[image: Immagine incorporata 4]
but is not exactly the same.
Any advice?
Thanks
_______________________________________________
NumPy-Discussion mailing list
https://mail.scipy.org/mailman/listinfo/numpy-discussion
Vasco Gervasi
2016-05-16 19:27:27 UTC
Permalink
I would like to use cos, to reconstruct the signal, to verify phase angle.
I will try ifft.

Thanks,
Post by Feng Yu
Hi Vasco,
It looks slightly strange that you are using cos instead of exp in the
reconstruction of the signal.
I'd recommend you take a look at
http://docs.scipy.org/doc/numpy-1.10.1/reference/routines.fft.html
Also the documents of fftfreq, fftshift, and ifft.
Best,
- Yu
Post by Vasco Gervasi
Hi all,
I am trying to understand how FFT work, so I wrote the attached script.
The idea is to extract amplitude and phase of a signal and then
reconstruct using amplitude and phase information.
As you can see, I create some cosine curve on the interval t0-t1.
Let's start with t0=1.0 and t1=3.0 and consider just y['1']
= cos(1.0*omega*t), the signal is.
[image: Immagine incorporata 1]
[image: Immagine incorporata 2]
[image: Immagine incorporata 3]
So as you can see there is a shifting of 180 deg.
Now let's consider another case, t0=2 and t1=3, the signal is
y['Signal'] = 1.0*cos(1.0*omega*t) + 2.0*cos(2.0*omega*t) +
3.0*cos(3.0*omega*t + pi/4) + 4.0*cos(4.0*omega*t) + 5.0*cos(5.0*omega*t) +
1.0
[image: Immagine incorporata 4]
but is not exactly the same.
Any advice?
Thanks
_______________________________________________
NumPy-Discussion mailing list
https://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________
NumPy-Discussion mailing list
https://mail.scipy.org/mailman/listinfo/numpy-discussion
Vasco Gervasi
2016-05-21 05:47:38 UTC
Permalink
Maybe I found the problems;

1. t0=1.0, t1=3.0, y['1'] = cos(1.0*omega*t): I have to reconstruct the
signal using
yRec += a * cos(omega*i*(t-t0) + f)
not
yRec += a * cos(omega*i*t + f)
2. t0=2, t1=3, y['Signal'] = 1.0*cos(1.0*omega*t) + ... +
5.0*cos(5.0*omega*t) + 1.0: starting point and end point must not be the
same, so to generate the signal I have to use
t = linspace(t0, t1, 1000, endpoint=False)
not
t = linspace(t0, t1, 1000)
Thanks

Loading...