NMSIS-DSP  Version 1.0.1
NMSIS DSP Software Library
Modules
Here is a list of all modules:
[detail level 1234]
 Basic Math Functions
 Vector Absolute ValueComputes the absolute value of a vector on an element-by-element basis
 Vector AdditionElement-by-element addition of two vectors
 Vector Dot ProductComputes the dot product of two vectors. The vectors are multiplied element-by-element and then summed
 Vector MultiplicationElement-by-element multiplication of two vectors
 Vector NegateNegates the elements of a vector
 Vector OffsetAdds a constant offset to each element of a vector
 Vector ScaleMultiply a vector by a scalar value. For floating-point data, the algorithm used is:
 Vector ShiftShifts the elements of a fixed-point vector by a specified number of bits. There are separate functions for Q7, Q15, and Q31 data types. The underlying algorithm used is:
 Vector SubtractionElement-by-element subtraction of two vectors
 Fast Math FunctionsThis set of functions provides a fast approximation to sine, cosine, and square root. As compared to most of the other functions in the NMSIS math library, the fast math functions operate on individual values and not arrays. There are separate functions for Q15, Q31, and floating-point data
 Square RootComputes the square root of a number. There are separate functions for Q15, Q31, and floating-point data types. The square root function is computed using the Newton-Raphson algorithm. This is an iterative algorithm of the form:
 CosineComputes the trigonometric cosine function using a combination of table lookup and linear interpolation. There are separate functions for Q15, Q31, and floating-point data types. The input to the floating-point version is in radians while the fixed-point Q15 and Q31 have a scaled input with the range [0 +0.9999] mapping to [0 2*pi). The fixed-point range is chosen so that a value of 2*pi wraps around to 0
 SineComputes the trigonometric sine function using a combination of table lookup and linear interpolation. There are separate functions for Q15, Q31, and floating-point data types. The input to the floating-point version is in radians while the fixed-point Q15 and Q31 have a scaled input with the range [0 +0.9999] mapping to [0 2*pi). The fixed-point range is chosen so that a value of 2*pi wraps around to 0
 Complex Math FunctionsThis set of functions operates on complex data vectors. The data in the complex arrays is stored in an interleaved fashion (real, imag, real, imag, ...). In the API functions, the number of samples in a complex array refers to the number of complex values; the array contains twice this number of real values
 Complex ConjugateConjugates the elements of a complex data vector
 Complex Dot ProductComputes the dot product of two complex vectors. The vectors are multiplied element-by-element and then summed
 Complex MagnitudeComputes the magnitude of the elements of a complex data vector
 Complex Magnitude SquaredComputes the magnitude squared of the elements of a complex data vector
 Complex-by-Complex MultiplicationMultiplies a complex vector by another complex vector and generates a complex result. The data in the complex arrays is stored in an interleaved fashion (real, imag, real, imag, ...). The parameter numSamples represents the number of complex samples processed. The complex arrays have a total of 2*numSamples real values
 Complex-by-Real MultiplicationMultiplies a complex vector by a real vector and generates a complex result. The data in the complex arrays is stored in an interleaved fashion (real, imag, real, imag, ...). The parameter numSamples represents the number of complex samples processed. The complex arrays have a total of 2*numSamples real values while the real array has a total of numSamples real values
 Filtering Functions
 High Precision Q31 Biquad Cascade FilterThis function implements a high precision Biquad cascade filter which operates on Q31 data values. The filter coefficients are in 1.31 format and the state variables are in 1.63 format. The double precision state variables reduce quantization noise in the filter and provide a cleaner output. These filters are particularly useful when implementing filters in which the singularities are close to the unit circle. This is common for low pass or high pass filters with very low cutoff frequencies
 Biquad Cascade IIR Filters Using Direct Form I StructureThis set of functions implements arbitrary order recursive (IIR) filters. The filters are implemented as a cascade of second order Biquad sections. The functions support Q15, Q31 and floating-point data types. Fast version of Q15 and Q31 also available
 Biquad Cascade IIR Filters Using a Direct Form II Transposed StructureThis set of functions implements arbitrary order recursive (IIR) filters using a transposed direct form II structure. The filters are implemented as a cascade of second order Biquad sections. These functions provide a slight memory savings as compared to the direct form I Biquad filter functions. Only floating-point data is supported
 ConvolutionConvolution is a mathematical operation that operates on two finite length vectors to generate a finite length output vector. Convolution is similar to correlation and is frequently used in filtering and data analysis. The NMSIS DSP library contains functions for convolving Q7, Q15, Q31, and floating-point data types. The library also provides fast versions of the Q15 and Q31 functions
 Partial ConvolutionPartial Convolution is equivalent to Convolution except that a subset of the output samples is generated. Each function has two additional arguments. firstIndex specifies the starting index of the subset of output samples. numPoints is the number of output samples to compute. The function computes the output in the range [firstIndex, ..., firstIndex+numPoints-1]. The output array pDst contains numPoints values
 CorrelationCorrelation is a mathematical operation that is similar to convolution. As with convolution, correlation uses two signals to produce a third signal. The underlying algorithms in correlation and convolution are identical except that one of the inputs is flipped in convolution. Correlation is commonly used to measure the similarity between two signals. It has applications in pattern recognition, cryptanalysis, and searching. The NMSIS library provides correlation functions for Q7, Q15, Q31 and floating-point data types. Fast versions of the Q15 and Q31 functions are also provided
 Finite Impulse Response (FIR) DecimatorThese functions combine an FIR filter together with a decimator. They are used in multirate systems for reducing the sample rate of a signal without introducing aliasing distortion. Conceptually, the functions are equivalent to the block diagram below:
 Finite Impulse Response (FIR) FiltersThis set of functions implements Finite Impulse Response (FIR) filters for Q7, Q15, Q31, and floating-point data types. Fast versions of Q15 and Q31 are also provided. The functions operate on blocks of input and output data and each call to the function processes blockSize samples through the filter. pSrc and pDst points to input and output arrays containing blockSize values
 Finite Impulse Response (FIR) Lattice FiltersThis set of functions implements Finite Impulse Response (FIR) lattice filters for Q15, Q31 and floating-point data types. Lattice filters are used in a variety of adaptive filter applications. The filter structure is feedforward and the net impulse response is finite length. The functions operate on blocks of input and output data and each call to the function processes blockSize samples through the filter. pSrc and pDst point to input and output arrays containing blockSize values
 Finite Impulse Response (FIR) Sparse FiltersThis group of functions implements sparse FIR filters. Sparse FIR filters are equivalent to standard FIR filters except that most of the coefficients are equal to zero. Sparse filters are used for simulating reflections in communications and audio applications
 Infinite Impulse Response (IIR) Lattice FiltersThis set of functions implements lattice filters for Q15, Q31 and floating-point data types. Lattice filters are used in a variety of adaptive filter applications. The filter structure has feedforward and feedback components and the net impulse response is infinite length. The functions operate on blocks of input and output data and each call to the function processes blockSize samples through the filter. pSrc and pDst point to input and output arrays containing blockSize values
 Least Mean Square (LMS) FiltersLMS filters are a class of adaptive filters that are able to "learn" an unknown transfer functions. LMS filters use a gradient descent method in which the filter coefficients are updated based on the instantaneous error signal. Adaptive filters are often used in communication systems, equalizers, and noise removal. The NMSIS DSP Library contains LMS filter functions that operate on Q15, Q31, and floating-point data types. The library also contains normalized LMS filters in which the filter coefficient adaptation is indepedent of the level of the input signal
 Normalized LMS FiltersThis set of functions implements a commonly used adaptive filter. It is related to the Least Mean Square (LMS) adaptive filter and includes an additional normalization factor which increases the adaptation rate of the filter. The NMSIS DSP Library contains normalized LMS filter functions that operate on Q15, Q31, and floating-point data types
 Finite Impulse Response (FIR) InterpolatorThese functions combine an upsampler (zero stuffer) and an FIR filter. They are used in multirate systems for increasing the sample rate of a signal without introducing high frequency images. Conceptually, the functions are equivalent to the block diagram below:
 Matrix FunctionsThis set of functions provides basic matrix math operations. The functions operate on matrix data structures. For example, the type definition for the floating-point matrix structure is shown below:
 Matrix AdditionAdds two matrices
 Complex Matrix MultiplicationComplex Matrix multiplication is only defined if the number of columns of the first matrix equals the number of rows of the second matrix. Multiplying an M x N matrix with an N x P matrix results in an M x P matrix
 Matrix InitializationInitializes the underlying matrix data structure. The functions set the numRows, numCols, and pData fields of the matrix data structure
 Matrix InverseComputes the inverse of a matrix
 Matrix MultiplicationMultiplies two matrices
 Matrix ScaleMultiplies a matrix by a scalar. This is accomplished by multiplying each element in the matrix by the scalar. For example:
 Matrix SubtractionSubtract two matrices
 Matrix TransposeTranposes a matrix
 Transform Functions
 Complex FFT Functions
 Complex FFT Tables
 DCT Type IV Tables
 DCT Type IV FunctionsRepresentation of signals by minimum number of values is important for storage and transmission. The possibility of large discontinuity between the beginning and end of a period of a signal in DFT can be avoided by extending the signal so that it is even-symmetric. Discrete Cosine Transform (DCT) is constructed such that its energy is heavily concentrated in the lower part of the spectrum and is very widely used in signal and image coding applications. The family of DCTs (DCT type- 1,2,3,4) is the outcome of different combinations of homogeneous boundary conditions. DCT has an excellent energy-packing capability, hence has many applications and in data compression in particular
 DCT Type IV Tables
 Real FFT Functions
 Real FFT Tables
 Controller Functions
 PID Motor ControlA Proportional Integral Derivative (PID) controller is a generic feedback control loop mechanism widely used in industrial control systems. A PID controller is the most commonly used type of feedback controller
 Vector Clarke TransformForward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents in the two-phase orthogonal stator axis Ialpha and Ibeta. When Ialpha is superposed with Ia as shown in the figure below
 Vector Inverse Clarke TransformInverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases
 Vector Park TransformForward Park transform converts the input two-coordinate vector to flux and torque components. The Park transform can be used to realize the transformation of the Ialpha and the Ibeta currents from the stationary to the moving reference frame and control the spatial relationship between the stator vector current and rotor flux vector. If we consider the d axis aligned with the rotor flux, the diagram below shows the current vector and the relationship from the two reference frames:
 Vector Inverse Park transformInverse Park transform converts the input flux and torque components to two-coordinate vector
 Sine CosineComputes the trigonometric sine and cosine values using a combination of table lookup and linear interpolation. There are separate functions for Q31 and floating-point data types. The input to the floating-point version is in degrees while the fixed-point Q31 have a scaled input with the range [-1 0.9999] mapping to [-180 +180] degrees
 Statistics Functions
 MaximumComputes the maximum value of an array of data. The function returns both the maximum value and its position within the array. There are separate functions for floating-point, Q31, Q15, and Q7 data types
 MeanCalculates the mean of the input vector. Mean is defined as the average of the elements in the vector. The underlying algorithm is used:
 MinimumComputes the minimum value of an array of data. The function returns both the minimum value and its position within the array. There are separate functions for floating-point, Q31, Q15, and Q7 data types
 PowerCalculates the sum of the squares of the elements in the input vector. The underlying algorithm is used:
 Root mean square (RMS)Calculates the Root Mean Square of the elements in the input vector. The underlying algorithm is used:
 Standard deviationCalculates the standard deviation of the elements in the input vector. The underlying algorithm is used:
 VarianceCalculates the variance of the elements in the input vector. The underlying algorithm used is the direct method sometimes referred to as the two-pass method:
 Support Functions
 Vector CopyCopies sample by sample from source vector to destination vector
 Vector FillFills the destination vector with a constant value
 Convert 32-bit floating point value
 Convert 16-bit Integer value
 Convert 32-bit Integer value
 Convert 8-bit Integer value
 Interpolation FunctionsThese functions perform 1- and 2-dimensional interpolation of data. Linear interpolation is used for 1-dimensional data and bilinear interpolation is used for 2-dimensional data
 Linear InterpolationLinear interpolation is a method of curve fitting using linear polynomials. Linear interpolation works by effectively drawing a straight line between two neighboring samples and returning the appropriate point along that line
 Bilinear InterpolationBilinear interpolation is an extension of linear interpolation applied to a two dimensional grid. The underlying function f(x, y) is sampled on a regular grid and the interpolation process determines values between the grid points. Bilinear interpolation is equivalent to two step linear interpolation, first in the x-dimension and then in the y-dimension. Bilinear interpolation is often used in image processing to rescale images. The NMSIS DSP library provides bilinear interpolation functions for Q7, Q15, Q31, and floating-point data types
 Examples
 Class Marks Example
 Convolution Example
 Dot Product Example
 Frequency Bin Example
 FIR Lowpass Filter Example
 Graphic Audio Equalizer Example
 Linear Interpolate Example NMSIS DSP Software Library – Linear Interpolate Example
 Matrix Example
 Signal Convergence Example
 SineCosine Example
 Variance Example