<< Chapter < Page | Chapter >> Page > |
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:
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.
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.
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.
Notification Switch
Would you like to follow the 'Digital signal processing - dsp' conversation and receive update notifications?