DSO Internship Experience

...

I had the opportunity to intern in DSO in my year 1 summer vacation period where I worked in a team under the Electronic Systems division, under a project called Accelerating Compute Intensive Signal Processing Algorithms. I worked to convert signal processing algorithms that the research team had done in MATLAB to C++ to accelerate it since C++ was a compiled language and the team needed it to be in C++ to integrate with other modules. Since MATLAB had a lot of precompiled functions from their toolbox, I had to research on how the algorithms worked. I also made use of OpenMP to use multithreading to improve the speed.

The first MATLAB algorithm is part of a signal detection process and it performs estimation of the noise floor level from the input wideband signal data using a moving window. The noise floor level helps to detect the presence of transmitted signal that would require further processing.

The second program in MATLAB generates signal data through modulation then up-sampling, filtering and down-sampling before interpolating and normalising the input data. The digital data undergoes a modulation function of ‘pskmod’ or ‘qammod’ in MATLAB which stands for ‘Phase Shift Keying (PSK) Modulation’ and ‘Quadrature Amplitude Modulation (QAM)’ respectively. The digital data is converted to complex number data according to the constellation plot. For filtering, I also had to implement the Rational transfer function for the low pass filter that attenuates unwanted frequency content. Lastly, I had to implement the interpolate function which returns interpolated values of a 1-D function at specific query points using linear interpolation.

My last task was developing the instrument drivers for communication and control of the PXI peripherals which would be used for testing and measurement. One of the program was for a digitizer card, to acquire and capture data from the input waveform from a waveform generator.

Through this experience, I learnt to be resourceful and independent in the way I approached my challenges. Since most parts of the tasks were new and unfamiliar to me as I had no prior knowledge on signal processing or OpenMP, I had to do a lot of reading, researching and watching tutorials online to understand what the algorithms were doing and then get a grasp of how I was going to optimise the algorithms through some of the methods that my supervisor suggested I try or what I found online. It was especially important when I had difficulties and it also pushed me to improve my problem solving skills by using what was available to me to figure out what went wrong. I definitely learnt how to code in C++ better and gained a greater understanding of MATLAB code as well. I was also given a chance to learn about the domain of signal processing. My supervisor also gave some tips on how to better structure my project’s classes or functions such that the program I wrote would be reusable by different data files and more practical to be used to scale up to process more data files. Lastly, I learnt some methods on how to accelerate algorithms using different methods like using a more efficient self-implemented sorting method than the generic sort from the C++ standard library, exploring other methods available in the different standard libraries and multithreading using what was found in the OpenMP API.