| GStreamer Base Plugins 0.10 Library Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | ||||
#include <gst/fft/gstffts32.h>
GstFFTS32;
GstFFTS32Complex;
GstFFTS32 * gst_fft_s32_new (gint len,
gboolean inverse);
void gst_fft_s32_fft (GstFFTS32 *self,
const gint32 *timedata,
GstFFTS32Complex *freqdata);
void gst_fft_s32_inverse_fft (GstFFTS32 *self,
const GstFFTS32Complex *freqdata,
gint32 *timedata);
void gst_fft_s32_window (GstFFTS32 *self,
gint32 *timedata,
GstFFTWindow window);
void gst_fft_s32_free (GstFFTS32 *self);
GstFFTS32 provides a FFT implementation and related functions for
signed 32 bit integer samples. To use this call gst_fft_s32_new() for
allocating a GstFFTS32 instance with the appropiate parameters and
then call gst_fft_s32_fft() or gst_fft_s32_inverse_fft() to perform the
FFT or inverse FFT on a buffer of samples.
After use free the GstFFTS32 instance with gst_fft_s32_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_s32_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_s32_window() can comfortably
be used.
Be aware, that you can't simply run gst_fft_s32_inverse_fft() on the
resulting frequency data of gst_fft_s32_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.
typedef struct {
gint32 r;
gint32 i;
} GstFFTS32Complex;
Data type for complex numbers composed of signed 32 bit integers.
GstFFTS32 * gst_fft_s32_new (gint len, gboolean inverse);
This returns a new GstFFTS32 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().
void gst_fft_s32_fft (GstFFTS32 *self, const gint32 *timedata, GstFFTS32Complex *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 GstFFTS32 instance with gst_fft_s32_new().
freqdata must be large enough to hold len/2 + 1 GstFFTS32Complex frequency
domain samples.
|
GstFFTS32 instance for this call |
|
Buffer of the samples in the time domain |
|
Target buffer for the samples in the frequency domain |
void gst_fft_s32_inverse_fft (GstFFTS32 *self, const GstFFTS32Complex *freqdata, gint32 *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 GstFFTS32 instance with gst_fft_s32_new().
timedata must be large enough to hold len time domain samples.
|
GstFFTS32 instance for this call |
|
Buffer of the samples in the frequency domain |
|
Target buffer for the samples in the time domain |
void gst_fft_s32_window (GstFFTS32 *self, gint32 *timedata, GstFFTWindow window);
This calls the window function window on the timedata sample buffer.
|
GstFFTS32 instance for this call |
|
Time domain samples |
|
Window function to apply |