Part-A Experiments Using Matlab: DSP Lab Manual
Part-A Experiments Using Matlab: DSP Lab Manual
Part-A Experiments Using Matlab: DSP Lab Manual
2010
1 RYMEC, BLY.
2010
% 01. Program to Sample a Band Limited continuous time signal, Band Limited to fm=100KHz % Under the following conditions: % (i) To Nyquist Rate % (ii) Twice the Nyquist Rate % (iii) Half the Nyquist Rate and Find the effect in each of the above.
t = 0 : 0.01 : 0.1; fm = input ('Enter the Input Signal Frequency (fm) : '); y = 2 * cos (2 * pi * fm * t); fs = input ('Enter the Sampling Frequency (fs) : '); ts = 1/fs; tx = 0 : ts : 0.1; ys = 2 * cos (2 * pi * fm * tx); subplot (2, 2, 1); stem (t, y); xlabel ('Time ---->'); ylabel ('Amplitude ---->'); title ('Input Signal'); subplot (2, 2, 2); stem (tx, ys); xlabel ('Time ---->'); ylabel ('Amplitude ---->'); title ('Signal Sampled at fs Hz'); x = abs (fft (y, 100)); k = 0 : length(y) - 1; subplot (2, 2, 3); stem (x); xlabel ('Time ---->'); ylabel ('Amplitude ---->'); title ('Spectrum of the Input Signal'); p = abs (fft (ys, 100)); k1 = 0 : length(ys) - 1; subplot (2, 2, 4) stem (p); xlabel ('Time ---->'); ylabel ('Amplitude ---->'); title ('Spectrum of the Sampled Signal');
2 RYMEC, BLY.
2010
RESULT: Case-1: fs < 2fm Enter the Input Signal Frequency (fm) : 20 Enter the Sampling Frequency (fs) : 20
Case-2: fs = 2fm Enter the Input Signal Frequency (fm) : 20 Enter the Sampling Frequency (fs) : 40
Case-3: fs > 2fm Enter the Input Signal Frequency (fm) : 20 Enter the Sampling Frequency (fs) : 80
3 RYMEC, BLY.
2010
4 RYMEC, BLY.
2010
RESULT:
5 RYMEC, BLY.
2010
6 RYMEC, BLY.
2010
RESULT:
7 RYMEC, BLY.
2010
% 04. Program to Find the Circular convolution of two finite length sequences.
Main Program: x1=input('Enter the first sequence: '); x2=input('Enter the second sequence: '); y1=conv(x1,x2) l1=length(x1); l2=length(x2); n1=max(l1,l2) y2=circonv(x1,x2,n1) n2=l1+l2-1 y3=circonv(x1,x2,n2) subplot(3,1,1) n1=0:1:length(y1)-1; stem(n1,y1); xlabel('time------>'); ylabel('amp------>'); title('linear convolution'); subplot(3,1,2) n2=0:1:length(y2)-1; stem(n2,y2); xlabel('time----->'); ylabel('amp----->'); title('circular convolution'); subplot(3,1,3) n3=0:1:length(y3)-1; stem(n3,y3); xlabel('time---->'); ylabel('amp----->'); title('linear conv by circular convolution'); Sub-Program: function[y] = circonv(x1, x2, N) l1=length(x1); l2=length(x2); X1 = [x1, zeros(1, N - l1)]; X2 = [x2, zeros(1, N - l2)]; H = zeros(N, N); for n = 1 : 1 : N m = n - 1; p = 0 : 1 : N - 1; q = mod(p - m, N); Xm = X2(q + 1); H(n,:) = Xm; end y = H' * X1';
8 RYMEC, BLY.
2010
RESULT:
9 RYMEC, BLY.
2010
%05. Program to find the Autocorrelation of a given sequence and verification of its properties.
%Autocorrelation: X=input('enter the sequence:'); Rxx=xcorr(X,X); figure(1) subplot(2,1,1) stem(X); xlabel('n---->'); ylabel('amplitude---->'); subplot(2,1,2) stem(fliplr(Rxx)) disp('Rxx'); fliplr(Rxx); % verification of its properties: x= input('enter the sequence'); l=length(x); x1=[x(l:-1:1)] rxx=conv(x,x1) %property 1:rxx"(0) gives the energy of the sequence centre = ceil(length(rxx)/2) n=-centre+1:1:centre-1 figure,stem(n,rxx) E=sum(x.^2) if(E==rxx(centre)) disp('rxx(0) value is equal to the energy of signal'); else disp('rxx(0) value is not equal to the energy of signal'); end % property 2:rxx(n)=rxx(-n) l1=length(rxx) zxx=[rxx(l1:-1:1)] if(zxx==rxx) disp('rxx(n) is equal to rxx(-n)'); else disp('rxx(n) is not equal to rxx(-n)'); end
10 RYMEC, BLY.
2010
RESULT:
11 RYMEC, BLY.
2010
%06. Program to find the Crosscorrelation of a given sequence and verification of its properties.
x=input('enter the first sequence'); y=input('enter the second sequence'); rxy=xcorr(x,y) l1=length(rxy) figure,stem(rxy); %property1:rxy(n)=ryx(-n) ryx=xcorr(y,x) l=length(ryx) zyx=[ryx(l:-1:1)] if (rxy==zyx) disp('rxy(n) is equal to rxy(-n)'); else disp('rxy(n) is not equal to rxy(-n)'); end %property2: ex=sum(x.^2) ey=sum(y.^2) rxx=xcorr(x,x); ryy=xcorr(y,y); c1=ceil(length(rxx)/2) c2=ceil(length(ryy)/2) if sqrt(ex*ey)==sqrt(rxx(c1)*ryy(c2)) disp('energy condition is satisfied'); else disp('energy condition is not satisfied'); end
12 RYMEC, BLY.
2010
RESULT:
13 RYMEC, BLY.
2010
14 RYMEC, BLY.
2010
RESULT:
15 RYMEC, BLY.
2010
%08. a) Program to compute N-point DFT of a given sequence and to plot magnitude and phase spectrum.
%Main Program: xn=input ('enter the input sequence:'); N=input('enter the values of N:'); Xk=dft(xn,N); k=0:1:N-1; subplot(2,1,1) stem(k,abs(Xk)); disp(Xk); xlabel('n---->'); ylabel('magnitude---->'); subplot(2,1,2) stem(k,angle(Xk)); xlabel('n---->'); %Sub Program: function[xk]=dft(xn,N) [N,m]=size(xn); if m ~=1 xn=xn'; N=m; end xk=zeros(N,1); n=0:N-1; for k=0:N-1 xk(k+1)=exp(-j*2*pi*k*n/N)*xn end
16 RYMEC, BLY.
2010
RESULT:
17 RYMEC, BLY.
2010
%08. b) Program to compute N-point IDFT of a given sequence and to plot magnitude and phase spectrum.
%Main Program: xk=input('enter the input sequence:'); N=input('enter the value of N:'); xn=idft(xk,N) n=0:1:N-1 subplot(2,1,1) stem(n,abs(xn)); disp(xn); xlabel('n---->'); ylabel('magnitude---->'); subplot(2,1,2) stem(n,angle(xn)); xlabel('n---->'); ylabel('phase spectrum---->'); %Sub Program: function[xn]=idft(Xk,N) [N,m]=size(Xk); if m~=1 Xk=Xk'; N=m; end xn=zeros(N,1); k=0:N-1 for n=0:N-1 xn(n+1)=1/N*exp(j*2*pi*k*n/N)*Xk; end
18 RYMEC, BLY.
2010
RESULT:
19 RYMEC, BLY.
2010
%09. a) Program to find the Linear Convolution of two sequences using DFT and IDFT.
%Main Program: xn1=input('Enter the First Sequence :'); xn2=input('Enter the Second Sequence :'); n1=length(xn1); n2=length(xn2); N=n1+n2-1; x1=[xn1,zeros(1,N-n1)]; x2=[xn2,zeros(1,N-n2)]; X1k=dft(x1,N) X2k=dft(x2,N) Zk=X1k.*X2k z=idft(Zk,N) subplot(3,1,1) N1=0:1:n1-1; stem(N1,xn1) xlabel('Time Index--->'); ylabel('Magnitude--->'); title('Sequence xn1'); subplot(3,1,2) N2=0:1:n2-1; stem(N2,xn2) xlabel('n--->'); ylabel('Magnitude--->'); title('Sequence xn2'); subplot(3,1,3) n=0:1:N-1; stem(n,z) xlabel('n--->'); ylabel('Magnitude--->'); title('Linear Convolution'); %Sub Program for DFT: function[xk]=dft(xn,N) [N,m]=size(xn); if m~=1 xn=xn'; N=m; end xk=zeros(N,1); n=0:N-1; for k=0:N-1 xk(k+1)=exp(-j*2*pi*k*n/N)*xn end %Sub Program for IDFT: function[xn]=idft(Xk,N) [N,m]=size(Xk); if m~=1 Xk=Xk'; N=m; end xn=zeros(N,1); k=0:N-1 for n=0:N-1 xn(n+1)=1/N*exp(j*2*pi*k*n/N)*Xk; end
20 RYMEC, BLY.
2010
RESULT:
21 RYMEC, BLY.
2010
%09. b) Program to find the Linear Convolution of two sequences using FFT and IFFT.
xn1=input('Enter the First Sequence xn1:'); xn2=input('Enter the Second Sequence xn2:'); n1=length(xn1); n2=length(xn2); N=n1+n2-1; x1=[xn1,zeros(1,N-n1)]; x2=[xn2,zeros(1,N-n2)]; X1k=fft(x1,N) X2k=fft(x2,N) Zk=X1k.*X2k z=ifft(Zk,N) subplot(3,1,1) N1=0:1:n1-1; stem(N1,xn1) xlabel('Time Index--->'); ylabel('Magnitude--->'); title('Sequence xn1'); subplot(3,1,2) N2=0:1:n2-1; stem(N2,xn2) xlabel('n--->'); ylabel('Magnitude--->'); title('Sequence xn2'); subplot(3,1,3) n=0:1:N-1; stem(n,z) xlabel('n--->'); ylabel('Magnitude--->'); title('Linear Convolution');
22 RYMEC, BLY.
2010
RESULT:
23 RYMEC, BLY.
2010
%10. a) Program to find the Circular Convolution of two sequences using DFT and IDFT.
%Main Program: x1=input('enter the first sequence:'); x2=input ('enter the second sequence:'); N=input('enter the valus of n:'); x=dft(x1,N); y=dft(x2,N); z=x.*y; p=idft(z,N); n=0:1:N-1; subplot(2,2,1) stem(n,x1); disp(x1); xlabel('n---->'); ylabel('x1(n)---->'); title('input signal x1(n)---->'); n=0:1:N-1; subplot(2,2,2) stem(n,x2); disp(x2); xlabel('n---->'); ylabel('x2(n)---->'); title('signalx2(n)'); n=0:1:N-1; subplot(2,2,3) stem(n,p); disp(p); xlabel('n---->'); ylabel('p---->'); title('circular convolution'); %Sub Program for DFT: function[xk]=dft(xn,N) [N,m]=size(xn); if m~=1 xn=xn'; N=m; end xk=zeros(N,1); n=0:N-1; for k=0:N-1 xk(k+1)=exp(-j*2*pi*k*n/N)*xn end %Sub Program for IDFT: function[xn]=idft(Xk,N) [N,m]=size(Xk); if m~=1 Xk=Xk'; N=m; end xn=zeros(N,1); k=0:N-1 for n=0:N-1 xn(n+1)=1/N*exp(j*2*pi*k*n/N)*Xk; end
24 RYMEC, BLY.
2010
RESULT:
25 RYMEC, BLY.
2010
%10. b) Program to find the Circular Convolution of two sequences using FFT and IFFT.
x1=input('enter the first sequence:'); x2=input ('enter the second sequence:'); N=input('enter the valus of n:'); x=fft(x1,N); y=fft(x2,N); z=x.*y; p=ifft(z,N); n=0:1:N-1; subplot(2,2,1) stem(n,x1); disp(x1); xlabel('n---->'); ylabel('x1(n)---->'); title('input signal x1(n)---->'); n=0:1:N-1; subplot(2,2,2) stem(n,x2); disp(x2); xlabel('n---->'); ylabel('x2(n)---->'); title('signalx2(n)'); n=0:1:N-1; subplot(2,2,3) stem(n,p); disp(p); xlabel('n---->'); ylabel('p---->'); title('circular convolution');
26 RYMEC, BLY.
2010
RESULT:
27 RYMEC, BLY.
2010
%11. Program to design and implement an FIR filter to meet given specifications. %Pass Band Ripple : .25 %Stop Band Ripple : 50 %Pass Band cut off Frequency : .2*pi %Stop Band cut off Frequency : .25*pi %Cut off Frequence : .2
ap=input('enter the pass band ripple:') as=input('enter the stop band ripple:') wp=input('enter the pass band cut off frequency:') ws=input('enter the stop band cut off frequency:') wc=input('enter the cut off frequency:') t=(ws-wp)/(2*pi) n=8*pi/(ws-wp) wh=hamming(n); b=fir1(n-1,wc); w=0:0.01:pi; h=freqz(b,1,w); m=20*log10(abs(h)) plot(w,m) xlabel('frequency---->') ylabel('magnitude---->') title('response of fir low pass filter')
28 RYMEC, BLY.
2010
RESULT: enter the pass band ripple:0.25 ap = 0.2500 enter the stop band ripple:50 as = 50 enter the pass band cut off frequency:0.2*pi wp = 0.6283 enter the stop band cut off frequency:0.3*pi ws = 0.9425 enter the cut off frequency:0.2 wc = 0.2000 t= 0.0500 n= 80
29 RYMEC, BLY.
2010
%12. a) Program to design and implement an IIR filter to meet given specifications. % Pass Band Attenuation : .5 %Stop Band Attenuation : 15 %Pass Band Edge Frequency : .25*pi %Stop Band Edge Frequency : .55*pi %Sampling Frequency : 1 ap=input('enter pass band attenuation:') as=input('enter stop band attenuation:') wp=input('enter pass band edge frequency:') ws=input('enter stop band edge frequency:') t=input('enter sampling frequency:') fs=1/t; %translation of analog to digital wp=wp/fs ws=ws/fs %pre-wrapping wpp=(2/t)*tan(wp/2) wss=(2/t)*tan(ws/2) %to obtain H(s) [N,wc]=cheb1ord(wpp,wss,ap,as,'s') [a,b]=cheby1(N,ap,wc,'s') %analog to digital transformation [az,bz]=bilinear(a,b,fs) %plot of response k=0:0.01/pi:pi; h=freqz(az,bz,k); gain=20*log10(abs(h)); subplot(3,1,1) plot(k,abs(h)); subplot(3,1,2) plot(k,gain); grid on; subplot(3,1,3) plot(k,angle(h));
30 RYMEC, BLY.
2010
RESULT: enter pass band edge frequency:0.2*pi wp =0.6283 enter stop band edge frequency:0.3*pi ws = 0.9425 enter pass band attenuation:1 ap = 1 enter stop band attenuation:15 as = 15 enter sampling frequency:1 t= 1 wp = 0.6283 ws = 0.9425 wpp = 0.6498 wss = 1.0191 N= 4 wc = 0.6498 a= Columns 1 through 3 0 0 0 Columns 4 through 5 0 0.0438 b= Columns 1 through 3 1.0000 0.6192 0.6140 Columns 4 through 5 0.2038 0.0492 az = Columns 1 through 3 0.0018 0.0073 0.0110 Columns 4 through 5 0.0073 0.0018 bz = Columns 1 through 3 1.0000 -3.0543 3.8290 Columns 4 through 5 -2.2925 0.5507
31 RYMEC, BLY.
2010
%12. b) Program to design an butterwirth iir filter to meet given specifications. %Pass band attenuation:1 %Stop band attenuation:15 %Pass band frequency:.25*pi %Stop band frequency :.55*pi %Sampling frequency :1
ap=input('enter the pass band attenuation:'); as=input('enter the stop band attenuation:'); fp=input('enter the pass band frequency:'); fs=input('enter the stop band frequency :'); Fs=input('enter the sampling frequency :'); w1=fp*Fs; w2=fs*Fs; [N,wn]=buttord(w1,w2,ap,as,'s') [b,a]=butter(N,wn,'s') [Num,Den]=impinvar(b,a,Fs) freqz(Num,Den) title('butter worth low pass filter frequency response');
32 RYMEC, BLY.
2010
RESULT: enter the pass band attenuation:1 enter the stop band attenuation:15 enter the pass band frequency:.25*pi enter the stop band frequency :.55*pi enter the sampling frequency :1 N= 4 wn = 1.1266 b= Columns 1 through 4 0 0 0 0 Column 5 1.6107 a= Columns 1 through 4 1.0000 2.9439 4.3332 3.7362 Column 5 1.6107 Num = Columns 1 through 4 -0.0000 0.1212 0.2211 0.0281 Column 5 0 Den = Columns 1 through 4 1.0000 -1.2987 0.9685 -0.3529 Column 5 0.0527
33 RYMEC, BLY.
2010
34 RYMEC, BLY.
2010
1. Program to Find the Linear convolution of two finite length sequences. #include<stdio.h> int y[20]; main() { int m=6; int n=6; int i=0,j; int x[15]={1,2,3,4,5,6,0,0,0,0,0,0}; int h[15]={1,2,3,4,5,6,0,0,0,0,0,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]; /*Length of i/p samples sequence*/ /*Length of impulse response Co-efficients */ /*Input Signal Samples*/ /*Impulse Response Co-efficients*/
for(i=0;i<m+n-1;i++) printf("%d\n",y[i]); }
RESULT:
35 RYMEC, BLY.
2010
2. Program to Find the Circular convolution of two finite length sequences. #include<stdio.h> #include<math.h> int m,n,x[30],h[30],y[30],i,j,temp[30],k,x2[30],a[30]; void main() { printf("enter the length of 1st sequence\n"); scanf("%d",&m); printf("enter the length of 2nd sequence\n"); scanf("%d",&n); printf("enter the 1st sequence\n"); for(i=0;i<n;i++) scanf("%d",&x[i]); printf("enter the 2nd sequence\n"); for(j=0;j<n;j++) scanf("%d",&h[j]); if(m-n!=0) { if(m>n) {
36 RYMEC, BLY.
2010
for(k=1;k<n;k++) { y[k]=0; for(j=1;j<n;j++) x2[j]=a[j-1]; x2[0]=a[n-1]; for(i=0;i<n;i++) { a[i]=x2[i]; y[k]+=x[i]*x2[i]; } } printf("\n circular convolution\n"); for(i=0;i<n;i++) printf("%d\t",y[i]); }
37 RYMEC, BLY.
2010
RESULT:
38 RYMEC, BLY.
2010
3. Program to Find the Impulse response of first order and second order system. #include<stdio.h> #define order 2 #define len 7 float Y[len]={0,0,0},sum; void main() { int j,k; float a[order+1]={1,3}; float b[order+1]={1,2,3}; for(j=0;j<len;j++) { sum=0; for(k=1;k<=order;k++) { if(j-k>=0) sum+=b[k]*Y[j-k]; } if(j<=order) { Y[j]=a[j]-sum; } else Y[j]=-sum; printf("response[%d]%f\n\n",j,Y[j]); } }
39 RYMEC, BLY.
2010
RESULT:
40 RYMEC, BLY.