Sei sulla pagina 1di 42

DEPARTMENT OF

ELECTRONICS & COMMUNICATION ENGINEERING

DIGITAL SIGNAL PROCESSING LAB MANUAL

III YEAR VI SEMESTER (ECE)

AMRAPALI INSTITUTE
OF
TECHNOLOGY AND SCIENCES
DIGITAL SIGNAL PROCESSING LAB (VI SEM)
INDEX
1. Architecture of DSP chips-TMS 320C 6713 DSP Processor
2. Linear convolution
3. Circular convolution
4. FIR Filter (LP/HP) Using Windowing technique
a. Rectangular window
b. Triangular window
c. Kaiser window
5. IIR Filter(LP/HP) on DSP processors
6. N-point FFT algorithm
7. Power Spectral Density of a sinusoidal signals
8. FFT of 1-D signal plot
9. MATLAB program to generate sum of sinusoidal signals
10. MATLAB program to find frequency response of analog
(LP/HP)
1. Linear Convolution

AIM: To verify Linear Convolution.

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:

Convolution is a formal mathematical operation, just as multiplication, addition, and integration.


Addition takes two numbers and produces a third number, while convolution takes two signals
and produces a third signal. Convolution is used in the mathematics of many fields, such as
probability and statistics. In linear systems, convolution is used to describe the relationship
between three signals of interest: the input signal, the impulse response, and the output signal.

In this equation, x1(k), x2(n-k) and y(n) represent the input to and output from the system at time
n. Here we could see that one of the input is shifted in time by a value every time it is multiplied
with the other input signal. Linear Convolution is quite often used as a method of implementing
filters of various types.

PROGRAM:
// Linear convolution program in c language using CCStudio

#include<stdio.h>
int x[15],h[15],y[15];
main()
{
int i,j,m,n;

printf("\n enter value for m");


scanf("%d",&m);
printf("\n enter value for n");
scanf("%d",&n);

printf("Enter values for i/p x(n):\n");


for(i=0;i<m;i++)
scanf("%d",&x[i]);
printf("Enter Values for i/p h(n) \n");
for(i=0;i<n; i++)
scanf("%d",&h[i]);
// padding of zeros
for(i=m;i<=m+n-1;i++)
x[i]=0;
for(i=n;i<=m+n-1;i++)
h[i]=0;
/* convolution operation */
for(i=0;i<m+n-1;i++)
{
y[i]=0;
for(j=0;j<=i;j++)
{
y[i]=y[i]+(x[j]*h[i-j]);
}
}
//displaying the o/p
for(i=0;i<m+n-1;i++)
printf("\n The Value of output y[%d]=%d",i,y[i]);
}

Result:

enter value for m4

enter value for n4


Enter values for i/p
1234
Enter Values for n
1234

The Value of output y[0]=1


The Value of output y[1]=4
The Value of output y[2]=10
The Value of output y[3]=20
The Value of output y[4]=25
The Value of output y[5]=24
The Value of output y[6]=16
% MATLAB program for linear convolution

%linear convolution program

clc;
clear all;
close all;
disp('linear convolution program');

x=input('enter i/p x(n):');


m=length(x);
h=input('enter i/p h(n):');
n=length(h);

x=[x,zeros(1,n)];
subplot(2,2,1), stem(x);
title('i/p sequence x(n)is:');
xlabel('---->n');
ylabel('---->x(n)');grid;

h=[h,zeros(1,m)];
subplot(2,2,2), stem(h);
title('i/p sequence h(n)is:');
xlabel('---->n');
ylabel('---->h(n)');grid;

disp('convolution of x(n) & h(n) is y(n):');

y=zeros(1,m+n-1);

for i=1:m+n-1
y(i)=0;
for j=1:m+n-1
if(j<i+1)
y(i)=y(i)+x(j)*h(i-j+1);
end
end
end
y
subplot(2,2,[3,4]),stem(y);
title('convolution of x(n) & h(n) is :');
xlabel('---->n');
ylabel('---->y(n)');grid;
Result :
2. Circular Convolution

AIM: To verify Circular Convolution.

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY

Circular convolution is another way of finding the convolution sum of two input signals. It
resembles the linear convolution, except that the sample values of one of the input signals is
folded and right shifted before the convolution sum is found. Also note that circular convolution
could also be found by taking the DFT of the two input signals and finding the product of the two
frequency domain signals. The Inverse DFT of the product would give the output of the signal in
the time domain which is the circular convolution output. The two input signals could have been
of varying sample lengths. But we take the DFT of higher point, which ever signals levels to. For
eg. If one of the signal is of length 256 and the other spans 51 samples, then we could only take
256 point DFT. So the output of IDFT would be containing 256 samples instead of 306 samples,
which follows N1+N2 – 1 where N1 & N2 are the lengths 256 and 51 respectively of the two
inputs. Thus the output which should have been 306 samples long is fitted into 256 samples. The
256 points end up being a distorted version of the correct signal. This process is called circular
convolution.

PROGRAM:

/* program to implement circular convolution */

#include<stdio.h>
int m,n,x[30],h[30],y[30],i,j, 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:-

Enter the length of the first sequence


4
Enter the length of the second sequence
3
Enter the first sequence
1234
Enter the second sequence
123
The circular convolution is
18 16 10 16

Model Graph:-
%circular convolution program
clc;
clear all;
close all;
disp('circular convolution program');

x=input('enter i/p x(n):');


m=length(x);
h=input('enter i/p sequence h(n)');
n=length(h);

subplot(2,2,1), stem(x);
title('i/p sequencce x(n)is:');
xlabel('---->n');
ylabel('---->x(n)');grid;

subplot(2,2,2), stem(h);
title('i/p sequencce h(n)is:');
xlabel('---->n');
ylabel('---->h(n)');grid;

disp('circular convolution of x(n) & h(n) is y(n):');


if(m-n~=0)
if(m>n)
h=[h,zeros(1,m-n)];
n=m;
end
x=[x,zeros(1,n-m)];
m=n;
end

y=zeros(1,n);
y(1)=0;
a(1)=h(1);

for j=2:n
a(j)=h(n-j+2);
end

%ciruclar conv
for i=1:n
y(1)=y(1)+x(i)*a(i);
end

for k=2:n
y(k)=0;
% circular shift
for j=2:n
x2(j)=a(j-1);
end
x2(1)=a(n);

for i=1:n
if(i<n+1)
a(i)=x2(i);
y(k)=y(k)+x(i)*a(i);
end
end
end
y
subplot(2,2,[3,4]),stem(y);
title('convolution of x(n) & h(n) is:');
xlabel('---->n');
ylabel('---->y(n)');grid;

Result :
3. FIR filters
AIM: To verify FIR filters.

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:
A Finite Impulse Response (FIR) filter is a discrete linear time-invariant system
whose output is based on the weighted summation of a finite number of past inputs.
An FIR transversal filter structure can be obtained directly from the equation for
discrete-time convolution.
N 1
y ( n)   x ( k ) h(n  k ) 0  n  N  1 (1)
k 0
In this equation, x(k) and y(n) represent the input to and output from the filter at time
n. h(n-k) is the transversal filter coefficients at time n. These coefficients are
generated by using FDS (Filter Design Software or Digital filter design package).

FIR – filter is a finite impulse response filter. Order of the filter should be specified.
Infinite response is truncated to get finite impulse response. placing a window of
finite length does this. Types of windows available are Rectangular, Barlett,
Hamming, Hanning, Blackmann window etc. This FIR filter is an all zero filter.
PROGRAM:

#include<stdio.h>
#include<math.h>
#define pi 3.1415
int n,N,c;
float wr[64],wt[64];
void main()
{
printf("\n enter no. of samples,N= :");
scanf("%d",&N);

printf("\n enter choice of window function\n 1.rect \n 2. triang \n c= :");


scanf("%d",&c);
printf("\n elements of window function are:");
switch(c)
{
case 1:
for(n=0;n<=N-1;n++)
{
wr[n]=1;
printf(" \n wr[%d]=%f",n,wr[n]);
}
break;
case 2:
for(n=0;n<=N-1;n++)
{
wt[n]=1-(2*(float)n/(N-1));
printf("\n wt[%d]=%f",n,wt[n]);
}
break;

}
}
RESULT:
PROGRAM:
%fir filt design window techniques
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,2,1);plot(o/pi,m);
title('LPF');
ylabel('Gain in dB-->');
xlabel('(a) Normalized frequency-->');
%HPF
b=fir1(n,wp,'high',y);
[h,o]=freqz(b,1,256);
m=20*log10(abs(h));
subplot(2,2,2);plot(o/pi,m);
title('HPF');
ylabel('Gain in dB-->');
xlabel('(b) Normalized frequency-->');
%BPF
wn=[wp ws];
b=fir1(n,wn,y);
[h,o]=freqz(b,1,256);
m=20*log10(abs(h));
subplot(2,2,3);plot(o/pi,m);
title('BPF');
ylabel('Gain in dB-->');
xlabel('(c) Normalized frequency-->');
%BSF
b=fir1(n,wn,'stop',y);
[h,o]=freqz(b,1,256);
m=20*log10(abs(h));
subplot(2,2,4);plot(o/pi,m);
title('BSF');
ylabel('Gain in dB-->');
xlabel('(d) Normalized frequency-->');
RESULT:
4. IIR filters
AIM
To design and implement IIR (LPF/HPF)filters.

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:

The IIR filter can realize both the poles and zeroes of a system because it has a
rational transfer function, described by polynomials in z in both the numerator and
the denominator:
M

b
k 0
k z k
H ( z) N (2)
a
k 1
k Z k

The difference equation for such a system is described by the following:


M N
y ( n)   bk x ( n  k )  a k y(n  k ) (3)
k 0 k 1

M and N are order of the two polynomials


bk and ak are the filter coefficients. These filter coefficients are generated using FDS
(Filter Design software or Digital Filter design package).

IIR filters can be expanded as infinite impulse response filters. In designing IIR
filters, cutoff frequencies of the filters should be mentioned. The order of the filter
can be estimated using butter worth polynomial. That’s why the filters are named as
butter worth filters. Filter coefficients can be found and the response can be plotted.
PROGRAM:

//iirfilters
#include<stdio.h>
#include<math.h>
int i,w,wc,c,N;
float H[100];
float mul(float, int);
void main()
{
printf("\n enter order of filter ");
scanf("%d",&N);
printf("\n enter the cutoff freq ");
scanf("%d",&wc);
printf("\n enter the choice for IIR filter 1. LPF 2.HPF ");
scanf("%d",&c);
switch(c)
{
case 1:
for(w=0;w<100;w++)
{
H[w]=1/sqrt(1+mul((w/(float)wc),2*N));
printf("H[%d]=%f\n",w,H[w]);
}
break;
case 2:
for(w=0;w<=100;w++)
{
H[w]=1/sqrt(1+mul((float)wc/w,2*N));
printf("H[%d]=%f\n",w,H[w]);
}
break;
}
}
float mul(float a,int x)
{
for(i=0;i<x-1;i++)
a*=a;
return(a);
}
RESULT :
PROGRAM :
% IIR filters LPF & HPF
clc;
clear all;
close all;

disp('enter the IIR filter design specifications');


rp=input('enter the passband ripple');
rs=input('enter the stopband ripple');
wp=input('enter the passband freq');
ws=input('enter the stopband freq');
fs=input('enter the sampling freq');
w1=2*wp/fs;w2=2*ws/fs;
[n,wn]=buttord(w1,w2,rp,rs,'s');
c=input('enter choice of filter 1. LPF 2. HPF \n ');
if(c==1)
disp('Frequency response of IIR LPF is:');
[b,a]=butter(n,wn,'low','s');
end
if(c==2)
disp('Frequency response of IIR HPF is:');
[b,a]=butter(n,wn,'high','s');
end
w=0:.01:pi;
[h,om]=freqs(b,a,w);
m=20*log10(abs(h));
an=angle(h);
figure,subplot(2,1,1);plot(om/pi,m);
title('magnitude response of IIR filter is:');
xlabel('(a) Normalized freq. -->');
ylabel('Gain in dB-->');
subplot(2,1,2);plot(om/pi,an);
title('phase response of IIR filter is:');
xlabel('(b) Normalized freq. -->');
ylabel('Phase in radians-->');
RESULT :
5. Fast Fourier Transform

AIM: To verify Fast Fourier Transform.

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:

The Fast Fourier Transform is useful to map the time-domain sequence into a
continuous function of a frequency variable. The FFT of a sequence {x(n)} of length
N is given by a complex-valued sequence X(k).

M nk
 j 2
X ( k )   x (n) e n
;0  k  N  1
k 0

The above equation is the mathematical representation of the DFT. As the number of
computations involved in transforming a N point time domain signal into its
corresponding frequency domain signal was found to be N2 complex multiplications,
an alternative algorithm involving lesser number of computations is opted.
When the sequence x(n) is divided into 2 sequences and the DFT performed
separately, the resulting number of computations would be N2/2
(i.e.)
N2 N2
21 21
x(k )   x(2n) WN2 nk   x(2n  1) WN( 2 n1) k (6)
n 0 n0

Consider x(2n) be the even sample sequences and x(2n+1) be the odd sample
sequence derived form x(n).
N2
21
 x ( 2n)
n 0
WN2 nk
would result in (7)
N2
21
(N/2)2multiplication’s
 x(2n  1)
n 0
WN( 2 n1) k (8)

an other (N/2)2 multiplication's finally resulting in (N/2)2 + (N/2)2

N2 N2 N2
=   Computations
4 4 2

Further solving Eg. (2)


N2 N
21 21 k
x(k )   x(2n) WN2 nk   x(2n  1) WN( 2 nk ) W (9)
N
n 0 n 0

N N
21 k 21
  x(2n) WN2 nk  W  x(2n  1) WN( 2 nk ) (10)
N
n 0 n0

Dividing the sequence x(2n) into further 2 odd and even sequences would reduce the
computations.
WN  is the twiddle factor
 j 2
e n

  j 2 
  nk
W nk
N e  n 

 N  N
 K   K 
W 
N
2
 WN W 
N
2
(11)

 j 2  j 2 n
k n 2
e n
e
 j 2
k
 WNk e n

 WNk (cos   j sin  )

 N
K 
W 
N
2 
 WNk (1)

 N
 K 
W  2 
 WNk (12)
N

Employing this equation, we deduce


N2 N
21 21
x(k )   x(2n) WN2 nk   x(2n  1) WN( 2 nk ) (13)
n 0 n 0

N
K N
N 21
x(k  )   x(2n) WN2 nk  W  x(2n  1) 21 WN( 2 nk ) (14)
2 n 0 N

The time burden created by this large number of computations limits the usefulness of
DFT in many applications. Tremendous efforts devoted to develop more efficient
ways of computing DFT resulted in the above explained Fast Fourier Transform
algorithm. This mathematical shortcut reduces the number of calculations the DFT
requires drastically. The above mentioned radix-2 decimation in time FFT is
employed for domain transformation.
Dividing the DFT into smaller DFTs is the basis of the FFT. A radix-2 FFT divides
the DFT into two smaller DFTs, each of which is divided into smaller DFTs and so
on, resulting in a combination of two-point DFTs. The Decimation -In-Time (DIT)
FFT divides the input (time) sequence into two groups, one of even samples and the
other of odd samples. N/2 point DFT are performed on the these sub-sequences and
their outputs are combined to form the N point DFT.
FIG. 3A.1

The above shown mathematical representation forms the basis of N point FFT and is
called the Butterfly Structure.

STAGE – I STAGE - II
STAGE – III

FIG. 3A.2 – 8 POINT DIT


PROGRAM:
%fast fourier transform

clc;
clear all;
close all;
tic;
x=input('enter the sequence');
n=input('enter the length of fft');
%compute fft
disp('fourier transformed signal');
X=fft(x,n)
subplot(1,2,1);stem(x);
title('i/p signal');
xlabel('n --->');
ylabel('x(n) -->');grid;
subplot(1,2,2);stem(X);
title('fft of i/p x(n) is:');
xlabel('Real axis --->');
ylabel('Imaginary axis -->');grid;
RESULT:
6. Power Spectral Density

AIM: To verify Power Spectral Density

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:

The power spectral density(P.S.D) is a measurement of the energy at various frequencies.

PROGRAM:

%Power spectral density


t = 0:0.001:0.6;
x = sin(2*pi*50*t)+sin(2*pi*120*t);
y = x + 2*randn(size(t));
figure,plot(1000*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)');
Y = fft(y,512);
%The power spectral density, a measurement of the energy at various frequencies, is:
Pyy = Y.* conj(Y) / 512;
f = 1000*(0:256)/512;
figure,plot(f,Pyy(1:257))
title('Frequency content of y');
xlabel('frequency (Hz)');
RESULT:
7. Sum of Sinusoidal Signals

AIM: To verify Sum of Sinusoidal Signals using MATLAB

EQUIPMENTS:

Operating System – Windows XP


Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:
To generate fourier series of a signal by observing sum of sinusoidal signals & observing gibbs
phenomenon effect.

PROGRAM:

% sum of sinusoidal signals


clc;
clear all;
close all;
tic;
%giving linear spaces
t=0:.01:pi;
% t=linspace(0,pi,20);
%generation of sine signals

y1=sin(t);
y2=sin(3*t)/3;
y3=sin(5*t)/5;
y4=sin(7*t)/7;
y5=sin(9*t)/9;

y = sin(t) + sin(3*t)/3 + sin(5*t)/5 + sin(7*t)/7 + sin(9*t)/9;

plot(t,y,t,y1,t,y2,t,y3,t,y4,t,y5);
legend('y','y1','y2','y3','y4','y5');
title('generation of sum of sinusoidal signals');grid;
ylabel('---> Amplitude');
xlabel('---> t');
toc;
RESULT:
8. LPF & HPF

AIM: To verify response of analog LPF & HPF using MATLAB


EQUIPMENTS:
Operating System – Windows XP
Constructor - Simulator
Software - CCStudio 3 & MATLAB 7.5

THEORY:
Analog Low pass filter & High pass filter are obtained by using butterworth or chebyshev
filter with coefficients are given. The frequency – magnitude plot gives the frequency
response of the filter.
PROGRAM:
% IIR filters LPF & HPF
clc;
clear all;
close all;
warning off;
disp('enter the IIR filter design specifications');
rp=input('enter the passband ripple');
rs=input('enter the stopband ripple');
wp=input('enter the passband freq');
ws=input('enter the stopband freq');
fs=input('enter the sampling freq');
w1=2*wp/fs;w2=2*ws/fs;
[n,wn]=buttord(w1,w2,rp,rs,'s');
c=input('enter choice of filter 1. LPF 2. HPF \n ');
if(c==1)
disp('Frequency response of IIR LPF is:');
[b,a]=butter(n,wn,'low','s');
end
if(c==2)
disp('Frequency response of IIR HPF is:');
[b,a]=butter(n,wn,'high','s');
end
w=0:.01:pi;
[h,om]=freqs(b,a,w);
m=20*log10(abs(h));
an=angle(h);
figure,subplot(2,1,1);plot(om/pi,m);
title('magnitude response of IIR filter is:');
xlabel('(a) Normalized freq. -->');
ylabel('Gain in dB-->');
subplot(2,1,2);plot(om/pi,an);
title('phase response of IIR filter is:');
xlabel('(b) Normalized freq. -->');
ylabel('Phase in radians-->');

Potrebbero piacerti anche