0% found this document useful (0 votes)
76 views

Submitted By:: Ravi Kumar ROLL NO. 2K13/EL/069

This document contains code and output from experiments conducted in a Digital Signal Processing lab. The experiments include: 1. Verifying the sampling theorem by sampling signals at frequencies below, at, and above the Nyquist rate. 2. Finding the impulse response of a given system using input coefficients and transfer function coefficients. 3. Performing linear convolution of two sequences by multiplying their Fourier transforms. 4. Performing circular convolution using the DFT and IDFT. 5. Implementing elementary signals like sine, cosine, ramp, exponential, unit step and impulse. 6. Designing lowpass and highpass FIR filters for a given sequence using different window functions.

Uploaded by

RaviKumar
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views

Submitted By:: Ravi Kumar ROLL NO. 2K13/EL/069

This document contains code and output from experiments conducted in a Digital Signal Processing lab. The experiments include: 1. Verifying the sampling theorem by sampling signals at frequencies below, at, and above the Nyquist rate. 2. Finding the impulse response of a given system using input coefficients and transfer function coefficients. 3. Performing linear convolution of two sequences by multiplying their Fourier transforms. 4. Performing circular convolution using the DFT and IDFT. 5. Implementing elementary signals like sine, cosine, ramp, exponential, unit step and impulse. 6. Designing lowpass and highpass FIR filters for a given sequence using different window functions.

Uploaded by

RaviKumar
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 42

Digital Signal

Processing Lab

Submitted by:
RAVI KUMAR
ROLL NO. 2K13/EL/069

EXPERIMENT-1
Program for verification of sampling theorem.

CODE :
clc; % clears the command window
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);
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);
title('The sinusoidal signal sampled at fs Hz');
xlabel('Time in seconds');
ylabel('Amplitude in volts');
subplot(3,1,3);
plot(tx,ys);
title('The recovered sinusoidal sampled at fs Hz');
xlabel('Time in seconds');
ylabel('Amplitude in volts');
% Right sampling
fs=2*f3; %fs = sampling freequency
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);
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);
title('The sinusoidal signal sampled at fs Hz');
xlabel('Time in seconds');
ylabel('Amplitude in volts');
subplot(3,1,3);
plot(tx,ys);
title('The recovered sinusidal sampled at fs Hz');
xlabel('Time in seconds');
ylabel('Amplitude in volts');
% over sampling
fs=3*f3; %fs = sampling freequency
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);
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);
title('The sinusoidal signal sampled at fs Hz');
xlabel('Time in seconds');
ylabel('Amplitude in volts');
subplot(3,1,3);
plot(tx,ys);
title('The recovered sinusidal sampled at fs Hz');
xlabel('Time in seconds');
ylabel('Amplitude in volts');

OUTPUT:

Undersampling :

Right Sampling :

Oversampling :

EXPERIMENT-2
Program to find impulse response of a given system.

CODE :
clc;
b=input('Enter the coefficiants of x(n) in the order x(n),x(n-1)...in the Matrix form = ');
a=input('Enter the coefficiants of y(n) in the order y(n),y(n-1)...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:

EXPERIMENT-3
Program to perform linear convolution of two given sequences.

CODE:
clc;
clear all;
close all;
x=input('enter the 1st sequence: ');

h=input('enter the 2nd sequence: ');


y=conv(x,h);
figure;subplot(3,1,1);
stem(x);ylabel('Amplitude');
xlabel('(a) n');
subplot(3,1,2);
stem(h);ylabel('Amplitude');
xlabel('(b) n');
subplot(3,1,3);
stem(y);ylabel('Amplitude');
xlabel('(c) n');
disp('The resultant signal is');

OUTPUT:

EXPERIMENT-4
Program to perform circular convolution of two given sequences.

CODE :

clc;
clear;
a = input('enter the sequence x(n) = ');
b = input('enter the sequence h(n) = ');
n1=length(a);
n2=length(b);
N=max(n1,n2);
x = [a zeros(1,(N-n1))];
for i = 1:N
k = i;
for j = 1:n2
H(i,j)=x(k)* b(j);
k = k-1;
if (k == 0)
k = N;
end
end
end
y=zeros(1,N);
M=H;
for j = 1:N
for i = 1:n2
y(j)=M(i,j)+y(j);
end
end
disp('The output sequence is y(n)= ');
disp(y);
stem(y);
title('Circular Convolution');
xlabel('n');
ylabel('y(n)');

OUTPUT:

EXPERIMENT-5
Program to perform cross-correlation of two given sequences.

CODE :
clc;

clear all;
close all;
x=input('enter the 1st sequence: ');
h=input('enter the 2nd sequence: ');
y=xcorr(x,h);
figure;
subplot(3,1,1);
stem(x);
ylabel('Amplitude');
xlabel('(a) n');
subplot(3,1,2);
stem(h);
ylabel('Amplitude');
xlabel('(b) n');
subplot(3,1,3);
stem(fliplr(y));
ylabel('Amplitude');
xlabel('(c) n');
disp('The resultant signal is');
fliplr(y);

OUTPUT:

EXPERIMENT-6
Program to perform auto-correlation of two given sequences.

CODE:
x=input('Enter the sequence: ');
y=xcorr(x,x);

figure;subplot(2,1,1);
stem(x);ylabel('Amplitude- ');
xlabel('(a) n');
subplot(2,1,2);
stem(fliplr(y));ylabel('Amplitude-');
xlabel('(b) n');
disp('The resultant signal is: ');
fliplr(y)

OUTPUT:

EXPERIMENT-7
Program for solution of difference equation.

CODE :

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');

OUTPUT :

EXPERIMENT-8

To compute DFT of the sequence and plot magnitude and phase spectra.

CODE :
clc;
clear all;
close all;
% input sequence
xn=input('Enter the input sequence: ');
N=input('Enter the number of points: ');
xk=dft(xn,N);
%magnitude of dft
magxk=abs(xk);
%phase of dft
phasexk=angle(xk);
k=0:N-1;
subplot(2,1,1);
stem(k,magxk);
title('DFT sequence');
xlabel('Frequency');
ylabel('Magnitude');
subplot(2,1,2);
stem(k,phasexk);
title('Phase of DFT sequence');
xlabel('Frequency');
ylabel('Phase');

OUTPUT :

EXPERIMENT-9
To compute linear convolution of two sequences using DFT and IDFT

CODE :
clc;
clear all;
x=input('Input First Sequence');
h=input('Input Second Sequence');
n1=length(x);
n2=length(h);
N=n1+n2-1;
x1=[x zeros(1,N-n1)];
x2=[h zeros(1,N-n2)];
a=fft(x, N);
b=fft(h, N);
c=a.*b;
d=ifft(c, N);
disp('First Sequence');
x
disp('Second Sequence');
h
disp('Convolved Sequence');
d
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 :

EXPERIMENT-9
To compute circular convolution of two sequences using DFT and IDFT

CODE :

clc;
clear all;
close all;
x1=input('Enter the 1st input:');
x2=input('Enter the 2nd input:');
lx1=length(x1);
lx2=length(x2);
l=max(lx1,lx2);
if(l==lx1)
x2=[x2,zeros(1,l-lx2)];end;
if(l==lx2)
x1=[x1,zeros(1,l-lx1)];end;
for k=1:l
x1n(k)=0;
x2n(k)=0;
for n=1:l
x1n(k)=x1n(k)+(x1(n)*exp((-1j)*2*pi*(k-1)*(n-1)/l));
x2n(k)=x2n(k)+(x2(n)*exp((-1j)*2*pi*(k-1)*(n-1)/l));
end;
end
y=x1n.*x2n;
ly=length(y);
for n=1:ly
y1(n)=0;
for k=1:ly
y1(n)=y1(n)+y(k)*exp(1j*2*pi*(k-1)*(n-1)/ly);
end;
y1(n)=y1(n)/ly;
end;
disp(y1);
subplot(2,2,1);
stem(x1);
title('1st input');
subplot(2,2,2);
stem(x2);
title('2nd input');
subplot(2,2,3:4);
stem(abs(y1));
title('circular convolution using DFT & IDFT');

OUTPUT :

EXPERIMENT-12
PROGRAM TO IMPLEMENT SOME ELEMENTARY SIGNALS

CODE :
clc;
t=0:0.1:pi;
y=sin(2*pi*t);
subplot(3,2,1);

stem(t,y);
ylabel('Amplitude');
xlabel('Time');
title('SINE SEQUENCE');
t=0:0.1:pi;
y=cos(2*pi*t);
subplot(3,2,2);
stem(t,y);
ylabel('Amplitude');
xlabel('Time');
title('COSINE SEQUENCE');
n1=input('Enter the length of the ramp signal:');
t=0:n1;
subplot(3,2,3);
stem(t,t);
ylabel('Amplitude');
xlabel('Time');
title('RAMP SEQUENCE');
n2=input('Enter the length of the exponential sequence:');
t=0:n2;
a=input('Enter the "a" value:');
y2=exp(a*t);
subplot(3,2,4);
stem(t,y2);
ylabel('Amplitude');
xlabel('Time');
title('EXPONENTIAL SEQUENCE');
n3=input('Enter the length of the unit sequence:');
t=0:1:n3-1;
y1=ones(1,n3);
subplot(3,2,5);
stem(t,y1);
ylabel('Amplitude');
xlabel('Time');
title('UNIT STEP SEQUENCE');
t=-5:5;
y=[zeros(1,5),ones(1,1),zeros(1,5)];
subplot(3,2,6);
stem(t,y);

ylabel('Amplitude');
xlabel('Time');
title('UNIT IMPULSE SEQUENCE');

OUTPUT :

EXPERIMENT-12

PROGRAM TO IMPLEMENT A LP FIR FILTER FOR GIVEN SEQUENCE

CODE :
clc;
clear all;
close all;
rp=input('enter passband ripple');
rs=input('enter the stopband ripple');
fp=input('enter passband freq');
fs=input('enter stopband freq');
f=input('enter sampling freq ');
wp=2*fp/f;
ws=2*fs/f;
num=-20*log10(sqrt(rp*rs))-13;
dem=14.6*(fs-fp)/f;
n=ceil(num/dem);
n1=n+1;
if(rem(n,2)~=0)
n1=n;
n=n-1;
end
c=input('enter your choice of window function 1. rectangular 2. triangular 3.kaiser: \n ');
if(c==1)
y=rectwin(n1);
disp('Rectangular window filter response');
end
if (c==2)
y=triang(n1);
disp('Triangular window filter response');
end
if(c==3)
y=kaiser(n1);
disp('kaiser window filter response');
end
%LPF
b=fir1(n,wp,y);
[h,o]=freqz(b,1,256);
m=20*log10(abs(h));
subplot(2,1,1);plot(o/pi,m);
title('LPF');

ylabel('Gain in dB-->');
xlabel('(a) Normalized frequency-->');
wp=2*fp/f;
ws=2*fs/f;
num=-20*log10(sqrt(rp*rs))-13;
dem=14.6*(fs-fp)/f;
n=ceil(num/dem);
n1=n+1;
if(rem(n,2)~=0)
n1=n;
n=n-1;
end
c=input('enter your choice of window function 1. rectangular 2. triangular 3.kaiser: \n ');
if(c==1)
y=rectwin(n1);
disp('Rectangular window filter response');
end
if (c==2)
y=triang(n1);
disp('Triangular window filter response');
end
if(c==3)
y=kaiser(n1);
disp('kaiser window filter response');
end
%LPF
b=fir1(n,wp,y);
[h,o]=freqz(b,1,256);
m=20*log10(abs(h));
subplot(2,1,1);plot(o/pi,m);
title('LPF');
ylabel('Gain in dB-->');
xlabel('(a) Normalized frequency-->');
grid on

OUTPUT:

enter passband ripple0.02


enter the stopband ripple0.01
enter passband freq1000
enter stopband freq1500

enter sampling freq 10000


enter your choice of window function 1. rectangular 2. triangular 3.kaiser:

RECTANGULAR WINDOW FILTER RESPONSE

TRIANGULAR WINDOW FILTER RESPONSE

KAISER WINDOW FILTER RESPONSE

EXPERIMENT-13
PROGRAM TO IMPLEMENT A HP FIR FILTER FOR GIVEN SEQUENCE

CODE :
clc;
clear all;

close all;
rp=input('enter passband ripple');
rs=input('enter the stopband ripple');
fp=input('enter passband freq');
fs=input('enter stopband freq');
f=input('enter sampling freq ');
wp=2*fp/f;
ws=2*fs/f;
num=-20*log10(sqrt(rp*rs))-13;
dem=14.6*(fs-fp)/f;
n=ceil(num/dem);
n1=n+1;
if(rem(n,2)~=0)
n1=n;
n=n-1;
end
c=input('enter your choice of window function 1. rectangular 2. triangular 3.kaiser: \n ');
if(c==1)
y=rectwin(n1);
disp('Rectangular window filter response');
end
if (c==2)
y=triang(n1);
disp('Triangular window filter response');
end
if(c==3)
y=kaiser(n1);
disp('kaiser window filter response');

%HPF
b=fir1(n,wp,'high',y);
[h,o]=freqz(b,1,256);
m=20*log10(abs(h));
subplot(2,1,2);plot(o/pi,m);
title('HPF');
ylabel('Gain in dB-->');
xlabel('(b) Normalized frequency-->');

OUTPUT:

enter passband ripple0.02


enter the stopband ripple0.01
enter passband freq1000
enter stopband freq1200
enter sampling freq 10000
enter your choice of window function 1. rectangular 2. triangular 3.kaiser:

RECTANGULAR WINDOW FILTER RESPONSE

TRIANGULAR WINDOW FILTER RESPONSE

KAISER WINDOW FILTER RESPONSE

EXPERIMENT-14
PROGRAM TO IMPLEMENT A LP IIR FILTER FOR GIVEN SEQUENCE

CODE :

clc;
close all;

clear all;
format long;
rp=input('Enter the passband ripple(rp):');
rs=input('Enter the stopband ripple(rs):');
fp=input('Enter the passband frequency(fp):');
fs=input('Enter the stopband frequency(fs):');
f=input('Enter the sampling frequency(f):');
wp=2*fp/f;
ws=2*fs/f;
[n,wn]=buttord(wp,ws,rp,rs);
[b,a]=butter(n,wn);
w=0:0.01:pi;
[h,o]=freqz(b,a,w);
m=20*log10(abs(h));
an=angle(h);
subplot(2,1,1);
plot(o/pi,m);
ylabel('Gain(db)->');
xlabel('(a)Normalised frequency->');
subplot(2,1,2);
plot(o/pi,an);
ylabel('Phase(radians)->');
xlabel('(b)Normalised frequency->');

OUTPUT:
Enter the passband ripple(rp):0.4
Enter the stopband ripple(rs):30
Enter the passband frequency(fp):400
Enter the stopband frequency(fs):800
Enter the sampling frequency(f):2000

EXPERIMENT-15
PROGRAM TO IMPLEMENT DECIMINATION PROCESS

CODE :
% DECIMATION
clc;
clear all;
close all;
disp('Let us take a sinusoidal sequence which has to be decimated: ');
fm=input('Enter the signal frequency fm: ');
fs=input('Enetr the sampling frequnecy fs: ');
T=input('Enter the duration of the signal in seconds T: ');
dt=1/fs;
t=dt:dt:T
M=length(t);
m=cos(2*pi*fm*t);
r=input('Enter the factor by which the sampling frequency has to be reduced r: ');
md=decimate(m,r);
figure(1);
subplot(3,1,1);
plot(t,m);
grid;
xlabel('t-->');
ylabel('Amplitude-->');
title('Sinusoidal signal before sampling');
subplot(3,1,2);
stem(m);
grid;
xlabel('n-->');
ylabel('Amplitudes of m -->');
title('Sinusoidal signal after sampling before decimation');
subplot(3,1,3);
stem(md);
grid;
title('Sinusoidal after decimation');
xlabel('n/r-->');
ylabel('Amplitude of md-->');

OUTPUT:

Let us take a sinusoidal sequence which has to be decimated:


Enter the signal frequency fm: 2
Enetr the sampling frequnecy fs: 100
Enter the duration of the signal in seconds T: 1

Amplitude of md-->

Amplitudes of m -->

Amplitude-->

Enter the factor by which the sampling frequency has to be reduced r: 2

Sinusoidal signal before sampling

1
0
-1

0.1

0.2

0.3

0.4

10

20

30

40

10

15

0.5
0.6
0.7
0.8
t-->
Sinusoidal signal after sampling before decimation

0.9

80

90

100

40

45

50

0
-1

50
60
70
n-->
Sinusoidal after decimation

0
-1

20

25
n/r-->

30

35

EXPERIMENT-15
PROGRAM TO IMPLEMENT INTERPOLATION PROCESS

CODE :
%INTERPOLATION
clc;
clear all;
close all;
disp('Let us take a sinusoidal sequence which has to be interpolated: ');
fm=input('Enter the signal frequency fm: ');
fs=input('Enetr the sampling frequnecy fs: ');
T=input('Enter the duration of the signal in seconds T: ');
dt=1/fs;
t=dt:dt:T
M=length(t);
m=cos(2*pi*fm*t);
r=input('Enter the factor by which the sampling frequency has to be increased r: ');
md=interp(m,r);
figure(1);
subplot(3,1,1);
plot(t,m);
grid;
xlabel('t-->');
ylabel('Amplitude-->');
title('Sinusoidal signal before sampling');
subplot(3,1,2);
stem(m);
grid;

xlabel('n-->');
ylabel('Amplitudes of m -->');
title('Sinusoidal signal after sampling before interpolation');
subplot(3,1,3);
stem(md);
grid;
title('Sinusoidal after interpolation');
xlabel('n x r-->');
ylabel('Amplitude of md-->');

OUTPUT :
Let us take a sinusoidal sequence which has to be interpolated:
Enter the signal frequency fm: 2
Enetr the sampling frequnecy fs: 100
Enter the duration of the signal in seconds T: 1
Enter the factor by which the sampling frequency has to be increased r: 2

Amplitude-->
Amplitudes of m -->
Amplitude of md-->

Sinusoidal signal before sampling

1
0
-1

0.1

0.2

0.3

0.4

10

20

30

40

20

40

60

80

0.5
0.6
0.7
0.8
t-->
Sinusoidal signal after sampling before interpolation

0.9

80

90

100

160

180

200

0
-1

50
60
70
n-->
Sinusoidal after interpolation

0
-2

100
120
n x r-->

140

EXPERIMENT-17
PROGRAM TO DETERMINE POWER SPECTRUM OF A GIVEN SEQUENCE

CODE :
clc;
clear all;
close all;
f1=input('Enter the frequency of first sequence in Hz: ');
f2=input('Enter the frequency of the second sequence in Hz: ');
fs=input('Enter the sampling frequency in Hz: ');
t=0:1/fs:1;
x=2*sin(2*pi*f1*t)+3*sin(2*pi*f2*t)+rand(size(t));
px1=abs(fft(x).^2);

px2=abs(fft(xcorr(x),length(t)));
subplot(211)
plot(t*fs,10*log10(px1));%square magnitude
grid;
xlabel('Freq.in Hz-->');
ylabel('Magnitude in dB-->');
title('PSD using square magnitude method');
subplot(212)
plot(t*fs,10*log10(px2));%autocorrelation
grid;
xlabel('Freq.in Hz-->');
ylabel('Magnitude in dB-->');
title('PSD using auto correlation method');

OUTPUTS:
Enter the frequency of first sequence in Hz: 200
Enter the frequency of the second sequence in Hz: 400
Enter the sampling frequency in Hz: 1000

PSD using square magnitude method

Magnitude in dB-->

100
50
0
-50

100

200

100

200

Magnitude in dB-->

60

300

400
500
600
700
Freq.in Hz-->
PSD using auto correlation method

800

900

1000

800

900

1000

50
40
30

300

400
500
600
Freq.in Hz-->

700

You might also like