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:
Constructor Dependency Injection in Spring
Static Content in Spring WebFlux
RegEx for matching Date Pattern in Java
Java Program to Use rand and srand Functions
Java Program to Implement Direct Addressing Tables
Guava Collections Cookbook
Java Program to Compute the Area of a Triangle Using Determinants
Spring Boot - Building RESTful Web Services
Guide to the Java TransferQueue
Java Program to Compute Cross Product of Two Vectors
String Initialization in Java
Spring’s RequestBody and ResponseBody Annotations
ETags for REST with Spring
Converting Java Date to OffsetDateTime
Adding a Newline Character to a String in Java
Java Program to Implement AttributeList API
LinkedHashSet trong java
Java Program to find the maximum subarray sum using Binary Search approach
Java Program to Implement the String Search Algorithm for Short Text Sizes
Introduction to the Java NIO2 File API
Java Program to Implement the MD5 Algorithm
Tạo số và chuỗi ngẫu nhiên trong Java
Join and Split Arrays and Collections in Java
Spring Boot with Multiple SQL Import Files
Java Program to Implement Repeated Squaring Algorithm
Tạo chương trình Java đầu tiên sử dụng Eclipse
Java Program to Implement Binomial Tree
The Guide to RestTemplate
New Features in Java 15
Lớp Arrarys trong Java (Arrays Utility Class)
Java Program to Implement Quick Sort with Given Complexity Constraint
HttpClient 4 Cookbook