0% found this document useful (0 votes)
365 views30 pages

Digital Signal Processing Lab Record

The document contains the practical record of experiments conducted in the Digital Signal Processing lab by Anvesh Gopalam. It includes 12 experiments on topics like: 1. Verifying the sampling theorem by sampling sinusoidal signals. 2. Finding the impulse response of a system and solving differential equations. 3. Performing linear and circular convolution of sequences using different techniques like direct convolution, DFT, on a DSP processor. 4. Other techniques like autocorrelation, cross-correlation, and implementing DFT on a DSP processor. For each experiment, the code and outputs are documented.

Uploaded by

AnveshGopalam
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
365 views30 pages

Digital Signal Processing Lab Record

The document contains the practical record of experiments conducted in the Digital Signal Processing lab by Anvesh Gopalam. It includes 12 experiments on topics like: 1. Verifying the sampling theorem by sampling sinusoidal signals. 2. Finding the impulse response of a system and solving differential equations. 3. Performing linear and circular convolution of sequences using different techniques like direct convolution, DFT, on a DSP processor. 4. Other techniques like autocorrelation, cross-correlation, and implementing DFT on a DSP processor. For each experiment, the code and outputs are documented.

Uploaded by

AnveshGopalam
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

DEPARTMENT OF TELECOMMUNICATION PES INSTITUTE OF TECHNOLOGY

SEMESTER 5, BATCH OF 2009-2013

Digital Signal Processing Lab


Practical Record
Anvesh Gopalam 1PI09TE015

Experiment 1: Program to Verify Sampling Theorem


Code: clc; clear all; t=0:.001:0.1; f1=input ('Enter the input frequency1 f2=input ('Enter the input frequency2 y=cos(2*pi*f1*t)+cos(2*pi*f2*t); f3=max(f1,f2); % under sampling fs=f3; %fs = sampling freequency ts=1/fs; tx=0:ts:0.1; m=max(size(tx)); ys=cos(2*f1*pi*tx)+cos(2*pi*f2*tx); figure(1); subplot(3,1,1); plot(t,y); grid on; title('The sinusoidal signal cos(2*pi*f1*t)+cos(2*pi*f2*t)'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); subplot(3,1,2); stem(tx,ys); grid on; title('The sinusoidal signal sampled at fs Hz'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); subplot(3,1,3); plot(tx,ys); grid on; title('The recovered sinusidal sampled at fs Hz'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); % Right sampling fs=2*f3; %fs = sampling frequency is twice the max f ts=1/fs; tx=0:ts:0.1; m=max(size(tx)); ys=cos(2*pi*f1*tx)+cos(2*pi*f2*tx); figure(2); subplot(3,1,1); plot(t,y); grid on; title('The sinusoidal signal cos(2*pi*f1*t)+cos(2*pi*f2*t)'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); subplot(3,1,2); stem(tx,ys); grid on; title('The sinusoidal signal sampled at fs Hz'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); subplot(3,1,3); plot(tx,ys); grid on; = '); = ');

title('The recovered sinusidal sampled at fs Hz'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); % over sampling fs=3*f3; %fs = sampling frequency is greater than twice the max f ts=1/fs; tx=0:ts:0.1; m=max(size(tx)); ys=cos(2*pi*f1*tx)+cos(2*pi*f2*tx); figure(3); subplot(3,1,1); plot(t,y); grid on; title('The sinusoidal signal cos(2*pi*f1*t)+cos(2*pi*f2*t)'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); subplot(3,1,2); stem(tx,ys); grid on; title('The sinusoidal signal sampled at fs Hz'); xlabel('Time in seconds'); ylabel('Amplitude in volts'); subplot(3,1,3); plot(tx,ys); grid on; title('The recovered sinusidal sampled at fs Hz'); xlabel('Time in seconds'); ylabel('Amplitude in volts');

Output:
1. Under Sampling:

2. Over Sampling

3. Right Sampling

Experiment 2: Program to find the Impulse response of the system


Code: %a0*y(n)-a1*y(n-1)+a2*y(n-2)=b0*x(n)+b1*x(n-1)+b2*x(n-2) clc; clear all; close all; b=input('Enter the coefficients of x(n) in the order x(n),x(n1)...in the Matrix form = '); a=input('Enter the coefficients of y(n) in the order y(n),y(n1)...in the Matrix form = '); n=-5:20; x=(n==0); h=filter(b,a,x) figure(1); subplot(2,1,1); stem(n,x); xlabel('n'); ylabel('amplitude'); title('impulse sequence'); subplot(2,1,2); stem(n,h); xlabel('n'); ylabel('amplitude'); title('impulse response');

Output:
X Coefficients: 0.2, 0.4, 0.6 Y Coefficients: 1.5, 1.99, 0.45 H coefficients: 0, 0, 0, 0, 0.133, 0.898, 0.2409, -3.465, 0.3874, -0.4101, 0.4278, -0.4445, -0.4614, 0.4787 Graph Output:

Experiment 3: Program to perform linear Convolution of two given sequences


Code: clc; clear all; close all; x1= input('Enter first sequence '); x2= input('Enter second sequence '); n1=length(x1); n2=length(x2); N= n1 + n2 -1; %Gets the length of the sequence x1=[x1 zeros(1,N-n1)]; x2=[x2 zeros(1,N-n2)]; m=[Link]N-1; for n=0:N-1 y(n+1)=sum(x2(mod(n-m,N)+1).*x1); end; %Display and plotting disp('Linear convoluted sequence'); ydisp('First sequence'); x1 disp('Second sequence'); x2 disp('Convolved sequence'); ysubplot(3,1,1); stem(x1); title('First sequence'); xlabel('Signal'); ylabel('Time'); subplot(3,1,2); stem(x2); title('Second sequence'); xlabel('Signal'); ylabel('Time'); subplot(3,1,3); stem(y); title('Convolved sequence'); xlabel('Signal'); ylabel('Time');

Output:
Console output:

Graph output:

Experiment 4: Program to perform circular convolution of two given sequences


Code: clc; clear all; x=input('Input first sequence '); h=input('Input second sequence '); N1=length(x); N2=length(h); N=max(N1,N2); x=[x zeros(1,N-N1)]; h=[h zeros(1,N-N2)]; %Calculation for m=1:N y(m)=0; for n=1:N i=m-n+1; if(i<=0) i=N+i; end y(m)=y(m)+x(n)*h(i); end end %display disp('First sequence'); x disp('Second sequence'); h disp('Convolved sequence'); y n=0:N-1; subplot(3,1,1); stem(x); title('First sequence'); ylabel('Signal'); xlabel('Time'); subplot(3,1,2); stem(h); title('Second sequence'); ylabel('Signal'); xlabel('Time'); subplot(3,1,3); stem(y); title('Convolved sequence'); ylabel('Signal'); xlabel('Time');

Output:
Console output:

Graph output:

Experiment 5: Autocorrelation of a given sequence


Code: clc; clear all; close all; x=input('Enter the Sequence'); y=xcorr(x,x); %When the same sequence is passed to the xcorr fn, it returns the auto correlation %Display figure; subplot(2,1,1); stem(x); ylabel('Amplitude'); xlabel('n'); subplot(2,1,2); stem(fliplr(y)); %fliplr flips the sequence (Reverses) y; ylabel('Amplitude'); xlabel('n'); disp('The resultant signal is'); fliplr(y);

Output:
Console output:

Graph output:

Experiment 6: Cross-Correlation of a given sequence


Code: clc; clear all; close all; x=input('Enter the Sequence'); h=input('Enter the Second Sequence'); xcorr(x,h); %Passes sequence x and h to the xcorr fn figure; subplot(3,1,1); stem(x); %Sequence X ylabel('Anplitude'); xlabel('n'); subplot(3,1,2); stem(h); %Sequence H ylabel('Anplitude'); xlabel('n'); subplot(3,1,3); stem(y); y %Correlated sequence ylabel('Anplitude'); xlabel('n'); disp('The resultant signal is '); fliplr(y);

Output:
Console:

Graph:

Experiment 7: Program to solve differential equations


Code 1:
% y(n) -0.5 y(n-1) = x(n) with x(n)=u(n)-u(n-4) b=input('enter the coefficients of x'); a=input('enter the coefficients of y'); n=[-5:50]; x=[(n>=0)]-[(n>4)]; figure(1); subplot(2,1,1); stem(n,x); title('input sequence x(n)'); xlabel('n'); ylabel('x'); subplot(2,1,2); y=filter(b,a,x); stem(n,y); title('output sequence y(n)'); xlabel('n'); ylabel('y');

Code 2:
% y(n) -0.25 y(n-1) -0.125 y(n-2)= x(n) with x(n)=u(n)-u(n-10) and initial condition y(-1)=1, y(-2)=-2 b=input('enter the coefficients of x'); a=input('enter the coefficients of y'); c=input('enter the initial conditions'); n=[-5:50]; ic=filtic(b,a,c); x=[(n>=0)]-[(n>10)]; y=filter(b,a,x,ic); subplot(2,1,1); stem(n,x); title('input sequence x(n)'); xlabel('n'); ylabel('x'); subplot(2,1,2); stem(n,y); title('output sequence y(n)'); xlabel('n'); ylabel('y');

Output:
Input data: Y Coefficients: 1, -0.5 AND -0.25, -0.125, -1 X Coefficients: 1, 1 AND 1, -1 Initial condition: y(-1)=1, y(-2)=-2 Graph output:

Experiment 8: Program to implement linear convolution using DFT


Code: clc; clear all; x=input('Input First Sequence: '); h=input('Input Second Sequence: '); n1=length(x); n2=length(h); N=n1+n2-1; % length = l+m -1 % Set the vector arrays and perform the operations a=fft(x,N); % X(K) b=fft(h,N); % H(K) c=a.*b; % c(K)=a(K) x b(K) d=ifft(c,N); % d= x(n) * h(n) %Console Displays disp('First Sequence'); x disp('Second sequence'); h disp('Convolved Sequence'); d n=0:N-1; subplot(3,1,1); % Plots stem(x); title('First Sequence'); ylabel('Signal'); xlabel('Time'); subplot(3,1,2); stem(h); title('Second Sequence'); ylabel('Signal'); xlabel('Time'); subplot(3,1,3); stem(d); title('Convolved Sequence'); ylabel('Signal'); xlabel('Time');

Output:
Console:

Graph:

Experiment 9: Program to implement circular convolution using DFT


Code: clc; clear all; x=input('Input First Sequence: '); h=input('Input Second Sequence: '); n1=length(x); n2=length(h); N=max(n1,n2); %length= max legth % Set the vector arrays and perform the operations a=fft(x,N); % X(K) b=fft(h,N); % H(K) c=a.*b; % c(K)=a(K) x b(K) d=ifft(c,N); % d= x(n) * h(n) %Console Displays disp('First Sequence'); x disp('Second sequence'); h disp('Convolved Sequence'); d % Plots n=0:N-1; subplot(3,1,1); stem(x); title('First Sequence'); ylabel('Signal'); xlabel('Time'); subplot(3,1,2); stem(h); title('Second Sequence'); ylabel('Signal'); xlabel('Time'); subplot(3,1,3); stem(d); title('Convolved Sequence'); ylabel('Signal'); xlabel('Time');

Output:
Console:

Graph:

Experiment 10: Program to implement linear convolution using a DSP processor


Code: #include<stdio.h> #define LENGHT1 6 /*Lenght of i/p samples sequence*/ #define LENGHT2 4 /*Lenght of impulse response Co-efficients */ int x[2*LENGHT1-1]={1,2,3,4,5,6,0,0,0,0,0}; /*Input Signal Samples*/ int h[2*LENGHT1-1]={1,2,3,4,0,0,0,0,0,0,0}; /*Impulse Response Coefficients*/ int y[LENGHT1+LENGHT2-1]; main() { int i=0,j; for(i=0;i<(LENGHT1+LENGHT2-1);i++) { y[i]=0; for(j=0;j<=i;j++) y[i]+=x[j]*h[i-j]; } for(i=0;i<(LENGHT1+LENGHT2-1);i++) printf("%d\n",y[i]); }

Output:
Console:

1 4 10 20 30 40 43

Experiment 11: Program to implement circular convolution using a DSP processor


Code: #include<stdio.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 the first sequence\n"); scanf("%d",&m); printf("Enter the length of the second sequence\n"); scanf("%d",&n); printf("Enter the first sequence\n"); for(i=0;i<m;i++) scanf("%d",&x[i]); printf("Enter the second sequence\n"); for(j=0;j<n;j++) scanf("%d",&h[j]); if(m-n!=0) /*If length of both sequences are not equal*/ { if(m>n) /* Pad the smaller sequence with zero*/ { for(i=n;i<m;i++) h[i]=0; n=m; } for(i=m;i<n;i++) x[i]=0; m=n; } y[0]=0; a[0]=h[0]; for(j=1;j<n;j++) /*folding h(n) to h(-n)*/ a[j]=h[n-j]; /*Circular convolution*/ for(i=0;i<n;i++) y[0]+=x[i]*a[i]; for(k=1;k<n;k++) { y[k]=0; /*circular shift*/ 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]; } } /*displaying the result*/ printf("The circular convolution is\n"); for(i=0;i<n;i++) printf("%d \t",y[i]); }

Output:
30 25 25 30 40

Experiment 12: Program to implement DFT using a DSP processor


Code: #include <stdio.h> #include <math.h> float x[4]={1,3,2,5}; //input only real sequence main() { float y[16]; //for 8 point DFT to store real & imaginary float w; int n,k,k1,N=8,xlen=4; for(k=0;k<2*N;k=k+2) { y[k]=0; y[k+1]=0; //initialize real & imag parts k1=k/2; //actual k index for(n=0;n<xlen;n++) { w=-2*3.14*k1*n/N; //careful about minus sign y[k]=y[k]+x[n]*cos(w); y[k+1]=y[k+1]+x[n]*sin(w); } printf("%f+j%f \n",y[k],y[k+1]); } }

Output:
11.000000+j0.000000 -0.407551+j-7.660229 -1.009553+j1.996802 2.424618+j-3.646700 -4.999949+j-0.022297 2.396778+j3.673697 -0.971310+j-2.009436 -0.460720+j7.633044

Experiment 13: Program to implement impulse response of order 2 using a DSP processor
Code: #include <stdio.h> #define order 2 // Define the order of impulse response #define len 10 // Define the length float Y[len]={0,0,0},sum; main() { int j,k; float a[order+1]={1,1,1}; float b[order+1]={1,2,1}; for(j=0;j<len;j++) { sum=0.0; for(k=1;k<=order;k++) { if((j-k)>=0) sum=sum+(a[k]*Y{j-k]); } if(j<=order) Y[j]=b[j]-sum; else Y[j]=sum; printf("response[%d]= %f",j,Y[j];); //print the computed response } } }

Output:
Response Response Response Response Response Response Response Response Response Response [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] = = = = = = = = = = 1.000000 1.000000 -1.000000 0.000000 -1.000000 -1.000000 -2.000000 -3.000000 -5.000000 -8.000000

Experiment 14: Program to implement FIR filter to meet given specification


Code:
clc; clear all; close all; %Input% rp=input('Enter the passband attenuation :'); rs=input('Enter the stopband attenuation :'); fp=input('Enter the passband frequency :'); fs=input('Enter the stopband frequency :'); f=input('Enter the sampling frequency :'); %Computation% wp=2*fp/f; ws=2*fs/f; num=-20* log10(sqrt(rp*rs))-13; den=14.6*(fs-fp)/f; n=ceil(num/den); n1=n+1; if(rem(n,2)~=0) n1=n; n=n-1; end %Boxcar% figure(1); y=boxcar(n1); b=fir1(n,wp,y); [H,f]=freqz(b,1,256); H_mag=20*log10(abs(H)); plot(f/pi,H_mag); %Bartlett% figure(2); y=bartlett(n1); b=fir1(n,wp,y); [H,f]=freqz(b,1,256); H_mag=20*log10(abs(H)); plot(f/pi,H_mag); %Hanning% figure(3); y=hanning(n1); b=fir1(n,wp,y); [H,f]=freqz(b,1,256); H_mag=20*log10(abs(H)); plot(f/pi,H_mag); %Hamming% figure(4); y=hamming(n1); b=fir1(n,wp,y); [H,f]=freqz(b,1,256); H_mag=20*log10(abs(H));

plot(f/pi,H_mag); %Blackman% figure(5); y=blackman(n1); b=fir1(n,wp,y); [H,f]=freqz(b,1,256); H_mag=20*log10(abs(H)); plot(f/pi,H_mag); %Kaiser% figure(6); y=kaiser(n1); b=fir1(n,wp,y); [H,f]=freqz(b,1,256); H_mag=20*log10(abs(H)); plot(f/pi,H_mag);

Output:
Console:

Graphs:

Experiment 15: Program to implement IIR filter to meet given specification


Code:
clc; clear all; %Inputs% pb=input('Enter the pass band edge frequency '); sb=input('Enter the stop band edge frequency '); pbr=input('Enter the pass band attenuation '); sbr=input('Enter the stop band attenuation '); fs= input('Enter the sampling frequency '); pbrad=pb*2*pi; sbrad=sb*2*pi; %Butterworth% [n,wn]=buttord(pbrad,sbrad,pbr,sbr,'s'); [b,a]=butter(n,wn,'s'); [z,p,k]=tf2zp(b,a); [zd,pd,kd]=bilinear(z,p,k,fs); [num,den]=zp2tf(zd,pd,kd); figure(1); freqz(num,den,512,fs); title('Butter worth frequency response'); %ChebyShev% [n,wn]=cheb1ord(pbrad,sbrad,pbr,sbr,'s'); [b,a]=cheby1(n,pbr,wn,'s'); [z,p,k]=tf2zp(b,a); [zd,pd,kd]=bilinear(z,p,k,fs); [num,den]=zp2tf(zd,pd,kd); figure(2); freqz(num,den,512,fs); title('Chebychev1 Freequency Response');

Output:
Console:

Graphs:

You might also like