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:
Spring WebClient vs. RestTemplate
Template Engines for Spring
Java Program to find the maximum subarray sum O(n^2) time(naive method)
Base64 encoding và decoding trong Java 8
Java Program to Implement Double Ended Queue
How to Remove the Last Character of a String?
Java Program to Implement Sorted Doubly Linked List
Java Program to Implement Sorted Singly Linked List
Spring – Injecting Collections
Transaction Propagation and Isolation in Spring @Transactional
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Java Program to Implement Stack using Two Queues
Tìm hiểu về Web Service
Java Program to Print only Odd Numbered Levels of a Tree
Converting Strings to Enums in Java
Java Program to Implement Quick Sort Using Randomization
Creating a Web Application with Spring 5
Introduction to PCollections
Java Deep Learning Essentials - Yusuke Sugomori
Java Program to Check Whether Graph is DAG
Simple Single Sign-On with Spring Security OAuth2
Optional trong Java 8
Phân biệt JVM, JRE, JDK
Java 14 Record Keyword
Từ khóa static và final trong java
ThreadPoolTaskExecutor corePoolSize vs. maxPoolSize
Life Cycle of a Thread in Java
Java Program to Represent Linear Equations in Matrix Form
Spring Boot - Tomcat Port Number
Test a REST API with Java
Java – Random Long, Float, Integer and Double
Java Program to Implement Dijkstra’s Algorithm using Queue