This page is optimized for mobile devices, if you would prefer the desktop version just click here

4.2 Java1483-spectrum analysis using java, frequency resolution  (Page 13/19)

The program performs spectral analysis on five separate time series, each 400 samples in length. Each time series contains a pulse and the pulses aredifferent lengths.

Each pulse consists of the sum of two sinusoids at closely spaced frequencies. The frequencies of the two sinusoids are equidistant from a centerfrequency of 0.0625 times the sampling frequency. The total separation between the frequencies of the two sinusoids is the reciprocal of the length of thepulse.

All frequency values are specified as type double as a fraction of the sampling frequency.

The lengths of the pulses are:

  • 25 samples
  • 50 samples
  • 100 samples
  • 200 samples
  • 400 samples

The spectral analysis

The spectral analysis computes the spectra at 400 equally spaced frequencies between zero and the folding frequency (one-half the sampling frequency) .

The results of the spectral analysis are multiplied by the reciprocal of the lengths of the individual pulses to normalize the five plots. Otherwise, theresults for the short pulses would be too small to see on the plots.

Because of the similarity of this program to the previous programs, my discussion of the code will be very brief.

Computation of the frequencies

The code in Listing 7 shows the computation of the frequencies of the sinusoids that will be added together to form each of the five pulses.

Listing 7. Computation of the frequencies.
//Frequencies of the sinusoidsdouble freq1a = 0.0625 - 8.0/len; double freq2a = 0.0625 + 8.0/len;double freq1b = 0.0625 - 4.0/len; double freq2b = 0.0625 + 4.0/len;double freq1c = 0.0625 - 2.0/len; double freq2c = 0.0625 + 2.0/len;double freq1d = 0.0625 - 1.0/len; double freq2d = 0.0625 + 1.0/len;double freq1e = 0.0625 - 0.5/len; double freq2e = 0.0625 + 0.5/len;

Create the pulses

The code in Listing 8 uses those frequency values to create the data for the pulses and to store that data in the arrays used to hold the pulses.

Listing 8. Create the pulses.
//Create the raw data for(int x = 0;x<len/16;x++){ data1[x]= amp*Math.cos(2*pi*x*freq1a) + amp*Math.cos(2*pi*x*freq2a);}//end for loop for(int x = 0;x<len/8;x++){ data2[x]= amp*Math.cos(2*pi*x*freq1b) + amp*Math.cos(2*pi*x*freq2b);}//end for loop for(int x = 0;x<len/4;x++){ data3[x]= amp*Math.cos(2*pi*x*freq1c) + amp*Math.cos(2*pi*x*freq2c);}//end for loop for(int x = 0;x<len/2;x++){ data4[x]= amp*Math.cos(2*pi*x*freq1d) + amp*Math.cos(2*pi*x*freq2d);}//end for loop for(int x = 0;x<len;x++){ data5[x]= amp*Math.cos(2*pi*x*freq1e) + amp*Math.cos(2*pi*x*freq2e);}//end for loop

Other than the code shown in Listing 7 and Listing 8 , the program named Dsp033 is the same as the programs that were previously explained, and I won'tdiscuss it further.

Run the programs

I encourage you to copy, compile, and run the programs provided in this module. Experiment with them, making changes and observing the results of yourchanges.

<< Chapter < Page Page > Chapter >>

Read also:

OpenStax, Digital signal processing - dsp. OpenStax CNX. Jan 06, 2016 Download for free at https://legacy.cnx.org/content/col11642/1.38
Google Play and the Google Play logo are trademarks of Google Inc.
Jobilize.com uses cookies to ensure that you get the best experience. By continuing to use Jobilize.com web-site, you agree to the Terms of Use and Privacy Policy.