software design
The software design consists of several modules working together. These include the digital signal processing module, a KISS_FFT open source library, encryption module, math utilities, and singleton central global variable store. The software process consists of taking the digital signal from the Stereo IN jack of the BeagleBoard-xM and performing a Fast Fourier Transform on the signal. The signal is then passed through a signal processing module to eliminate noise and scale the frequencies, and then later passed onto the piezo actuator drivers. The upper bound on the runtime of one iteration is 91ms.
Software design is a fusion of art and technicality. There are a few key concepts kept in mind while designing our software architecture. The design considerations are listed below:
· Extensibility
· Modularity
· Performance
· Maintainability
Software design is a fusion of art and technicality. There are a few key concepts kept in mind while designing our software architecture. The design considerations are listed below:
· Extensibility
· Modularity
· Performance
· Maintainability
|
The image above shows the header file of a basic singleton class used in the software design. The full singleton global variable store source file can be downloaded below.
|
Sound recorder
|
FFT Library
An open source library named KISS FFT (Keep It Simple, Stupid) is used to perform 1D real number Fast Fourier Transform of the input sound wave. We decided to use KISS FFT because its competitors offer an overwhelming amount of features and are too complicated to modify. Other FFT libraries involved code not needed for our application and thus the chosen library is the simplest available to accommodate for all our features.
Additionally, the library is very optimized in such a way that "only real values FFT" saves 45% CPU time as opposed to the typical "complex number FFT" of a real sequence. It uses a struct that stores the real and imaginary values of type kiss_fft_scalar which is defined to be of type float as shown above in the image. The image of the header file below shows the main functions used to take the Fast Fourier Transform.
Additionally, the library is very optimized in such a way that "only real values FFT" saves 45% CPU time as opposed to the typical "complex number FFT" of a real sequence. It uses a struct that stores the real and imaginary values of type kiss_fft_scalar which is defined to be of type float as shown above in the image. The image of the header file below shows the main functions used to take the Fast Fourier Transform.
The FFT Wrapper class is responsible for allowing a cleaner interface between the embedded application and the build around the KISS FFT library are available for download to the right.
|
|