SigLib Example Program |
Witing programs using the SigLib DSP library is very easy, the API is designed to be as intuitive as possible. The complete function list and can be viewed on-line. All of the SigLib functions are split into logical groups with the following function prefixes:
SIF_ - SigLib initialisation function
SDA_ - SigLib data array oriented operation
SDS_ - SigLib data sample oriented operation
SCV_ - SigLib complex vector sample oriented operation
SMX_ - SigLib multi-dimensional matrix array oriented operation
SIM_ - SigLib image processing and coding operation
SUF_ - SigLib utility function
As an example, the following show how to use the FIR filter functions:
SIF_Fir - Initialise the FIR filter functionality
SDS_Fir - Perform the FIR filter on the sample oriented data stream
SDA_Fir - Perform the FIR filter on the array oriented data stream
The following is an example program that performs windowing, FFT and square magnitude power calculation on the input data set:
/* SigLib FFT and Hanning window test program */ /* Include files */ #include <math.h> #include <stdlib.h> #include <siglib.h> /* Define constants */ #define FFT_SIZE 512 #define LOG_FFT_SIZE 9 #define WINDOW_SIZE FFT_SIZE #define SIGNAL_MAGNITUDE 1.0 #define SIGNAL_FREQUENCY 0.019 /* Normalised to 1.0 Hz */ /* Define global variables */ SFLOAT *pRealData, *pImagData, *pWindowCoeffs, *pResultsData, *pFFTCoeffs; SFLOAT SinePhase; void main (void) { SFIX SigLibErrorCode; pRealData = SUF_VectorArrayAllocate (FFT_SIZE);\ /* Allocate data arrays */ pImagData = SUF_VectorArrayAllocate (FFT_SIZE); pFFTCoeffs = SUF_FftCoefficientAllocate (FFT_SIZE); pResultsData = SUF_VectorArrayAllocate (FFT_SIZE); /* RMS result data array */ pWindowCoeffs = SUF_VectorArrayAllocate (WINDOW_SIZE); /* Window data array */ SigLibErrorCode = SIF_Fft (pFFTCoeffs, SIGLIB_NULL_SFIX_PTR, FFT_SIZE); /* Init. FFT */ if (SigLibErrorCode != SIGLIB_NO_ERROR) { SUF_Halt; /* Halt on error */ } SinePhase = SIGLIB_ZERO; /* Generate signal for FFT input */ SDA_SignalGenerate (pRealData, SIGLIB_SINE_WAVE, SIGNAL_MAGNITUDE, SIGLIB_FILL, SIGNAL_FREQUENCY, SIGLIB_ZERO, SIGLIB_ZERO, SIGLIB_ZERO, &SinePhase, SIGLIB_NULL_SFLOAT_PTR, FFT_SIZE); SIF_Window (pWindowCoeffs, SIGLIB_HANNING, FFT_SIZE); /* Generate Hanning window table */ SDA_Window (pRealData, pRealData, pWindowCoeffs, WINDOW_SIZE); /* Apply window to data */ /* Perform FFT */ SDA_Rfft (pRealData, pImagData, pFFTCoeffs, SIGLIB_NULL_SFIX_PTR, FFT_SIZE, LOG_FFT_SIZE); /* Scale output for display */ SDA_Divide (pRealData, pRealData, ((SFLOAT)FFT_SIZE), FFT_SIZE); SDA_Divide (pImagData, pImagData, ((SFLOAT)FFT_SIZE), FFT_SIZE); SDA_RmsPower (pRealData, pImagData, pResultsData, FFT_SIZE); /* Calc real power */ SUF_MemoryFree (pRealData); /* Free memory */ SUF_MemoryFree (pImagData); SUF_MemoryFree (pResultsData); SUF_MemoryFree (pWindowCoeffs); } |
One of the great things about SigLib is that this program can be re-compiled and used on any of the supported processors without modification. SigLib is also supported by over 80 example programs showing how to use all of the functionality of the library and it is supplied with full documentation.
|
Copyright© 2022 Sigma Numerix Ltd..
Permission is granted to create WWW pointers to this document. |