Beruflich Dokumente
Kultur Dokumente
Laboratory Manual
Contents
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.a. b. 1. 2. 3. Sampling Theorem Impulse Response Linear Convolution Circular Convolution Auto correlation & its properties Cross correlation & its properties Difference Equation N-Point DFT Linear Convolution using DFT & IDFT Circular Convolution using DFT & IDFT FIR Filters IIR Filters - Butterworth IIR Filters - Chebyshev Type I Linear Convolution Circular Convolution N-Point DFT
As an exercise, it is recommended to go through the basics of Signals & Sytems, Digital Signal Processing and some details about DSP hardware & processors.
Prerequisites: References:
[1] Oppenheim & Schaffer: Digital Signal Processing, Prentice-Hall. [2] B P Lathi: Modern Digital and Analog communication systems, Oxford. [3] Rulph Chassaing: Digital Signal Processing and Applications with the C6713 and C6416 DSK, John Wiley. [4] Avatar Singh & S Srinivasan: Digital Signal Processing, Thomson Learning. [5] TMS320C6713 DSK- Technical Reference, Spectrum Digital, Inc. [6] TMS320C6000 Code Composer Studio Tutorial (Literature Number: SPRU301C), Texas Instruments. [7] Getting Started with Matlab, MATLAB.
Matlab Programs
1. Sampling Theorem
clear all; close all; clc; tf=0.05; t=0:0.00005:tf; f=input('Enter the analog frequency,f = '); xt=cos(2*pi*f*t); fs1=1.3*f; n1=0:1/fs1:tf; xn=cos(2*pi*f*n1); subplot(311); plot(t,xt,'b',n1,xn,'r*-'); title('Undersampling plot'); xlabel('time'); ylabel('Amplitude'); fs2=2*f; n2=0:1/fs2:tf; xn=cos(2*pi*f*n2); subplot(312); plot(t,xt,'b',n2,xn,'r*-'); title('Nyquist plot'); xlabel('time'); ylabel('Amplitude'); fs3=6*f; n3=0:1/fs3:tf; xn=cos(2*pi*f*n3); subplot(313); plot(t,xt,'b',n3,xn,'r*-'); title('Oversampling plot'); xlabel('time'); ylabel('Amplitude');
Output
Enter the analog frequency,f = 200
2. Impulse Response
clear all; close all; clc; disp('Difference Equation of a digital system'); N=input('Desired Impulse response length = '); b=input('Coefficients of x[n] terms = '); a=input('Coefficients of y[n] terms = '); h=impz(b,a,N); disp('Impulse response of the system is h = '); disp(h); n=0:1:N-1; figure(1); stem(n,h); xlabel('time index'); ylabel('h[n]'); title('Impulse response'); figure(2); zplane(b,a); xlabel('Real part'); ylabel('Imaginary part'); title('Poles and Zeros of H[z] in Z-plane');
Output
[Given y(n)-y(n-1)+0.9y(n-2)= x(n)] Difference Equation of a digital system Desired Impulse response length = 100 Coefficients of x[n] terms = 1 Coefficients of y[n] terms = [1 -1 0.9]
3. Linear Convolution
clear all; close all; clc; x=input('x[n]= '); l=length(x); h=input('h[n]='); m=length(h); num=(l+m)-1; x_pad=[x,zeros(1,num-l)]; h_pad=[h,zeros(1,num-m)]; new_matrix=zeros(num,num); new_mat(:,1)=x_pad'; for j=2:num new_mat(1,j)=new_mat(num,j-1); for i=2:num new_mat(i,j)=new_mat(i-1,j-1); end end result=new_mat*h_pad'; disp('y[n]= '); disp(result'); low=min([result',x,h])-5; high=max([result',x,h])+5; subplot(1,3,1); stem(x); xlabel('n'); ylabel('x[n]'); axis([1 num low high]); subplot(1,3,2); stem(h); xlabel('n'); ylabel('h[n]'); axis([1 num low high]); subplot(1,3,3); stem(result'); xlabel('n'); ylabel('y[n]'); axis([1 num low high]);
Output
x[n]= [1 2 3 4] h[n]=[2 1] y[n]= 2 5
11
4. Circular Convolution
clear all; close all; clc; x=input('x[n]= '); h=input('h[n]= '); num=input('Enter the length of the sequences = '); new_matrix=zeros(num,num); new_mat(:,1)=x'; for j=2:num new_mat(1,j)=new_mat(num,j-1); for i=2:num new_mat(i,j)=new_mat(i-1,j-1); end end result=new_mat*h'; disp('y[n]= '); disp(result'); low=min([result',x,h])-5; high=max([result',x,h])+5; subplot(1,3,1); stem(x); xlabel('n'); ylabel('x[n]'); axis([1 num low high]); subplot(1,3,2); stem(h); xlabel('n'); ylabel('h[n]'); axis([1 num low high]); subplot(1,3,3); stem(result'); xlabel('n'); ylabel('y[n]'); axis([1 num low high]);
Output
x[n]= [1 2 3 4] h[n]= [2 1 2 1] Enter the length of the sequences = 4 y[n]= 14 16 14 16
Output
x[n]= [1 2 3 4] Verification of property 1 Rxx[n] and Rxx[-n] are identical Hence Auto correlation has even symmetry Verification of property 2 maximum is at the origin Verification of property 3 Energy of x[n] = 30 Maximun of Rxx[n] = 30 Hence maximum of Rxx is equal to Energy of x[n]
subplot(3,2,3) stem(t,Rxy); xlabel('n'); ylabel('Rxy[n]'); title('Crosscorrelation'); subplot(3,2,4); stem(t2,Ryx); xlabel('n'); ylabel('Ryx[n]'); title('Crosscorrelation'); subplot(3,2,5); stem(Rxy_k); xlabel('k'); ylabel('Rxy[k]'); title('DFT of Rxy[n]'); subplot(3,2,6); stem(temp3); xlabel('k'); ylabel('X[k].Y[k]'); title('DFT x[n].DFT y[n]');
Output
x[n]= [1 2 3 4] y[n]= [4 3 2 1] Verification of property 1 Rxy[n]and Ryx[n] are commutative Verification of property 2 Rxy[n]and Ryx[-n] are equal Verification of property 3 The sequences are not orthogonal DFT Rxy[n]=X[k].Y[k]
clear all; close all; clc; disp('Enter the parameters of Difference Equation of a digital system'); b=input('Coefficients of x[n] terms = '); a=input('Coefficients of y[n] terms = '); xn=input('Enter the input exitation x[n] = '); %of length 1 to 100 yi=input('Enter the initial conditions of y = '); %if necessary %xi=('Enter the initial conditions of x = '); %yi of length 1 to (a-1) %xi of length 1 to (b-1) initialc=filtic(b,a,yi); %initialc=filtic(b,a,yi,xi); y_complete=filter(b,a,xn,initialc); y_forced=filter(b,a,xn); y_natural=y_complete-y_forced; subplot(3,1,1); stem(y_natural); title('Natural response of the system'); subplot(3,1,2); stem(y_forced); title('Forced response of the system'); subplot(3,1,3); stem(y_complete); title('Complete response of the system');
7. Difference Equation
Output
Enter the parameters of Difference Equation of a digital system Coefficients of x[n] terms = 1 Coefficients of y[n] terms = [1 -1 0.9] Enter the input exitation x[n] = [1 zeros(1,99)] Enter the initial conditions of y = [-1 0 0]
8. N-point DFT
clear all; close all; clc; x=input('Enter the sequence x[n]= '); N=input('Enter the value N point= '); L=length(x); x_n=[x,zeros(1,N-L)]; for i=1:N for j=1:N temp=-2*pi*(i-1)*(j-1)/N; DFT_mat(i,j)=exp(complex(0,temp)); end end X_k=DFT_mat*x_n'; disp('N point DFT is X[k] = '); disp(X_k); mag=abs(X_k); phase=angle(X_k)*180/pi; subplot(2,1,1); stem(mag); xlabel('frequency index k'); ylabel('Magnitude of X[k]'); axis([0 N+1 -2 max(mag)+2]); subplot(2,1,2); stem(phase); xlabel('frequency index k'); ylabel('Phase of X[k]'); axis([0 N+1 -180 180]);
Output
Enter the sequence x[n]= [1 2 3 4] Enter the value N point= 4 N point DFT is X[k] = 10.0000 -2.0000 + 2.0000i -2.0000 - 0.0000i -2.0000 - 2.0000i
Output
x[n]= [1 2 3 4] h[n]= [2 1] y[n]= 2 5 8
11
10.
disp('Enter the sequences of equal lengths'); x=input('x[n]= '); N=length(x); h=input('h[n]= '); XN=fft(x,N); HN=fft(h,N); YN=XN.*HN; y=ifft(YN,N); disp('y[n]= '); disp(y); low=min([y,x,h])-5; high=max([y,x,h])+5; subplot(1,3,1); stem(x); xlabel('n'); ylabel('x[n]'); axis([1 N low high]); subplot(1,3,2); stem(h); xlabel('n'); ylabel('h[n]'); axis([1 N low high]); subplot(1,3,3); stem(y); xlabel('n'); ylabel('y[n]'); axis([1 N low high]);
Output
Enter the sequences of equal lengths x[n]= [1 2 3 4] h[n]= [2 1 2 1] y[n]= 14 16 14 16
11.
FIR Filters
wn=input('Enter the passband frequency between 0 & 1 (normalised) = '); %wn=[w1 w2]; %wn is a vector,for Bandpass & Bandstop n=input('Enter the order of the filter = '); %beta=input('Enter the value of beta'); %beta for Kaiser only b=fir1(n,wn,hamming(n+1)); %replace by following for other windows %blackman(n); %hanning(n); %hann(n); %barlett(n); %boxcar(n); %kaiser(n,beta); %b=fir1(n,wn,'high',XXXXXXX(n)); Highpass window %b=fir1(n,wn,XXXXXXX(n)); Bandpass window %b=fir1(n,wn,'stop',XXXXXXX(n)); Bandstop window [h,w]=freqz(b,1,512); dB=20*log10(abs(h)); figure(1); subplot(2,1,1); plot(w/pi,dB); title('Magnitude response'); xlabel('Normalised frequency'); ylabel('Magnitude in dB'); grid; subplot(2,1,2); plot(w/pi,angle(h)); title('Phase response'); xlabel('Normalised frequency'); ylabel('Phase in degrees'); grid; figure(2); stem(impz(b,1)); title('Impulse response'); xlabel('Time index n'); ylabel('Amplitude');
Output
Enter the passband frequency between 0 & 1 (normalised) = 0.3 Enter the order of the filter = 20
[h,w]=freqz(b,a); mag=20*log10(abs(h)); phase=180*angle(h)/pi; figure(1); plot(w,abs(h)); title('Butterworth Lowpass Filter'); xlabel('Normalised frequency'); ylabel('Magnitude'); grid; figure(2); subplot(2,1,1); plot(w,mag); title('Magnitude response'); xlabel('Normalised frequency'); ylabel('Magnitude in dB'); grid; subplot(2,1,2); plot(w,phase); title('Phase response'); xlabel('Normalised frequency'); ylabel('Phase in degrees'); grid;
Output
Enter Enter Enter Enter the the the the passband stopband passband stopband edge Normalised frequency = 0.3 edge Normalised frequency = 0.6 attenuation level (dB) = 3 attenuation level (dB) = 40
[h,w]=freqz(b,a); mag=20*log10(abs(h)); phase=180*angle(h)/pi; figure(1); plot(w,abs(h)); title('Chebyshev Lowpass Filter'); xlabel('Normalised frequency'); ylabel('Magnitude'); grid; figure(2); subplot(2,1,1); plot(w,mag); title('Magnitude response'); xlabel('Normalised frequency'); ylabel('Magnitude in dB'); grid; subplot(2,1,2); plot(w,phase); title('Phase response'); xlabel('Normalised frequency'); ylabel('Phase in degrees'); grid;
Output
Enter Enter Enter Enter the the the the passband stopband passband stopband edge Normalised frequency = 0.3 edge Normalised frequency = 0.6 attenuation level (dB) = 3 attenuation level (dB) = 40
C Programs
1. Linear Convolution
int m,n,i,j,x[30],y[30],h[30]; void main() { printf("Enter the length of x\n"); scanf("%d",&m); printf("Enter the length of h\n"); scanf("%d",&n); printf("Enter x\n"); for(i=0;i<m;i++) scanf("%d",&x[i]); printf("Enter h\n"); for(i=0;i<n;i++) scanf("%d",&h[i]); for(i=m;i<m+n-1;i++) x[i]=0; for(i=n;i<m+n-1;i++) h[i]=0; for(i=0;i<m+n-1;i++) { y[i]=0; for(j=0;j<=i;j++) y[i]+=x[j]*h[i-j]; } printf("Linear convolution, y is "); for(i=0;i<m+n-1;i++) printf("%d ",y[i]); }
Output
Enter the length of x 4 Enter the length of h 2 Enter x 1 2 3 4 Enter h 2 1 Linear convolution, y is 2 5 8 11 4
2. Circular Convolution
int m,n,i,j,k,x[30],y[30],h[30],a[30],b[30]; void main() { printf("Enter the length of x\n"); scanf("%d",&m); printf("Enter x\n"); for(i=0;i<m;i++) scanf("%d",&x[i]); printf("Enter h\n"); for(i=0;i<n;i++) scanf("%d",&h[i]); a[0]=h[0]; for(i=1;i<m;i++) a[i]=h[m-i]; y[0]=0; for(i=0;i<m;i++) y[0]+=x[i]*a[i]; for(k=1;k<m;k++) { y[k]=0; b[0]=a[n-1]; for(i=1;i<m;i++) b[i]=a[i-1]; for(i=0;i<m;i++) a[i]=b[i]; for(j=0;j<m;j++) y[k]+=x[j]*a[j]; } printf("Circular convolution, y is "); for(i=0;i<m;i++) printf("%d ",y[i]); }
Output
Enter the length of x 4 Enter x 1 2 3 4 Enter h 2 1 2 1 Circular convolution, y is 14 16 14 16
3. N-Point DFT
#include <stdio.h> #include <math.h> void main() { int i,j,n; short N; short x[10]; float pi=3.1416; float sumRe,sumIm; float cosine=0,sine=0; float out_real[10]={0.0},out_image[10]=(0.0); printf("Enter the length of the sequence\n"); scanf("%d",&n); printf("Enter N\n"); scanf("%d",&N); printf("Enter x\n"); for(i=n+1;i<N;i++) scanf("%d",&x[i]); if(N>n) for(i=n;i<N;i++) x[i]=0; printf("N point DFT is\n"); for(i=0;i<N;i++) { sumRe=0; sumIm=0; for(j=0;j<N;j++) { cosine=cos(2*pi*i*j/N); sine=sin(2*pi*i*j/N); sumRe+=x[j]*cosine; sumIm+=x[j]*sine; } out_real[i]=sumRe; out_imag[i]=sumIm; printf("%.1f +j(%.1f)\n",out_real[i],out_imag[i]); } }
Output
Enter the length of the sequence 4 Enter N 4 Enter x 1 2 3 4 N point DFT is 10.0 +j(0.0) -2.0 +j(-2.0) -2.0 +j(-0.0) -2.0 +j(2.0)