VB FFT2 D Example

← All NMath Code Examples


Imports System
Imports System.Globalization
Imports System.Threading
Imports System.Text

Imports CenterSpace.NMath.Core

Namespace CenterSpace.NMath.Core.Examples.VisualBasic

  ' A .NET example in Visual Basic 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
      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 symmetry 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.Write(String.Format("({0,5:0.00},{1,5:0.00}) ", Result(R, C).Real, Result(R, C).Imag))

      Console.WriteLine("-----------------------------------" + Environment.NewLine)

      Console.WriteLine("Finished. Press Enter Key.")

    End Sub
  End Module
End Namespace

← All NMath Code Examples