Feb 20, 2002Soumya Mohanty, AEI1 GEO++ A general purpose C++ DSP library Plan of presentation Soumya Mohanty: Overview R. Balasubramanian: MPI Shell, Frame IO, FFT David Churches: Database IO Stas Babak: PSD: GEO++ Code examples R. Balasubramanian: A simple data monitor using GEO++
Feb 20, 2002Soumya Mohanty, AEI2 GEO++: What is it? Digital Signal Processing (DSP) library in C++ Also included: MPI Shell, Frame reader, Database IO Designed for analysis of a large volume of continuous data Uses: Implement the DCR algorithm (original motivation) Implement simple data monitors Support Burst and Inspiral searches (mainly IO) Some facts: About 6000 lines of code written & tested. Started Oct 2001 Under CVS control. Documented using DOC++ 4 programmers working part time (weekly teleconferences + a visit). Initially 1 experienced in C++ and C, 2 in C, 1 in Java & C
Feb 20, 2002Soumya Mohanty, AEI3 OOP Object Oriented Programming: Some terminology Consider the implementation of a filter Input : fixed length sequences state information has to be stored to make the output sequences continuous Options for a procedural code: Internal storage inside the function: use static variables several filters cannot be executed using one function external storage means calling code has to manage what should be a hidden detail
Feb 20, 2002Soumya Mohanty, AEI4 OOP (II) OOP solution : from function to object A filter object can store state info and implement a filter function Several objects of filter class can exist simultaneously each with its own state External code only knows the interface to this object: setting filter coefficients, setting input and output Data hiding more reliability for a client code Other important features in OOP: inheritance, polymorphism
Feb 20, 2002Soumya Mohanty, AEI5 Design Choices (I) DSP consists of mapping one matrix into another. A lot of DSP is about designing the right map for a given purpose Discrete Fourier Transform maps one vector to another while preserving size Spectrogram maps a vector to a matrix GEO++ design reflects this notion: Data container class Matrix Map classes with Matrices as input/output Map Design classes such as filter design
Feb 20, 2002Soumya Mohanty, AEI6 Design Choices (II) GEO++ Data Containers Essentially one class: Matrix Intuitive to use Actual code: A=B+C; A=B*C; A=0.0; A(5,2)=10.0; Auxiliary classes : IndexSet, MViewer A(I,J)=10.0; //Multiple rows and columns accessed MViewer object acts as a movable window on a bigger matrix Multiple views can be attached to the same matrix Mixed expressions allowed: C=A+B(I,J); Matrix class is derived from the C++ Standard Template Library (STL) vector class Advantage: Memory management already taken care of in STL. we did not write a single line of code for this task.
Feb 20, 2002Soumya Mohanty, AEI7 Design Choices (II) Templates and STL Example: double and float arrays are usually used in the same way but require duplicate code Template class: code written with a placeholder for data type STL: Entirely template based library of fundamental data structures and algorithms. Part of ANSI C++ standard STL Algorithms: sort, find, Set operations etc. can be used on Matrix. Thus we already have a lot of basic Matlab functions. Other data containers such as linked lists, stacks, Sets etc., exist Disadvantage: cannot make a shared object library. Provision exists in ANSI C++ standard. Wait for future compiler versions
Feb 20, 2002Soumya Mohanty, AEI8 Design Choices (III) Maps (I) Maps: Filter, FFTFilt, FastFT, PSD (Welch & AR), Demod, Modulate, ShiftSamples, RngMedian, Resampling, SortMatrix STL already has functions which simply need to be wrapped in a class SortMatrix is an example SortMatrix also finds original indices of sorted elements: not in STL sort Interface: common names for public members SetInput, SetOutput, SetParameters, Run, Reset Convenient from the user’s point of view
Feb 20, 2002Soumya Mohanty, AEI9 Design Choices (III) Maps (II) All maps preserve state Meant for analyzing data from interferometers continuously All maps have default constructors STL vector of maps: elegant way to implement a filter bank Uniformly named private members AllocInternals, GetState, StoreState,... Supports code maintenance To do: Maps should take Map Design objects as arguments FFTFilt could take a type argument that represents different design methods Create Abstract Base classes to derive sets of maps from
Feb 20, 2002Soumya Mohanty, AEI10 Other GEO++ components Map Design Window FirWin: Window based FIR filter design Both are template classes FirWin takes Window type as a type argument Frame IO, Database IO, MPI Shell Following presentations
Feb 20, 2002Soumya Mohanty, AEI11 Summary GEO++ design choices have proven to be elegant and efficient Great environment for rapid development of C++ DSP codes Future: Polish Documentation Add Frame writing and database Input functionality More filter design tools and Integrate LAPACK++ GEO++ will soon be open to all interested users and developers