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:
Java Program to Represent Graph Using Adjacency Matrix
Spring @Primary Annotation
Java Program to Implement Warshall Algorithm
Java Program to Implement Binomial Heap
Convert String to Byte Array and Reverse in Java
Prevent Brute Force Authentication Attempts with Spring Security
Simple Single Sign-On with Spring Security OAuth2
Java Program to Solve Travelling Salesman Problem for Unweighted Graph
A Guide to Queries in Spring Data MongoDB
Lớp Collectors trong Java 8
Java InputStream to String
Guide to BufferedReader
Command-Line Arguments in Java
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Simultaneous Spring WebClient Calls
New Features in Java 15
Practical Java Examples of the Big O Notation
Spring Boot - Enabling Swagger2
Unsatisfied Dependency in Spring
Java Program to Implement Johnson’s Algorithm
Custom Thread Pools In Java 8 Parallel Streams
Java Collections Interview Questions
LinkedHashSet trong Java hoạt động như thế nào?
Hướng dẫn sử dụng Printing Service trong Java
Spring Boot - Bootstrapping
Java Program to Implement the Hill Cypher
Documenting a Spring REST API Using OpenAPI 3.0
wait() and notify() Methods in Java
How to Kill a Java Thread
Java toString() Method
Guide to Java OutputStream
Java Program to Implement String Matching Using Vectors