This is the java implementation of performing Discrete Fourier Transform using Fast Fourier Transform algorithm. This class finds the DFT of N (power of 2) complex elements, generated randomly, using FFT. The input to the class is a two dimensional array of sequence.
Here is the source code of the Java Perform to a 2D FFT Inplace Given a Complex 2D Array. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a sample program to perform 2D FFT inplace
import java.util.Scanner;
public class TwoD_FFT
{
static void twoDfft(double[][] inputData, double[][] realOut,
double[][] imagOut, double[][] amplitudeOut)
{
int height = inputData.length;
int width = inputData[0].length;
// Two outer loops iterate on output data.
for (int yWave = 0; yWave < height; yWave++)
{
for (int xWave = 0; xWave < width; xWave++)
{
// Two inner loops iterate on input data.
for (int ySpace = 0; ySpace < height; ySpace++)
{
for (int xSpace = 0; xSpace < width; xSpace++)
{
// Compute real, imag, and ampltude.
realOut[yWave][xWave] += (inputData[ySpace][xSpace] * Math
.cos(2
* Math.PI
* ((1.0 * xWave * xSpace / width) + (1.0
* yWave * ySpace / height))))
/ Math.sqrt(width * height);
imagOut[yWave][xWave] -= (inputData[ySpace][xSpace] * Math
.sin(2
* Math.PI
* ((1.0 * xWave * xSpace / width) + (1.0
* yWave * ySpace / height))))
/ Math.sqrt(width * height);
amplitudeOut[yWave][xWave] = Math
.sqrt(realOut[yWave][xWave]
* realOut[yWave][xWave]
+ imagOut[yWave][xWave]
* imagOut[yWave][xWave]);
}
System.out.println(realOut[yWave][xWave] + " + "
+ imagOut[yWave][xWave] + " i");
}
}
}
}
public static void main(String args[])
{
System.out.println("Enter the size: ");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double[][] input = new double[n][n];
double[][] real = new double[n][n];
double[][] img = new double[n][n];
double[][] amplitutude = new double[n][n];
System.out.println("Enter the 2D elements ");
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
input[i][j] = sc.nextDouble();
twoDfft(input, real, img, amplitutude);
sc.close();
}
}
Output:
$ javac TwoD_FFT.java $ java TwoD_FFT Enter the size: 2 Enter the 2D elements 2 3 4 2 2.5 + 0.0 i 5.5 + 0.0 i -0.5 + -1.8369701987210297E-16 i 0.5 + -3.0616169978683826E-16 i 2.5 + 0.0 i -0.5 + -3.6739403974420594E-16 i -0.5 + -1.8369701987210297E-16 i -1.5 + -1.8369701987210297E-16 i
Related posts:
Hướng dẫn sử dụng lớp Console trong java
Java Program to Implement the MD5 Algorithm
Hướng dẫn Java Design Pattern – Bridge
Java Program to Implement Tarjan Algorithm
Converting String to Stream of chars
Java Program to Implement Kosaraju Algorithm
Java – Random Long, Float, Integer and Double
Java Program to Implement Attribute API
Spring Security – security none, filters none, access permitAll
Converting Java Date to OffsetDateTime
HttpClient Basic Authentication
Java InputStream to Byte Array and ByteBuffer
LIKE Queries in Spring JPA Repositories
Java Program to Implement Hash Tables with Quadratic Probing
Auditing with JPA, Hibernate, and Spring Data JPA
Spring Data Reactive Repositories with MongoDB
Java Program to Implement Self organizing List
Java Program to Implement IdentityHashMap API
Java Program to Implement Shunting Yard Algorithm
Guide To CompletableFuture
Spring Cloud – Tracing Services with Zipkin
Java Program to Implement ArrayBlockingQueue API
“Stream has already been operated upon or closed” Exception in Java
Java List UnsupportedOperationException
Functional Interface trong Java 8
Add Multiple Items to an Java ArrayList
Java Program to Implement Weight Balanced Tree
Java Program to Implement Variable length array
Guide to Spring Cloud Kubernetes
Encode/Decode to/from Base64
Working with Network Interfaces in Java
Spring Boot Configuration with Jasypt