[TOC]
Imports System
Imports System.Globalization
Imports System.Threading
Imports System.Text
Imports CenterSpace.NMath.Core
Namespace CenterSpace.NMath.Core.Examples.VisualBasic
' .NET example in VB.NET showing how to use the 2D Fast Fourier Transform (FFT) Modules.
Module FFT2DExample
Sub Main()
'
' Compute a small out-of-place forward complex 2D FFT matrices.
'
' Create some random signal data.
Dim Rand As RandomNumberGenerator = New RandGenMTwist(4230987)
Dim data2Dcomplex As New DoubleComplexMatrix(New DoubleMatrix(6, 4, Rand), New DoubleMatrix(6, 4, Rand))
' Create the 2D forward complex FFT instance & the fft resultant matrix.
Dim cfft6x4 As New DoubleComplexForward2DFFT(6, 4)
Dim cfftdata As New DoubleComplexMatrix(cfft6x4.Rows, cfft6x4.Columns)
' Compute the 2D FFT.
cfft6x4.FFT(data2Dcomplex, cfftdata)
' Display results.
Dim SB As New StringBuilder
Console.WriteLine("2D 6x4 complex FFT result: " + Environment.NewLine)
Dim C, R As Integer
For R = 0 To cfft6x4.Rows - 1
For C = 0 To cfft6x4.Columns - 1
Console.Write(String.Format("({0,5:0.00},{1,5:0.00}) ", cfftdata(R, C).Real, cfftdata(R, C).Imag))
Next C
Console.WriteLine()
Next R
Console.WriteLine("-----------------------------------" + Environment.NewLine)
'
' Compute a small out-of-place forward 2D FFT in the real plane using matrices.
'
' Create a signal matrix using a random number generator.
Dim Rand2 As RandomNumberGenerator = New RandGenMTwist(4230987)
Dim data2D As New DoubleMatrix(5, 5, Rand2)
' Create the 2D forward real FFT instance & the fft resultant matrix.
Dim fft5x5 As New DoubleForward2DFFT(5, 5)
Dim FFTData As New DoubleMatrix(fft5x5.Rows, fft5x5.Columns)
' Compute the 2D FFT.
fft5x5.FFT(data2D, FFTData)
' Now retrieve the unpacked fft result.
' (The results are packed because the input data is in the real domain, but the output
' is in the complex domain. using the complex-conjugate symmety of a real fft, we can pack
' the fft back into an array of the same size as the input.)
' First get a data reader to read the packed fft result.
Dim Reader2D As DoubleSymmetric2DSignalReader = fft5x5.GetSignalReader(FFTData)
Dim Result As DoubleComplexMatrix = Reader2D.UnpackFullToMatrix()
' Display results.
Console.WriteLine("2D 5x5 real FFT result: " & Environment.NewLine)
For R = 0 To fft5x5.Rows - 1
For C = 0 To fft5x5.Columns - 1
Console.WriteLine(String.Format("({0,5:0.00},{1,5:0.00}) ", Result(R, C).Real, Result(R, C).Imag))
Next
Console.WriteLine()
Next
Console.WriteLine("-----------------------------------" + Environment.NewLine)
Console.WriteLine()
Console.WriteLine("Finished. Press Enter Key.")
Console.Read()
End Sub
End Module
End Namespace
[TOC]