dc lab report

Post on 08-Feb-2016

51 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

MATLAB Programs Digital Communication Engineering Lab

TRANSCRIPT

CONTENTS

Topic Page No.

1. Generation of unit impulse, unit step, unit ramp and sinusoidal signal 1

2. Generation of real exponential and logarithmic signal 3

3. Generation of complex exponential signal 4

4. Realization of sinc function 6

5. Shifting, scaling and folding of a discrete time sequence 8

6. Performing linear convolution 11

7. Discrete Fourier Transform 13

8. Verification of convolution property of DFT 15

9. Performing convolution using DFT 17

10. Realization of ASK Modulation 18

11. Realization of FSK Modulation 19

12. Realization of PSK Modulation 20

13. Realization of QPSK Modulation 21

14. Realization of OQPSK Modulation 22

15. Realization of CPFSK Modulation 24

16. Realization of MSK Modulation 26

17. Perform sampling of a continuous time signal 28

18. Realize ASK, FSK and PSK using Simulink 29

1

Experiment 1: To generate unit impulse, unit step unit ramp and sinusoidal

signal using MATLAB.

Program:

%Program to generate unit impulse, unit step, unit ramp and sine wave clear all close all clc t=-1:0.01:1; x_impulse=[zeros(1,100),1,zeros(1,100)]; x_step=[zeros(1,100),ones(1,101)]; x_ramp=[zeros(1,100),t(101:201)]; x_sin=sin(2*pi*3*t); subplot 221 plot(t,x_impulse) title('unit impulse') xlabel('t') ylabel('\delta (t)') axis([-1,1,-0.5,1.5]); subplot 222 plot(t,x_step) title('unit step') xlabel('t') ylabel('u(t)') axis([-1,1,-0.5,1.5]); subplot 223 plot(t,x_ramp) title('unit ramp') xlabel('t') ylabel('r(t)') axis([-1,1,-0.5,1.5]); subplot 224 plot(t,x_sin) title('sine wave') xlabel('t') ylabel('sin(t)')

2

Output:

-1 -0.5 0 0.5 1-0.5

0

0.5

1

1.5unit impulse

t

δ (

t)

-1 -0.5 0 0.5 1-0.5

0

0.5

1

1.5unit step

tu(t

)

-1 -0.5 0 0.5 1-0.5

0

0.5

1

1.5unit ramp

t

r(t)

-1 -0.5 0 0.5 1-1

-0.5

0

0.5

1sine wave

t

sin

(t)

3

Experiment 2: To generate real exponential and logarithmic signal using

MATLAB

Program:

%Logartihmic and Real Exponential clear all close all clc t=linspace(0,10); t1=linspace(-1,1); t2=linspace(1,5); a=1; w=1; x1=a*log(w*t); x2=a*exp(w*t1); subplot 211 plot(t,x1) title('Logarithmic Function x(t)=a log(wt)') xlabel('time') ylabel('magnitude') grid on subplot 212 plot(t1,x2) title('Exponential Function x(t)=a e^{wt}') xlabel('time') ylabel('magnitude') grid on

Output:

0 1 2 3 4 5 6 7 8 9 10-4

-2

0

2

4Logarithmic Function x(t)=a log(wt)

time

magnitude

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 10

1

2

3Exponential Function x(t)=a ew t

time

magnitude

4

Experiment 3: Generation of Complex Exponential Signal

Program:

clear all close all clc a=2; b=3; t=linspace(-3,3,600); x1=exp(complex(a,b)*t); x2=exp(complex(a,-b)*t); x3=exp(complex(-a,b)*t); x4=exp(complex(-a,-b)*t); subplot 421 plot(t,abs(x1)); xlabel('time') ylabel('Magnitude') title('Magnitude of x(t)=e^{(a+ib)t}') subplot 422 plot(t,angle(x1)/pi); xlabel('time') ylabel('phase/\pi') title('Phase of x(t)=e^{(a+ib)t}') subplot 423 plot(t,abs(x2)); xlabel('time') ylabel('Magnitude') title('Magnitude of x(t)=e^{(a-ib)t}') subplot 424 plot(t,angle(x2)/pi); xlabel('time') ylabel('phase/\pi') title('Phase of x(t)=e^{(a-ib)t}') subplot 425 plot(t,abs(x3)); xlabel('time') ylabel('Magnitude') title('Magnitude of x(t)=e^{(-a+ib)t}') subplot 426 plot(t,angle(x3)/pi); xlabel('time') ylabel('phase/\pi') title('Phase of x(t)=e^{(-a+ib)t}') subplot 427 plot(t,abs(x4)); xlabel('time') ylabel('Magnitude') title('Magnitude of x(t)=e^{(-a-ib)t}') subplot 428 plot(t,angle(x4)/pi); title('Phase of x(t)=e^{(-a-ib)t}') xlabel('time') ylabel('phase/\pi')

5

Output:

6

Experiment 4: To realize sinc function using MATLAB

Theory:

Sinc function is defined as

������� = sin����

Where � is in radian. In MATLAB, the library function “sinc” calculates the value of

����� � = sin�� �

Program

% Program to generate a sinc signal clear all close all clc t=-10:0.1:10; for k=1:length(t) if(t(k)==0) x1(k)=1; else x1(k)=sin(pi*t(k))/(pi*t(k)); end end x2=sinc(t); subplot 211 plot(t,x1) title('Program output') xlabel('time') ylabel('Magnitude') subplot 212 plot(t,x2) title('Output using Sinc Function (in built)') xlabel('time') ylabel('Magnitude') disp('Maximum Error: ') max(abs(x1-x2))

7

Output:

-10 -5 0 5 10-0.4

-0.2

0

0.2

0.4

0.6

0.8

1Program output

time

Magnitude

-10 -5 0 5 10-0.4

-0.2

0

0.2

0.4

0.6

0.8

1Output using Sinc Function (in built)

time

Magnitude

8

Experiment 5: To perform shifting, scaling and folding operation on a discrete

time sequence.

Theory:

Shifting, scaling and folding are operations on the time-scale of a signal. Shifting is

performed to delay or advance the signal. Scaling is performed to vary the sampling rate

(either over-sampling or under-sampling). Folding on the other hand is associated with time

reversal.

Shifting:

x(n – k) : delay the signal by k samples.

x(n + k): advance the signal by k samples.

Scaling:

x(an), a > 1 : introduce (a-1) zeros between every pair samples so that the signal gets over-

sampled by a factor of a.

x(an), a < 1 : Consider only those samples for which (a × n) is an integer.

Folding:

Folding is performed to reverse the time scale.

Program

%shift and scale positive time signal clear all close all clc x=[2 4 6 8 4 3 2 1]; L=length(x); n=0:L-1; %Folding yfl=fliplr(x); figure subplot 211 stem(n,x) title('Input') subplot 212 stem(n,yfl) title('Folded signal') %-------------------------------- %Right Shifting (delaying) by k k=3;

9

yshr=[zeros(1,k),x]; nshr=[n,L+(0:k-1)]; %Left Shifting (advancing) by k yshl=[x,zeros(1,k)]; nshl=[-k:-1,n]; figure subplot 311 stem(n,x) title('Input') subplot 312 stem(nshr,yshr) title('Right-shifted signal') subplot 313 stem(nshl,yshl) title('Left-shifted signal') %---------------------------------- %scale by a (undersampling) a=2; yscu=x(1:a:L); nscu=1:floor(L/a); %scaling by 1/a y=zeros(1,a*L); nsco=0:a*(L-1); k1=1; for k=1:a:a*L ysco(k)=x((k-1)/a+1); end figure subplot 311 stem(n,x) title('Input') subplot 312 stem(nscu,yscu) title('Undersampled signal') subplot 313 stem(nsco,ysco) title('Oversampled signal')

Output

0 1 2 3 4 5 6 70

2

4

6

8Input

0 1 2 3 4 5 6 70

2

4

6

8Folded signal

10

0 1 2 3 4 5 6 70

5

10Input

0 1 2 3 4 5 6 7 8 9 100

5

10Right-shifted signal

-3 -2 -1 0 1 2 3 4 5 6 70

5

10Left-shifted signal

0 1 2 3 4 5 6 70

5

10Input

1 1.5 2 2.5 3 3.5 40

5

10Undersampled signal

0 2 4 6 8 10 12 140

5

10Oversampled signal

11

Experiment 6: To perform linear convolution of two discrete time sequences

using MATLAB

Theory

Linear convolution is a very important operation in digital signal processing and

communication. If x(n) be the input to a Linear Time Invariant (LTI) system with impulse

response h(n) , then its output is given by the convolution of x(n) and h(n).

Mathematically it can be written as

���� = ��� ∗ ����

Convolution sum of two discrete time sequences x(n) and y(n) is defined as:

��� ∗ ���� = � ���ℎ�� − ���

����

If Lx be the length of x(n) and Lh be the length of h(n) then the number of non-zero terms in

x(n)*h(n) is given by:

�� = �� + �� − 1

Program

%Program to convolution of two sequences (using matrix method) clear all close all clc x=input('Enter Input Sequence: '); xz=input('Enter zero position of input sequence:'); h=input('Enter Impulse Resonse: '); hz=input('Enter zero position of Impulse Resonse: '); lx=length(x); lh=length(h); l=lx+lh-1; nx=-xz+1:lx-xz; nh=-hz+1:lh-hz; x1=[x,zeros(1,lh)]; h1=[h,zeros(1,lx)]; y=zeros(1,l); for i=1:l for j=1:i; y(i)=y(i)+x1(j)*h1(i-j+1); end end y yz=xz+hz; ny=-(yz-1):l-(yz); conv(x,h) subplot 311 stem(nx,x); subplot 312

12

stem(nh,h) subplot 313 stem(ny,y)

Output

-2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 30

5

10Input sequence

-1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 40

5

10Impulse Response

-4 -3 -2 -1 0 1 2 3 4 5 60

100

200System output

13

Experiment 7: To perform Discrete Fourier Transform (DFT) using MATLAB

Theory:

Discrete Fourier Transform divides the frequency range ω = [0, 2π] into N discrete samples.

It is given by

���� = � ��� �!"#$�%%�&

$�'

where k ranges from 0 to (N – 1).

Program

% DFT_Using Transpose clear all close all clc N=input('Enter Length:'); x=input('Enter Sequence:'); N1=length(x); if(N>N1) x=[x,zeros(1,N-N1)]; elseif(N<N1) N=N1; end n=0:N-1; X=zeros(1,N); for k=1:N X(k)=X(k)+x*exp(-1i*2*pi*(k-1)*n/N)'; end disp('Input Sequence') x disp('Program Output') X disp('Result using fft function') X_ref=fft(x) Error=max(abs(abs(X_ref)-abs(X))) %Ploting Result X_mag=abs(X); X_phase=angle(X); subplot 311 stem(n,x) title('Input Sequence') subplot 312 stem(n,X_mag) title('Output Magnitude') subplot 313 stem(n,X_phase) title('Output Phase')

14

Result:

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5-10

0

10Input Sequence

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

20

40Output Magnitude

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5-5

0

5Output Phase

15

Experiment 8: To verify convolution property of Discrete Fourier Transform.

Theory

Convolution property of DFT states that if

()*)+ &���, = �&���

and ()*)+ "���, = �"���

then,

()*)+ &���⊗ "���, = �&����"���

Program

% Program to check that convolution in time domain is multiplication in % frequency domain clear all close all clc x=input('Enter 1st Sequence:'); y=input('Enter 2nd Sequence:'); lx=length(x); ly=length(y); %Performing convolution l=lx+ly-1; x1=[x,zeros(1,ly)]; y1=[y,zeros(1,lx)]; z1=zeros(1,l); for k1=1:l for k2=1:k1 z1(k1)=z1(k1)+x1(k2)*y1(k1-k2+1); end end % --------------------------------------------- % Performing DFT of 1st sequence X=zeros(1,l); for k1=1:l for n1=1:l X(k1)=X(k1)+x1(n1)*exp(-1i*2*pi*(k1-1)*(n1-1)/l); end end % --------------------------------------------- % Performing DFT of 2nd sequence Y=zeros(1,l); for k1=1:l for n1=1:l Y(k1)=Y(k1)+y1(n1)*exp(-1i*2*pi*(k1-1)*(n1-1)/l); end end % --------------------------------------------- %Multiplying for k=1:l

16

Z(k)=X(k)*Y(k); end %IDFT z=zeros(1,l); for n1=1:l for k1=1:l z(n1)=z(n1)+Z(k1)*exp(1i*2*pi*(n1-1)*(k1-1)/l); end z(n1)=z(n1)/l; end disp('Result using Frequency domain multiplication') real(z) disp('Result using time domain convolution') z1

Output

17

Experiment 9: To perform convolution using DFT

Program

%Convolution using DFT clear all close all clc x=input('Enter 1st Sequence:'); y=input('Enter 2nd Sequence:'); lx=length(x); ly=length(y); l=lx+ly-1; n=0:l-1; k=0:l-1; x1=[x,zeros(1,l-lx)]; y1=[y,zeros(1,l-ly)]; X1=x1*(exp(-2j*pi*n'*k/l)); Y1=y1*(exp(-2j*pi*n'*k/l)); Z=X1.*Y1; disp('Result using DFT:') z=(1/l)*Z*(exp(2j*pi/l)).^(k'*n) disp('Result using in-built function:') z1=conv(x,y) Error=max(abs(z1-z))

Output

18

Experiment 10: To realize amplitude shift keying (ASK) modulation using

MATLAB.

Program

%Program to generate ASK signal clear all; close all; clc; t=linspace(0,1); x1=sin(2*pi*3*t); b=input('Enter Bit Stream: '); l=length(b); Y=[]; X=[]; n=[]; for k=1:l n=[n,linspace(k-1,k)]; if(b(k)==0) X=[X,zeros(1,100)]; Y=[Y,zeros(1,100)]; elseif(b(k)==1) X=[X,ones(1,100)]; Y=[Y,x1]; else disp(['Error:',num2str(b(k)),' is not a bit']); return; end end subplot 211 plot(n,X) title('Input Sequence') subplot 212 plot(n,Y); title('Output ASK Sequenct')

Output

0 1 2 3 4 5 6 7-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7-1

-0.5

0

0.5

1Output ASK Sequenct

19

Experiment 11: To realize frequency shift keying (FSK) modulation using

MATLAB.

Program

%Program to generate FSK signal clear all; close all; clc; t=linspace(0,1); x1=sin(2*pi*2*t); x2=sin(2*pi*4*t); b=input('Enter Bit Stream: '); l=length(b); Y=[]; X=[]; n=[]; for k=1:l n=[n,linspace(k-1,k)]; if(b(k)==0) X=[X,zeros(1,100)]; Y=[Y,x1]; elseif(b(k)==1) X=[X,ones(1,100)]; Y=[Y,x2]; else disp(['Error:',num2str(b(k)),' is not a bit']); return; end end subplot 211 plot(n,X) axis([0,l,-0.5,1.5]); title('Input Sequence') subplot 212 plot(n,Y); title('Output FSK Sequenct')

Output

0 1 2 3 4 5 6 7-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7-1

-0.5

0

0.5

1Output FSK Sequenct

20

Experiment 12: To realize phase shift keying (PSK) modulation using MATLAB.

Program:

%Program to generate PSK signal clear all; close all; clc; t=linspace(0,1); x1=sin(2*pi*3*t); b=input('Enter Bit Stream: '); l=length(b); Y=[]; X=[]; n=[]; for k=1:l n=[n,linspace(k-1,k)]; if(b(k)==0) X=[X,zeros(1,100)]; Y=[Y,-x1]; elseif(b(k)==1) X=[X,ones(1,100)]; Y=[Y,x1]; else disp(['Error:',num2str(b(k)),' is not a bit']); return; end end subplot 211 plot(n,X) axis([0,l,-0.5,1.5]); title('Input Sequence') subplot 212 plot(n,Y); title('Output PSK Sequenct')

Output:

0 1 2 3 4 5 6 7-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7-1

-0.5

0

0.5

1Output PSK Sequenct

21

Experiment 13: To realize quadri-phase shift keying (QPSK) modulation using

MATLAB.

Program

%Program to generate QPSK signal %s1=10, s2=00, s3=01, s4=11 clear all; close all; clc; t=linspace(0,1,200); b=input('Enter Bit Stream: '); l=length(b); sym=[2 3 1 4]; Y=[]; X=[]; n=[]; if(mod(l,2)~=0) b=[b,0]; l=l+1; end for k=1:2:l X=[X,b(k)*ones(1,100),b(k+1)*ones(1,100)]; n=[n,linspace(k-1,k+1,200)]; z=sym(b(k)*2+b(k+1)+1); x1=cos(2*pi*3*t+(2*z-1)*pi/4); Y=[Y,x1]; end subplot 211 plot(n,X) title('Input Sequence') subplot 212 plot(n,Y) title('Output PSK Sequenct')

Output

0 1 2 3 4 5 6 7 8-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7 8-1

-0.5

0

0.5

1Output PSK Sequenct

22

Experiment 14: To realize orthogonal quadri-phase shift keying (OQPSK)

modulation using MATLAB.

Program

%Program to implement QPSK using IP/QP approach clear all close all clc t=linspace(0,2,200); b=input('Enter Bit Stream: '); l=length(b); phi1=cos(2*pi*3*t); phi2=sin(2*pi*3*t); sym=[2 3 1 4]; if(mod(l,2)~=0) b=[b,0]; l=l+1; end X=[]; Y=[]; n=[]; Yi=[]; Yq=[]; temp=zeros(1,100); for k=1:2:l X=[X,b(k)*ones(1,100),b(k+1)*ones(1,100)]; n=[n,linspace(k-1,k+1,200)]; z=sym(b(k)*2+b(k+1)+1); s1=cos((2*z-1)*pi/4); s2=sin((2*z-1)*pi/4); x1=s1*phi1-[temp,s2*phi2(1:100)]; Y=[Y,x1]; Yi=[Yi,s1*phi1]; Yq=[Yq,[temp,s2*phi2(1:100)]]; temp=s2*phi2(101:200); end subplot 211 plot(n,X) title('Input Sequence') axis([0,l,-0.5,1.5]); subplot 212 plot(n,Y) title('Output PSK Sequenct') figure subplot 311 plot(n,X) title('Input Sequence') subplot 312 plot(n,Yi); title('In-Phase Component') subplot 313 plot(n,Yq); title('Quad-Phase Component')

23

Output

0 1 2 3 4 5 6 7 8-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7 8-2

-1

0

1

2Output PSK Sequenct

0 1 2 3 4 5 6 7 8-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7 8-1

0

1In-Phase Component

0 1 2 3 4 5 6 7 8-1

0

1Quad-Phase Component

24

Experiment 15: To realize continuous phase frequency shift keying (CPFSK)

modulation using MATLAB.

Program

%Program to perform CPFSK clear all close all clc x=input('Enter the bit-stream: '); Tb=input('Enter Tb value: '); l=length(x); % t=linspace(0,l-1,l*100);

f1=5; f2=3;

fc=(f1+f2)/2; h=(f1-f2)/2; x1=[]; t=[]; for z=1:l t1=linspace(0 ,1)+(z-1); t=[t,t1]; if(x(z)==1) x1=[x1,ones(1,100)]; theta((z-1)*100+1:z*100)=pi*h*t1/Tb; elseif(x(z)==0) x1=[x1,zeros(1,100)]; theta((z-1)*100+1:z*100)=-pi*h*t1/Tb; else disp('error'); return end Xmsk((z-1)*100+1:z*100)=cos(2*pi*fc*t1+theta((z-1)*100+1:z*100)); end subplot 311

plot(t,x1)

axis([0,l,-0.5,1.5]);

title('Input Sequence')

subplot 312

plot(t,theta)

title('Phase Shift')

subplot 313

plot(t,Xmsk)

title('CPFSK Output')

25

Output

0 1 2 3 4 5 6 7-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7-100

0

100Phase Shift

0 1 2 3 4 5 6 7-1

0

1CPFSK Output

26

Experiment 16: To realize minimum shift keying (MSK) modulation using

MATLAB.

Program

%Program to perform MSK clear all close all clc x=input('Enter the bit-stream: '); Tb=input('Enter Tb value: '); l=length(x); % t=linspace(0,l-1,l*100); f1=5; f2=2; fc=(f1+f2)/2; h=1/2; x1=[]; t=[]; for z=1:l t1=linspace(0 ,1)+(z-1); t=[t,t1]; if(x(z)==1) x1=[x1,ones(1,100)]; theta((z-1)*100+1:z*100)=pi*h*t1/Tb; elseif(x(z)==0) x1=[x1,zeros(1,100)]; theta((z-1)*100+1:z*100)=-pi*h*t1/Tb; else disp('error'); return end Xmsk((z-1)*100+1:z*100)=cos(2*pi*fc*t1+theta((z-1)*100+1:z*100)); end subplot 311 plot(t,x1) axis([0,l,-0.5,1.5]); title('Input Sequence') subplot 312 plot(t,theta) title('Phase Shift') subplot 313 plot(t,Xmsk) title('CPFSK Output')

27

Output

0 1 2 3 4 5 6 7-0.5

0

0.5

1

1.5Input Sequence

0 1 2 3 4 5 6 7-20

0

20Phase Shift

0 1 2 3 4 5 6 7-1

0

1CPFSK Output

28

Experiment 17: To sample a continuous time signal

Program:

%My Program to test sampling clear all close all clc t=linspace(0,1); l=length(t); x=sin(2*pi*3*t)+sin(2*pi*5*t); Fs=[6,10,20]; for k=1:3 Ts=1/Fs(k) Ns=l*Ts/(t(l)-t(1)); xn=x(1:Ns:l); n=t(1:Ns:l); subplot(3,1,k) plot(t,x); hold on stem(n,xn) hold off grid on title('') xlabel('time') ylabel('amplitude') if k==1 title('Under-sampling') elseif k==2 title('Nyquist Rate-sampling') elseif k==3 title('Over-sampling') end end

Output

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-2

0

2Under-sampling

time

am

plit

ude

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-2

0

2Nyquist Rate-sampling

time

am

plit

ude

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-2

0

2Over-sampling

time

am

plit

ude

Experiment 18: To realize

1. ASK

Block

Scope

e ASK, FSK and PSK using Simulink

29

2. FSK

Block

Scope

30

3. PSK

Block:

Scope

31

top related