<< Chapter < Page | Chapter >> Page > |
(The real and complex parts of the frequency spectrum were computed at 256 frequencies between zero and the sampling frequency.)
There were 256 values plotted horizontally in each separate plot. Once again, to make it easier to view the plots on the rightmost end, I plotted the valueson a grid that is 270 units wide. This leaves some blank space on the rightmost end to contain the numbers, thus preventing the numbers from being mixed in withthe plotted values. The last actual data value coincides with the rightmost tick mark on each plot.
After modifying the complex spectrum as described above, the program performs an inverse Fourier transform on the modified complex spectrum to produce thefiltered impulse.
The filtered impulse is shown as the bottom plot in Figure 4 . As you can see, the pulse is smeared out in time relative to the input pulse in the top plot.This is the typical result of reducing the bandwidth of a pulse.
(This particular modification of the complex spectrum resulted in a filtered pulse that has the waveform of a SIN(X)/X function. A differentmodification of the complex spectrum would have resulted in a filtered pulse with a different waveform.
This example also illustrates one of the miracles of digital signal processing. Energy appears in the output before it occurs in the input.Obviously that is not possible in the real world of analog systems, but many things are possible in the digital world that are not possible in the realworld.)
Listing 8 shows the beginning of the class definition for the program named Dsp037.
Listing 8. Beginning of the class for Dsp037. |
---|
class Dsp037 implements GraphIntfc01{
final double pi = Math.PI;int len = 256;
double[]timeDataIn = new double[len];double[] realSpect = new double[len];
double[]imagSpect = new double[len];double[] angle = new double[len];//unused
double[]magnitude = new double[len];double[] timeOut = new double[len]; |
Listing 8 simply declares and initializes some variables that will be used later.
The constructor begins in Listing 9 .
Listing 9. Beginning of the constructor. |
---|
public Dsp037(){//constructor
timeDataIn[32]= 90; |
Listing 9 creates the raw pulse data shown in the topmost plot in Figure 4 .
When the array object referred to by timeDataIn is created, the values of all array elements are set to zero by default. Listing 9 modifies one of the elements to have a value of 90. This results in a single impulse atan index of 32.
Continuing with the constructor, the code in Listing 10 uses an FFT algorithm in the method named transform (discussed earlier) to compute the Fourier transform of the impulse.
Listing 10. Compute the Fourier transform. |
---|
//Compute FFT of the time data and save it in
// the output arrays.ForwardRealToComplexFFT01.transform(
timeDataIn,realSpect,
imagSpect,angle,
magnitude); |
Notification Switch
Would you like to follow the 'Digital signal processing - dsp' conversation and receive update notifications?