The high resolution continuation frequency-analysis demo program by RedHawk Realtime Linux and CUDA

 

The following screens are screens of the continuation frequency-analysis program which created high-speed AD of Spectrum by GPU-VSIPL considered as an input. (It has converted into motion GIF) 

 The input of AD performs continuation inclusion by 14 bits/50 MHz, performs 1M point FFT to all the data, and is performing the all-points peak search of frequency.

Since the sweep of the square wave is made into the input signal, it can see that spurious appeared in the fixed multiple of the maximum and frequency has appeared by return.

 

CPU: Dell T5400 Xeon 2 Core/2 CPU 2.8GHz/2GByte Memory

OS: RedHawk 5.4 RealTime Linux

AD Card: Spectrum M2i.4031

CUDA GPU:NVIDIA Quadro FX3700/512MByte Memory

Sampling rate  : 50.0 M Sample/sec

Frequency Band: 25.0 MHz

FFT Length: 1048576 Points

Hz/Bin: 47.6837 Hz

CycleTime: 25.3 msec.

Window: Blackman

Display Rate: 20.97ms

 

 

 

 

 

 

 
 
 
 
 
 
 

The main programs of VSIPL except AD input process and display processing

 
                sp = (signed short int *)buffer;
                Length = 1024 * 1024;
                HarfSize = Length/2;
               for(i=0;i<Length;i++)
               {
                       ad[i]=(signed int)*sp++;              /* Convert short to int */
               }
               vsip_blockadmit_i(blk_i, VSIP_TRUE);          /* Admit blk_i after populating input user data array */
               vsip_blockadmit_f(blk_o, VSIP_FALSE);         /* Admit blk_o after populating input user data array */
               vsip_vcopy_i_f(vec_i,rx_raw);
               vsip_svmul_f (full_scale,rx_raw,rx);          /* Scale A/D values by full-scale */
               vsip_vmul_f (vec_w,rx_raw,rx_w);              /* Apply Blackman window to input signal */
               vsip_rcfftop_f(fft_obj,rx_w,Rx);              /* Compute FFT of windowed input signal */
               vsip_cvmag_f (Rx, vec_o);                     /* Compute magnitude of FFT to get spectral estimate */
               vsip_blockrelease_i(blk_i, VSIP_FALSE);       /* Admit blk_i after populating input user data array */
               vsip_blockrelease_f(blk_o, VSIP_TRUE);        /* Admit blk_o after populating input user data array */
               peak_max_i=0;peak_max=0.0;
               for(i=1;i<HarfSize;i++)
               {
                       if ((out[i-1]<out[i])&&(out[i]>out[i+1])) // The conditions of a mountain 
                       {
                               if (out[i]>peak_max)
                               {
                                      peak_max_i =i;
                                      peak_max=update_max(i,out[i]); // The maximum is registered.
                               }
                       }
               }