Sie sind auf Seite 1von 10

EXPERIMENT ITLE

Digital Signal Processing Laboratory-Module NO. 5

DISCRETE FOURIER TRANSFORM


Signals, Spectra, Signal Processing Laboratory ECES4421L

Objectives
BY the end of the session the students should be able to: Apply programming skills in MATLAB Understand the different function and its uses Know how to create user defined function Learn how to design solution in machine problem using MATLAB

Tools Required
1. Computer Workstation 2. MATLAB Software with Signal Processing Toolbox

Exercises Given the sinusoid ( ) obtained by sampling the analog signal x(t) = 2 _ sin2000pt with a sampling rate of fs= 8,000 Hz, a. Use the MATLAB DFT to compute the signal spectrum with thefrequency resolution to be equal to or less than 8 Hz. b. Use the MATLAB FFT and zero padding to compute the signal spectrum, assuming that the data samples are available in (1). Solution: a. The number of data points is found to be N = = 1000. There isno zero padding ( )

needed if we use the DFT formula. Detailed implementationis given in Program 4.1. The first

and second plots in Figure 4.12show the two-sided amplitude and power spectra, respectively, using theDFT, where each frequency counterpart at 7,000 Hz appears. The thirdand fourth plots are the one-side amplitude and power spectra, where thetrue frequency contents are displayed from 0 Hz to the Nyquist frequencyof 4 kHz (folding frequency). b. If the FFT is used, the number of data points must be a power of 2. Hence we choose N = 210= 1024 Assuming there are only 1,000 data samples available in (a), we need topad 24 zeros to the original 1,000 data samples before applying the FFTalgorithm, as required. Thus the calculated frequency resolution isDf fs=N 8000=1024 7:8125 Hz. Note that this is an interpolated Program 4.1. MATLAB program for Example 4.8 Results: Syntax: >>fs = 8000; >> N = 1000; >> x = 2* sin (2000* pi*[0: 1: N-1]/fs); >>xf = abs(fft(x))/N; >> P = xf.*xf; >> f = [0: 1: N-1]*fs/N; >>subplot(2,1,1); plot(f,xf);grid xlabel('Frequency (Hz)'); ylabel('Amplitude spectrum (DFT)'); >>subplot(2,1,2);plot(f,P);grid xlabel('Frequency (Hz)'); ylabel('Power spectrum (DFT)');
1

Power spectrum (DFT)

0.5

1000

2000

3000 4000 5000 Frequency (Hz)

6000

7000

8000

>>xf(2:N) = 2*xf(2: N); >> P = xf.*xf; >> f = [0: 1: N/2]*fs/N; >>subplot(2,1,1); plot(f,xf(1: N/2+1));grid xlabel('Frequency (Hz)'); ylabel('Amplitude spectrum (DFT)');
Amplitude spectrum (DFT)
1

0.5

1000

2000

3000 4000 5000 Frequency (Hz)

6000

7000

8000

Amplitude spectrum (DFT)

2 1.5 1 0.5 0

500

1000

1500 2000 2500 Frequency (Hz)

3000

3500

4000

>>subplot(2,1,2);plot(f,P(1: N/2+1));grid xlabel('Frequency (Hz)'); ylabel('Power spectrum (DFT)');

Power spectrum (DFT)

4 3 2 1 0

500

1000

1500 2000 2500 Frequency (Hz)

3000

3500

4000

>> x = [x, zeros(1,24)]; >> N = length(x); >>xf = abs(fft(x))/N; >> P = xf.*xf; >> f = [0: 1:N-1]*fs/N; >>subplot(2,1,1); plot(f,xf);grid xlabel('Frequency (Hz)'); ylabel('Amplitude spectrum (FFT)');
Amplitude spectrum (FFT)
1

0.5

1000

2000

3000 4000 5000 Frequency (Hz)

6000

7000

8000

>>subplot(2,1,2);plot(f,P);grid

xlabel('Frequency (Hz)'); ylabel('Power spectrum (FFT)');


1

Power spectrum (FFT)

0.5

1000

2000

3000 4000 5000 Frequency (Hz)

6000

7000

8000

>>xf(2: N) = 2*xf(2: N); >> P = xf.*xf; >> f = [0: 1:N/2]*fs/N; >>subplot(2,1,1); plot(f,xf(1: N/2 + 1));grid xlabel('Frequency (Hz)'); ylabel('Amplitude spectrum (FFT)');
Amplitude spectrum (FFT)
2 1.5 1 0.5 0

500

1000

1500 2000 2500 Frequency (Hz)

3000

3500

4000

>>subplot(2,1,2);plot(f,P(1: N/2 + 1));grid xlabel('Frequency (Hz)'); ylabel('Power spectrum (FFT)');

Power spectrum (FFT)

4 3 2 1 0

500

1000

1500 2000 2500 Frequency (Hz)

3000

3500

4000

Given the sinusoid ( ) ( )

obtained by using a sampling rate of fs= 8,000 Hz, use the DFT to compute thespectrum with the following specifications: a. Compute the spectrum of a triangular window function with a window size = 50. b. Compute the spectrum of a Hamming window function with a window size = 100. c. Compute the spectrum of a Hanning window function with a window size = 150 and one-sided spectrum. Solution in Matlab: a. 1. Generate the sine wave sequence fs = 8000; T = 1/fs; x = 2* sin (2000*pi*[0: 1: 50]*T);

2 1

0 -1 -2

Ak (no window)
0 20 40 Time index n 60

x(n)

0.5

2000 4000 6000 Frequency (Hz)

8000

Triangular windowed x(n)

1 0 -1 -2

Triangular windowed Ak
0 20 40 Time index n 60

0.5

2000 4000 6000 Frequency (Hz)

8000

2. Apply the FFT algorithm N = length(x); index_t = [0: 1: N - 1]; f = [0: N - 1]*8000/N; xf=abs(fft(x))/N; x_b = x.*bartlett(N)'; xf_b = abs(fft(x_b))/N;

3. Using the Bartlett window figure(1) subplot(2,2,1);plot(index_t,x);grid xlabel('Time index n'); ylabel('x(n)'); subplot(2,2,3); plot(index_t,x_b);grid; xlabel('Time index n'); ylabel('Triangular windowed x(n)'); subplot(2,2,2);plot(f,xf);grid;axis([0 8000 0 1]); xlabel('Frequency (Hz)'); ylabel('Ak (no window)'); subplot(2,2,4); plot(f,xf_b);grid; axis([0 8000 0 1]); xlabel('Frequency (Hz)'); ylabel('Triangular windowed Ak');

b. 1. Generate the sine wave sequence x = 2* sin (2000*pi*[0: 1: 100]*T);

2 1
x(n) Ak (no window)

0 -1 -2

0.5

50 Time index n

100

2000 4000 6000 Frequency (Hz)

8000

Hamming windowed x(n)

1 0 -1 -2

Hamming windowed Ak

0.5

50 Time index n

100

2000 4000 6000 Frequency (Hz)

8000

2. Apply the FFT algorithm N=length(x); index_t = [0: 1: N - 1]; f = [0: 1: N - 1]*fs/N; xf = abs(fft(x))/N; x_hm = x.*hamming(N)'; xf_hm=abs(fft(x_hm))/N;

3. Using the Hamming window figure(2) subplot(2,2,1);plot(index_t,x);grid xlabel('Time index n'); ylabel('x(n)'); subplot(2,2,3); plot(index_t,x_hm);grid xlabel('Time index n'); ylabel('Hamming windowed x(n)'); subplot(2,2,2);plot(f,xf);grid;axis([0 fs 0 1]); xlabel('Frequency (Hz)'); ylabel('Ak (no window)'); subplot(2,2,4); plot(f,xf_hm);grid;axis([0 fs 0 1]); xlabel('Frequency (Hz)'); ylabel('Hamming windowed Ak');

c. 1. Generate the sine wave sequence x = 2* sin (2000*pi*[0: 1: 150]*T);

2. Apply the FFT algorithm N=length(x); index_t = [0: 1: N - 1]; f = [0: 1: N - 1]*fs/N; xf = 2*abs(fft(x))/N;xf(1) = xf(1)/2; x_hn = x.*hanning(N)';; xf_hn=2*abs(fft(x_hn))/N;xf_hn(1)=xf_hn(1)/2;

3. Using the Hanning window figure(3) subplot(2,2,1);plot(index_t,x);grid xlabel('Time index n'); ylabel('x(n)'); subplot(2,2,3); plot(index_t,x_hn);grid xlabel('Time index n'); ylabel('Hanning windowed x(n)'); subplot(2,2,2);plot(f(1:(N-1)/2),xf(1:(N-1)/2));grid;axis([0 fs/2 0 1]); xlabel('Frequency (Hz)'); ylabel('Ak (no window)'); subplot(2,2,4);plot(f(1:(N-1)/2),xf_hn(1:(N-1)/2));grid;axis([0 fs/2 0 1]); xlabel('Frequency (Hz)'); ylabel('Hanning windowed Ak');
2 1 1

0 -1 -2

Ak (no window)
0 50 100 Time index n 150

x(n)

0.5

1000 2000 3000 Frequency (Hz)

4000

Hanning windowed x(n)

2 1 0 -1 -2

Hanning windowed Ak
0 50 100 Time index n 150

0.5

1000 2000 3000 Frequency (Hz)

4000

Conclusion:

Das könnte Ihnen auch gefallen