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 Implement Gauss Jordan Elimination
Thực thi nhiều tác vụ cùng lúc như thế nào trong Java?
Java CyclicBarrier vs CountDownLatch
Feign – Tạo ứng dụng Java RESTful Client
Java Program to Implement Rope
Weak References in Java
Converting a Stack Trace to a String in Java
Compact Strings in Java 9
Guide to the Fork/Join Framework in Java
Java 8 Stream findFirst() vs. findAny()
Java Program to Implement Disjoint Sets
Java Program to Solve the 0-1 Knapsack Problem
Jackson – Bidirectional Relationships
An Intro to Spring Cloud Contract
Java Program to Implement Hash Trie
Java Program to Implement Hash Tables chaining with Singly Linked Lists
Java Program to Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Date Time trong Java 8
Java Program to Implement ScapeGoat Tree
Java Program to Implement Sorted Circular Doubly Linked List
Java Program to Implement AttributeList API
Getting the Size of an Iterable in Java
Shuffling Collections In Java
Creating Docker Images with Spring Boot
Spring Boot - Tomcat Deployment
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Generate Spring Boot REST Client with Swagger
Spring Security Registration – Resend Verification Email
Setting a Request Timeout for a Spring REST API
Java Program to Implement Ternary Search Tree
Setting the Java Version in Maven
How to Get All Dates Between Two Dates?