TI-84 Plus Fast Fourier Transform
HAPPY NEW YEAR!
Introduction
The program FFT1 performs the fast Fourier transform of discrete data points named in List 1 (small x, signal at time points) to List 2 (big X, frequency), using the formula:
X_k = ∑( x_n * e^(-i*2*π*k*m)/n from m = 0 to n - 1)
For the set of n signals.
The program IFFT1, the Inverse Fast Fourier Transform, reverses the process (big X to small x, List 2 to List 1).
x_k = 1/n * ∑( x_n * e^(i*2*π*k*m)/n from m = 0 to n - 1)
TI-84 Plus Program FFT1
"FFT VERSION 1"
"EWS 2018-12-09"
Input "SMALL X LIST:",L₁
"SETUP"
dim(L₁)→N
L₁→L₂
a+bi
Radian
"LOOP"
For(M,0,N-1)
0→T
For(K,0,N-1)
T+L₁(K+1)*e^(-2*π*i*K*M/N)→T
End
T→L₂(M+1)
End
Pause L₂
TI-84 Plus Program IFFT1
"IFFT VERSION 1"
"EWS 2018-12-09"
Input "BIG X LIST:",L₂
"SETUP"
dim(L₂)→N
L₂→L₁
a+bi
Radian
"LOOP"
For(M,0,N-1)
0→T
For(K,0,N-1)
T+L₂(K+1)*e^(2*π*i*K*M/N)→T
End
T/N→T
T→L₁(M+1)
End
Pause L₁
Example
FFT Example:
L1 = {2i, 1+i, 3}
Result (Fix 4): {4.0000+3.0000*i, -1.1340+3.2321*i, -2.8660-0.2321*i}
Inverse FFT Example:
L2 = {0.5, -0.7i, 0.9+0.3i}
Result (Fix 4): {0.4667-0.1333*i, 0.3053-0.1931*i, -0.2720+0.3265*i}
Trigonometric Version
For calculators that do not handle complex numbers, here are the sample code that can handle FFT and IFFT. The techinque here is to use a pair of lists, one for the real parts, the other for imaginary parts. Example: {2, 3+3i, -2i} get split into {2, 3, 0} and {0, 3, -2}.
The following identities and calculation are used:
e^(i*θ) = cos θ + i * sin θ
(a + b*i)*e^(-i*θ)
= (a + b*i) * (cos θ - i * sin θ)
= a * cos θ + i * b * cos θ - i * a * sin θ + b * sin θ
= (a * cos θ + b * sin θ) + i * (b * cos θ - a * sin θ)
(a + b*i)*e^(i*θ)
= (a + b*i) * (cos θ + i * sin θ)
= a * cos θ + i * b * cos θ + i * a * sin θ - b * sin θ
= (a * cos θ - b * sin θ) + i * (b * cos θ + a * sin θ)
where θ = 2*π*m*k/n
HAPPY NEW YEAR!
Introduction
The program FFT1 performs the fast Fourier transform of discrete data points named in List 1 (small x, signal at time points) to List 2 (big X, frequency), using the formula:
X_k = ∑( x_n * e^(-i*2*π*k*m)/n from m = 0 to n - 1)
For the set of n signals.
The program IFFT1, the Inverse Fast Fourier Transform, reverses the process (big X to small x, List 2 to List 1).
x_k = 1/n * ∑( x_n * e^(i*2*π*k*m)/n from m = 0 to n - 1)
TI-84 Plus Program FFT1
"FFT VERSION 1"
"EWS 2018-12-09"
Input "SMALL X LIST:",L₁
"SETUP"
dim(L₁)→N
L₁→L₂
a+bi
Radian
"LOOP"
For(M,0,N-1)
0→T
For(K,0,N-1)
T+L₁(K+1)*e^(-2*π*i*K*M/N)→T
End
T→L₂(M+1)
End
Pause L₂
TI-84 Plus Program IFFT1
"IFFT VERSION 1"
"EWS 2018-12-09"
Input "BIG X LIST:",L₂
"SETUP"
dim(L₂)→N
L₂→L₁
a+bi
Radian
"LOOP"
For(M,0,N-1)
0→T
For(K,0,N-1)
T+L₂(K+1)*e^(2*π*i*K*M/N)→T
End
T/N→T
T→L₁(M+1)
End
Pause L₁
Example
FFT Example:
L1 = {2i, 1+i, 3}
Result (Fix 4): {4.0000+3.0000*i, -1.1340+3.2321*i, -2.8660-0.2321*i}
Inverse FFT Example:
L2 = {0.5, -0.7i, 0.9+0.3i}
Result (Fix 4): {0.4667-0.1333*i, 0.3053-0.1931*i, -0.2720+0.3265*i}
Trigonometric Version
For calculators that do not handle complex numbers, here are the sample code that can handle FFT and IFFT. The techinque here is to use a pair of lists, one for the real parts, the other for imaginary parts. Example: {2, 3+3i, -2i} get split into {2, 3, 0} and {0, 3, -2}.
The following identities and calculation are used:
e^(i*θ) = cos θ + i * sin θ
(a + b*i)*e^(-i*θ)
= (a + b*i) * (cos θ - i * sin θ)
= a * cos θ + i * b * cos θ - i * a * sin θ + b * sin θ
= (a * cos θ + b * sin θ) + i * (b * cos θ - a * sin θ)
(a + b*i)*e^(i*θ)
= (a + b*i) * (cos θ + i * sin θ)
= a * cos θ + i * b * cos θ + i * a * sin θ - b * sin θ
= (a * cos θ - b * sin θ) + i * (b * cos θ + a * sin θ)
where θ = 2*π*m*k/n
TI-84 Plus Program FFT1
"FFT VERSION 2"
"EWS 2018-12-10"
Disp "SMALL X","L₁ + I*L₂"
Input "REAL: ",L₁
Input "IMAG: ",L₂
"SETUP"
dim(L₁)→N
L₁→L₃
L₂→L₄
Radian
"LOOP"
For(M,0,N-1)
0→S
0→T
For(K,0,N-1)
2*π*M*K/N→θ
S+L₁(K+1)*cos(θ)+L₂(K+1)*sin(θ)→S
T+L₂(K+1)*cos(θ)-L₁(K+1)*sin(θ)→T
End
S→L₃(M+1)
T→L₄(M+1)
End
Disp "REAL = L₃","IMAG = L₄"
TI-84 Plus Program IFFT1
"IFFT VERSION 2"
"EWS 2018-12-10"
Disp "BIG X","L₃ + I*L₄"
Input "REAL: ",L₃
Input "IMAG: ",L₄
"SETUP"
dim(L₃)→N
L₃→L₁
L₄→L₂
Radian
"LOOP"
For(M,0,N-1)
0→S
0→T
For(K,0,N-1)
2*π*M*K/N→θ
S+L₃(K+1)*cos(θ)-L₄(K+1)*sin(θ)→S
T+L₄(K+1)*cos(θ)+L₃(K+1)*sin(θ)→T
End
S/N→S
T/N→T
S→L₁(M+1)
T→L₂(M+1)
End
Disp "REAL = L₁","IMAG = L₂"
Source:
"An Interactive Guide To The Fourier Transform" Better Explained. Retrieved December 9, 2018. https://betterexplained.com/articles/an-interactive-guide-to-the-fourier-transform/
All original content copyright, © 2011-2018. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author. Please contact the author if you have questions.