Welcome to Wiki pages of the Digital Signal Processing Engine library (DSPElib)
The DSPElib is a C++ library for rapid multirate digital signal processing (DSP) standalone applications development. The library provides extensive support for debugging of standalone DSP application. It has been prepared for the use with gcc compiler in Windows with MinGW and Linux. Full Linux support still requires development of audio input and output blocks.
The main idea of the library is that DSP algorithm blocks correspond directly to C++ objects and the DSP algorithm is implemented by clocks definitions, objects creation and definition of connections between particular inputs and outputs.
##Basic code example
int main(void)
{
long int Fp;
DSP_clock_ptr MasterClock;
// mater clock declaration
MasterClock = DSP_clock::CreateMasterClock();
// DSP blocks creation
DSP::u::WaveInput AudioIn(MasterClock, "test.wav", ".");
Fp = AudioIn.GetSamplingRate();
DSP::u::AudioOutput AudioOut(Fp);
// connection definition
AudioIn.Output("out") >> AudioOut.Input("in"));
// processing loop
do {
DSP_clock::Execute(MasterClock, Fp/8);
} while (AudioIn.GetBytesRead() != 0);
// final cleanup
DSP_clock::FreeClocks();
return 0;
}
##Features
- Support for DSP multirate algorithms with feedback loops (sample by sample processing: non-block processing)
- Simplified DSP algorithms implementation
- implementation with direct relation to algorithm’s block scheme with simple code syntax
- Simplified DSP algorithm modification
- algorithms can be readily redesigned - new blocks introduction or blocks replacement with blocks connections reorganization is extremely simple
- high backward compatibility: library kernel modifications (performance improvements or bugs eliminations) does not require application code modification
- DSP algorithms debugging
- signals at any point of implemented algorithm can be readily accessed
- extended logging: e.g. reporting problems with algorithm structure or clocks mismatch; problems reporting with the use of standard of user defined block names
- runtime algorithm block scheme generation (based on actual implementation)
- Simplied creation of library extentions (at different library levels)
- macro objects (representing groups of DSP blocks with their connections)
- special blocks with used defined callbacks
- new DSPE library blocks (C++ classes) – all basic DSP blocks managment mechanisms are preimplemented
##More details