gstffts16

gstffts16 — FFT functions for signed 16 bit integer samples

Synopsis


#include <gst/fft/gstffts16.h>

                    GstFFTS16;
                    GstFFTS16Complex;
GstFFTS16*          gst_fft_s16_new                     (gint len,
                                                         gboolean inverse);
void                gst_fft_s16_fft                     (GstFFTS16 *self,
                                                         const gint16 *timedata,
                                                         GstFFTS16Complex *freqdata);
void                gst_fft_s16_inverse_fft             (GstFFTS16 *self,
                                                         const GstFFTS16Complex *freqdata,
                                                         gint16 *timedata);
void                gst_fft_s16_window                  (GstFFTS16 *self,
                                                         gint16 *timedata,
                                                         GstFFTWindow window);
void                gst_fft_s16_free                    (GstFFTS16 *self);

Description

GstFFTS16 provides a FFT implementation and related functions for signed 16 bit integer samples. To use this call gst_fft_s16_new() for allocating a GstFFTS16 instance with the appropiate parameters and then call gst_fft_s16_fft() or gst_fft_s16_inverse_fft() to perform the FFT or inverse FFT on a buffer of samples.

After use free the GstFFTS16 instance with gst_fft_s16_free().

For the best performance use gst_fft_next_fast_length() to get a number that is entirely a product of 2, 3 and 5 and use this as the len parameter for gst_fft_s16_new().

The len parameter specifies the number of samples in the time domain that will be processed or generated. The number of samples in the frequency domain is len/2 + 1. To get n samples in the frequency domain use 2*n - 2 as len.

Before performing the FFT on time domain data it usually makes sense to apply a window function to it. For this gst_fft_s16_window() can comfortably be used.

Be aware, that you can't simply run gst_fft_s16_inverse_fft() on the resulting frequency data of gst_fft_s16_fft() to get the original data back. The relation between them is iFFT (FFT (x)) = x / nfft where nfft is the length of the FFT. This also has to be taken into account when calculation the magnitude of the frequency data.

Details

GstFFTS16

typedef struct {
} GstFFTS16;

Instance structure for GstFFTS16.


GstFFTS16Complex

typedef struct {
  gint16 r;
  gint16 i;
} GstFFTS16Complex;

Data type for complex numbers composed of signed 16 bit integers.

gint16 r; Real part
gint16 i; Imaginary part

gst_fft_s16_new ()

GstFFTS16*          gst_fft_s16_new                     (gint len,
                                                         gboolean inverse);

This returns a new GstFFTS16 instance with the given parameters. It makes sense to keep one instance for several calls for speed reasons.

len must be even and to get the best performance a product of 2, 3 and 5. To get the next number with this characteristics use gst_fft_next_fast_length().

len : Length of the FFT in the time domain
inverse : TRUE if the GstFFTS16 instance should be used for the inverse FFT
Returns : a new GstFFTS16 instance.

gst_fft_s16_fft ()

void                gst_fft_s16_fft                     (GstFFTS16 *self,
                                                         const gint16 *timedata,
                                                         GstFFTS16Complex *freqdata);

This performs the FFT on timedata and puts the result in freqdata.

timedata must have as many samples as specified with the len parameter while allocating the GstFFTS16 instance with gst_fft_s16_new().

freqdata must be large enough to hold len/2 + 1 GstFFTS16Complex frequency domain samples.

self : GstFFTS16 instance for this call
timedata : Buffer of the samples in the time domain
freqdata : Target buffer for the samples in the frequency domain

gst_fft_s16_inverse_fft ()

void                gst_fft_s16_inverse_fft             (GstFFTS16 *self,
                                                         const GstFFTS16Complex *freqdata,
                                                         gint16 *timedata);

This performs the inverse FFT on freqdata and puts the result in timedata.

freqdata must have len/2 + 1 samples, where len is the parameter specified while allocating the GstFFTS16 instance with gst_fft_s16_new().

timedata must be large enough to hold len time domain samples.

self : GstFFTS16 instance for this call
freqdata : Buffer of the samples in the frequency domain
timedata : Target buffer for the samples in the time domain

gst_fft_s16_window ()

void                gst_fft_s16_window                  (GstFFTS16 *self,
                                                         gint16 *timedata,
                                                         GstFFTWindow window);

This calls the window function window on the timedata sample buffer.

self : GstFFTS16 instance for this call
timedata : Time domain samples
window : Window function to apply

gst_fft_s16_free ()

void                gst_fft_s16_free                    (GstFFTS16 *self);

This frees the memory allocated for self.

self : GstFFTS16 instance for this call