Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
88% found this document useful (8 votes)
7K views

DSP Using Matlab® - 4

This lecture discusses discrete signal analysis and various types of sequences that can be generated in MATLAB, including unit sample sequences, unit step sequences, exponential sequences, sinusoidal sequences, random sequences, and periodic sequences. It also covers basic sequence operations that can be performed in MATLAB such as addition, multiplication, scaling, shifting, folding, summation, products, energy, and power. Examples are provided to demonstrate how to generate sequences and perform operations on them using MATLAB code and functions.

Uploaded by

api-3721164
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
88% found this document useful (8 votes)
7K views

DSP Using Matlab® - 4

This lecture discusses discrete signal analysis and various types of sequences that can be generated in MATLAB, including unit sample sequences, unit step sequences, exponential sequences, sinusoidal sequences, random sequences, and periodic sequences. It also covers basic sequence operations that can be performed in MATLAB such as addition, multiplication, scaling, shifting, folding, summation, products, energy, and power. Examples are provided to demonstrate how to generate sequences and perform operations on them using MATLAB code and functions.

Uploaded by

api-3721164
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 40

Lecture 4: Discrete Signal Analysis

Prof. Dr. Salina A.


Samad
Mr. Iskandar Yahya
Sequence Generation
Types of Sequences
Unit Sample Sequence
 Create s single impulse between a finite number of
zeros.
 Having a function is useful, alternatively use “zeros”
function [x,n] = impseq(n0,n1,n2)
function.
%generates x(n) = delta(n-n0); n1 <= n <= n2
%--------------------------------------------
%[x,n] = impseq(n0,n1,n2)
%

n = [n1:n2]; x = [(n-n0) == 0]; %giving values of n and x

stem(n,x); %stem plot or impulse plotting function


title('Unit Sample Sequence')
xlabel('n'); ylabel('x(n)');
Sequence Generation
Unit Sample Sequence
 The resulting plot looks like this
Unit Sample Sequence
2

1.8

1.6

1.4

1.2
x(n)

0.8

0.6

0.4

0.2

0
­5 ­4 ­3 ­2 ­1 0 1 2 3 4 5
n
Sequence Generation
Unit Step Sequence
 We can have another elegant way to produce a step
function
 Alternatively, we can use the “ones” function
function [x,n] = stepseq(n0,n1,n2)
%generates x(n) = u(n-n0); n1 <= n <= n2
%--------------------------------------------
%[x,n] = stepseq(n0,n1,n2)
%

n = [n1:n2]; x = [(n-n0) >= 0];

stem(n,x);
title('Unit Sample Sequence')
xlabel('n'); ylabel('x(n)');
Sequence Generation
Unit Step Sequence
 Type “stepseq(0,-5,5)” we get:
Unit Sample Sequence
2

1.8

1.6

1.4

1.2
x(n)

0.8

0.6

0.4

0.2

0
­5 ­4 ­3 ­2 ­1 0 1 2 3 4 5
n
Sequence Generation
Real-valued exponential Sequence
 The operator “.^” is required to implement a real
exponential sequence.
 For example, to generate x(n) = (0.9)n, 0<= n<=10,
we will need the following script:

>> n = [0:10]; x = (0.9).^n;

 Example tutorial:
 Create a function (M-file) to generate an exponential

sequence.
 Use the previous examples as your guide.
Sequence Generation
Complex-valued exponential Sequence
 A matlab function “exp” is used to generate
exponential sequences.
 For example, to generate x(n) = exp[(2+j3)n], 0<=
n<=10, we will need the following script:
>> n = [0:10]; x = exp((2+3j)*n);
 Note that you need different plot commands for
plotting real and imaginary components.

Sinusoidal sequence
 A matlab function “cos” (or sin) is used to generate
sinusoidal sequences.
 To generate x(n) = 3cos(0.1πn + π/3) + 2sin(0.5
πn),
0<= n<=10, we will need the following script:
>> n = [0:10]; x = 3*cos(0.1*pi*n+pi/3) + 2*sin(0.5*pi*n);
Sequence Generation
Random Sequences
 A random or stochastic sequences are characterised
by parameters of the associated probability density
functions or their statistical moments.
 In matlab, 2 types of (psuedo ) random sequences
are avalable:
 “rand(1,N)” generates a length N random sequence

whos elements are uniformly distributed between 0


and 1.
 “randn(1,N) generates a length N gaussian random

sequence with mean 0 and variance 1.

 Other random sequences can be generated suing


transformation of the above functions. (Check
previous lecture slides)
Sequence Generation
Periodic sequence
 A sequence is periodic if x(n) = x(n +N).
 To generate P periods of x(n) from one period, we can
copy x(n) P times:
>> xtilde = [x,x,x,x...,x];
 An elegant approach is to use matlab’s indexing
capabilites:
 Generate a matrix containing P rows of x(n) values.

 Concatenate P rows into a long row vector using the

construct (:).
 Have to use matrix transposition operator (‘) to provide
>> xtilde
the same = x' * ones(1,P);
effect %P columns of x; x is a row vector
on rows:
>> xtilde = xtilde(:); %long coloumn vector
>> xtilde = xtilde'; %long row vector
Sequence Operation
Signal addition
 To add two sequences x1(n) and x2(n) requires the
operator “+”.
 But the length of both sequences must be equal and
have the same sample position
 We have to first augment both x1(n) and x2(n) so
that they have the same position vector and hence
length.
 This requires careful attention to matlab’s indexing
operations.
Sequence Operation
Signal addition
 The following function, called “sigadd”, demonstrate
this operation:
function [y,n] = sigadd(x1,n1,x2,n2)
%generates y(n) = x1(n) + x2(n)
%--------------------------------------------
%[y,n] = sigadd(x1,n1,x2,n2)
% y = sum sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2 (n2 can be different from n1)
%

n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)


y1 = zeros(1,length(n)); y2 = y1; % Initilization
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1+y2; % sequence addition
Sequence Operation
Signal Multiplication
 Sample-to-sample multiplication (or “dot”
multiplication)
 Implemented in matlab by the array operator “.*”

 Again, same restriction as using “+”

 We can create a function called “sigmult”:


Sequence Operation
function [y,n] = sigmult(x1,n1,x2,n2)
%generates y(n) = x1(n)*x2(n)
%--------------------------------------------
%[y,n] = sigmult(x1,n1,x2,n2)
% y = product sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2 (n2 can be different from n1)
%

n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)


y1 = zeros(1,length(n)); y2 = y1; % Initilization
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1 .* y2; % sequence Multiplication
Sequence Operation
Signal Scaling
 α{ x(. n )} = { αx( n )}
Each sample is multiplied by a scalar
 Use the command “*” for scaling.

Signal Shifting
 Each sample of x(n) is shifted by an amount k to
y( n ) = {y(n)
obtain a shifted sequence x( n − k )}
% MATLAB function
if let m = n − k function [y,n] = sigshift(x,m,n0)
n = m+k % implements y(n) = x(n-n0)
% ----------------------
then y( m + k ) = { x( m )} % [y,n] = sigshift(x,m,n0)
%
n = m+n0; y = x;
Sequence Operation
Folding
 Each sample is of x(n) is flipped around n=0 to
obtain a folded n ) = { − x( n )}y(n)
y( sequence
 Implement “sigfold” by “fliplr(x)” & “-fliplr(x)”.

% MATLAB function
function [y,n] = sigfold(x,n)
% implements y(n) = x(-n)
% --------------------
% [y,n] = sigfold(x,n)
%
y = fliplr(x); n = -fliplr(n);

Signal Summation ∑
n2
n = n1
x( n ) = x( n1 ) + ⋅ ⋅ ⋅ + x( n2 )
 Adds all sample values of x(n) between n1 and n2
 Implement by “sum(x(n1:n2))” function
Sequence Operation
Sample Products
n2

∏ x( n ) = x( n1 ) × ⋅ ⋅ ⋅ × x( n2 )
n1
 Multiplies all sample values of x(n) between n1 and
n2.
 Implement by “prod(x(n1:n2))” function..

Signal Energy
ε x = ∑−∞ x( n )x* ( n ) = ∑−∞ x( n )
∞ ∞ 2

 Superscript * denotes the operation of complex


conjugation
% MATLAB code
 Implemented by
Ex = sum(x .* conj(x)) % one approach
Ex = sum(abs(x) .^ 2) % another approach
Sequence Operation
Signal Power
1 N −1
Px = ∑0 x( n )
2

N
 Average power of a periodic sequence with
fundamental period N
Sequence Operation
Example 1:
 Let x( n ) = { 1,2 ,3,4 ,5,6 ,7 ,6 ,5,4,3,2 ,1 }

 Determine and plot the following sequences

a . x1( n ) = 2 x( n − 5 ) − 3 x( n + 4 )
b. x2 ( n ) = x( 3 − n ) + x( n )x( n − 2 )
Sequence Operation
Example 1 coding:

% MATLAB code for part (a)


n = [-2:10]; x = [1:7,6:-1:1];
[x11,n11] = sigshift(x,n,5); [x12,n12] = sigshift(x,n,-4);
[x1,n1] = sigadd(2*x11,n11,-3*x12,n12);

% MATLAB code for part (b)


n = [-2:10]; x = [1:7,6:-1:1];
[x21,n21] = sigfold(x,n); [x21,n21] = sigshift(x21,n21,3);
[x22,n22] = sigshift(x,n,2); [x22,n22] = sigmult(x,n,x22,n22);
[x2,n2] = sigadd(x21,n21,x22,n22);

% Plotting coding
subplot(2,1,1); stem(n1,x1); title('Sequence in Example 1a')
xlabel('n'); ylabel('x1(n)');
subplot(2,1,2); stem(n2,x2); title('Sequence in Example 1b')
xlabel('n'); ylabel('x2(n)');
Sequence Operation
Example 1 plots:
Sequence in Example 1a
20

10

0
x1(n)

­10

­20

­30
­10 ­5 0 5 10 15
n

Sequence in Example 1b
40

30
x2(n)

20

10

0
­8 ­6 ­4 ­2 0 2 4 6 8 10 12
n
Sequence Operation
Example 2:
 Generate the complex-valued signal

x( n ) = e( −0.1+ j 0.3 )n , − 10 ≤ n ≤ 10

and plot its magnitude, phase, the real part, and the
imaginary part in four separate subplots
Sequence Operation
Example 2 coding:

% MATLAB code exmple2


n = [-10:1:10]; alpha = -0.1+0.3j;
x = exp(alpha*n);
subplot(2,2,1); stem(n,real(x));
title('real part');xlabel('n')
subplot(2,2,2); stem(n,imag(x));
title('imaginary part');xlabel('n')
subplot(2,2,3); stem(n,abs(x));
title('magnitude part');xlabel('n')
subplot(2,2,4); stem(n,(180/pi)*angle(x));
title('phase part');xlabel('n')
Sequence Operation
Example 2 plots:
real part imaginary part
2 1

1
0
0

­1
­1
­2

­3 ­2
­10 ­5 0 5 10 ­10 ­5 0 5 10
n n
magnitude part phase part
3 200

100
2
0

1
­100

0 ­200
­10 ­5 0 5 10 ­10 ­5 0 5 10
n n
Sequence Synthesis
Unit Sample Synthesis
x( n ) = ∑k 2= n x( k )δ( n − k )
n
1

 Arbitrary sequence x(n) can be synthesized as a


weighted sum of delayed and scaled unit sample
sequences

 if x Even and odd synthesis


e ( − n ) = xe ( n )  if xo ( −n ) = − xo ( n )
 
then xe ( n ) is called even( symmetric ) then xo ( n ) is called odd ( antisymmetric )

 Any arbitrary real-valued sequence x(n) can be


decomposed
x( n ) = x ( n ) + x into
( n ) its even and odd component
e o

xe ( n ) = 1 [ x( n ) + x( − n )], xo ( n ) = 1 [ x( n ) − x( − n )]
2 2
Sequence Synthesis
 Implement “evenodd” function

function [xe, xo, m] = evenodd(x,n)


% Real signal decomposition into even and odd parts
% ---------------------------------------------
% [xe, xo, m] = evenodd(x,n)
%
if any(imag(x) ~= 0)
error('x is not a real sequence')
end
m = -fliplr(n);
m1 = min([m,n]); m2 = max([m,n]); m = m1:m2;
nm = n(1)-m(1); n1 = 1:length(n);
x1 = zeros(1,length(m));
x1(n1+nm) = x; x = x1;
xe = 0.5*(x + fliplr(x));
xo = 0.5*(x - fliplr(x));
Sequence Synthesis
 Example 2: Even-Odd Components:

% MATLAB code example 2


n = [0:10]; x = stepseq(0,0,10)-stepseq(10,0,10);
[xe,xo,m] = evenodd(x,n);
subplot(1,1,1)
subplot(2,2,1); stem(n,x); title('Rectangular pulse')
xlabel('n'); ylabel('x(n)'); axis([-10,10,0,1.2])
subplot(2,2,2); stem(m,xe); title('Even Part')
xlabel('n'); ylabel('xe(n)'); axis([-10,10,0,1.2])
subplot(2,2,4); stem(m,xo); title('Odd Part')
xlabel('n'); ylabel('xo(n)'); axis([-10,10,-0.6,0.6])
Sequence Synthesis
 Example 2: The plots
Rectangular pulse Even Part

1 1
0.8 0.8

xe(n)
x(n)

0.6 0.6
0.4 0.4
0.2 0.2
0 0
­10 ­5 0 5 10 ­10 ­5 0 5 10
n n
Odd Part
0.6
0.4
0.2
xo(n)

0
­0.2
­0.4

­10 ­5 0 5 10
n
Sequence Synthesis
The Geometric Series
 A one-sided exponential sequence of the form

{ α n , n ≥ 0 }, α is arbitrary cons tan t


1
∑n =0 α n →

, for α < 1
1− α
1− αN
∑n=0 α → 1 − α , for ∀α
N −1 n
Sequence Synthesis
Correlation of sequences
 Measure of the degree to which two sequences are
similar Crosscorrelation
 If) x(n), y(n) is finite energy

 Then) crosscorrelation of x(n), y(n)

rx ,y ( l ) = ∑n = −∞ x( n ) y( n − l ), l : shift or log parameter


n =∞

 Autocorrelation
 Special case of crosscorrelation when y(n)=x(n)

rx ,x ( l ) = ∑n = −∞ x( n )x( n − l )
n =∞
Convolution
Convolution can be evaluated in many different
ways.
If arbitrary sequences are of infinite duration,
then MATLAB cannot be used directly to
compute the convolution.
As you already know, there are 3 conditions
(cases) for evaluation:
 No overlap
 Partially overlap

 Complete overlap

A built in function to compute convolution of 2


finite duration is called “conv”.
It assumes that the two sequences begin at n =
>> y = conv(x,h)
0:
Convolution
x(n) = [3,11,7,0,-1,4,2]
Example of a simple convolution:
h(n) = [2, 3,0,-5,2,1]

>>x = [3,11,7,0,-1,4,2];
>> h = [2,3,0,-5,2,1];
>> y = conv(x,h)
y =
6 31 47 6 -51 -5 41 18 -22 -3 8 2

>> n = [1:length(y)];
>> m = [1:length(x)]; o = [1:length(h)];
>> figure(1); clf
>> subplot(2,2,2); stem(m,x)
>>title('Sequence x(m)')
>>xlabel('m'); ylabel('x(m)');
>> subplot(2,2,3); stem(o,h)
>> title('Sequence y(o)')
>>xlabel('o'); ylabel('y(o)');
>> subplot(2,2,1); stem(n,y);
>> title('Convolved sequence')
>> xlabel('n'); ylabel('y(n)');
Convolution
Example of a simple convolution:
Convolved sequence Sequence x(m)
50 15

10
0

x(m)
y(n)

5
­50
0

­100 ­5
0 5 10 15 0 2 4 6 8
n m
Sequence y(o)
4

2
Is This Correct???
0
y(o)

­2

­4

­6
0 2 4 6
o
Convolution
Based on the plots, “conv” function neither
provides nor accepts any timing information.
We need the beginning and the end point of
y(n).
A simple extension of the “conv” function,
called “conv_m”, can be written to perform the
convolution of arbitrary support sequences:
function [y,ny] = conv_m(x,nx,h,nh)
% Modified convolution routine for signal processing
% -----------------------------------------------------
% [y,ny] = conv_m(x,nx,h,nh)
% [y,ny] = convolution result
% [x,nx] = first signal
% [h,nh] = second signal
%
nyb = nx(1)+nh(1); nye = nx(length(x)) + nh(length(h));
ny = [nyb:nye];
y = conv(x,h);
Convolution
Lets do the convolution again from the previous
example:
>> x = [3,11,7,0,-1,4,2]; nx = [-3:3];
>> h = [2,3,0,-5,2,1]; nh = [-1:4];
>> [y,ny] = conv_m(x,nx,h,nh)

y =
6 31 47 6 -51 -5 41 18 -22 -3 8 2

ny =
-4 -3 -2 -1 0 1 2 3 4 5 6 7

Hence we get the correct convolution:


Y(n) = {6,31,47,6,-51,-5,41,18,-22,-3,8,2}

More info? HELP convolution (conv)


Convolution
Lets plot y(n):
Convolved Signal y(n)
60

40

20
y(n)

­20

­40

­60
­4 ­2 0 2 4 6 8
ny
Correlations
There is a close resemblance in convolution and
correlation.
Crosscorrelation and autocorrelation can be
computed using the “conv” function if
sequences are of finite duration.
Example:
 In this example let
x(n) = [3,11,7, 0,-1,4,2]

be a prototype sequence, and let y(n) be its noise


corrupted and shifted version:
y(n) = x(n-2)+w(n)
where w(n) is Gaussian sequence with mean 0 and
variance 1.
Let’s compute the cross correlation between y(n)
Correlations
 From the construction of y(n), it follows that y(n) is
“similar” to x(n-2)
 Hence their strongest similarity is when l = 2.

 Compute the crosscorrelation using two different


noise sequences in Matlab.
Correlations
 Matlab commands:
% Noise sequence 1
x = [3,11,7,0,-1,4,2]; nx=[-3:3]; % given signal x(n)
[y,ny] = sigshift(x,nx,2); % Obtain x(n-2)
w = rand(1,length(y)); nw = ny; % generate w(n)
[y,ny] = sigadd(y,ny,w,nw); % obtain y(n) = x(n-2) + w(n)
[x,nx] = sigfold(x,nx); % obtain x(-n)
[rxy,nrxy] = conv_m(y,ny,x,nx); % 1st crosscorrelation
%
% noise sequence 2
x = [3,11,7,0,-1,4,2]; nx=[-3:3]; % given signal x(n)
[y,ny] = sigshift(x,nx,2); % Obtain x(n-2)
w = rand(1,length(y)); nw = ny; % generate w(n)
[y,ny] = sigadd(y,ny,w,nw); % obtain y(n) = x(n-2) + w(n)
[x,nx] = sigfold(x,nx); % obtain x(-n)
[rxy2,nrxy2] = conv_m(y,ny,x,nx); % 2nd crosscorrelation
%
figure(1); clf % clear figure(1)
subplot(1,1,1), subplot(2,1,1); stem(nrxy,rxy)
axis([-4,8,-50,250]); xlabel('lag variable 1')
ylabel('rxy');title('Crosscorrelation: noise sequence 1')
subplot(2,1,2); stem(nrxy2,rxy2)
axis([-4,8,-50,250]); xlabel('lag variable 1')
ylabel('rxy');title('Crosscorrelation: noise sequence 2')
Correlations
 The plots:
Crosscorrelation: noise sequence 1
250

200

150
rxy

100

50

­50
­4 ­2 0 2 4 6 8
lag variable 1
Crosscorrelation: noise sequence 2
250

200

150
rxy

100

50

­50
­4 ­2 0 2 4 6 8
lag variable 1
Correlations
 Based on the plots, the correlation is proven to peak
at l = 2.
 This implies that y(n) is similar to x(n) shifted by 2.

We can use the signal-processing toolbox in


matlab for crosscorrelation:
>> xcorr(x,y)
computes the crosscorrelation between vectors
x and y,
while,
>> xcorr(x)
computes the autocorrelation of vector x.

This function does not provide timing

You might also like