Even & Odd Discrete time Signals
32 views (last 30 days)
Show older comments
I am writing a program to seperate, plot even and odd parts of a discrete time signal. Following is my code:
I am getting error at line 3 & 4. "Array indices must be positive integers or logical values."
Since I am trying to flip and invert the signal x[n] , so 'x(-n)' is obvious to use but I am getting error. Kindly help.
n= -3:4;
x=[0 0 0 2 3 -1 2 -3];
xe= ( x(n)+x(-n) )/2;
xo= ( x(n)-x(-n) )/2;
subplot(311);stem(n,x);grid on; xlabel('n');ylabel('Amplitude');title('Original Signal');
subplot(312);stem(n,xe);grid on; xlabel('n');ylabel('Amplitude');title('Even Signal');
subplot(313);stem(n,xo);grid on; xlabel('n');ylabel('Amplitude');title('Odd Signal');
Answers (4)
Hafiz
on 9 Jun 2024
n= -3:4;
x=[0 0 0 2 3 -1 2 -3];
xe= ( x(n)+x(-n) )/2;
xo= ( x(n)-x(-n) )/2;
subplot(311);stem(n,x);grid on; xlabel('n');ylabel('Amplitude');title('Original Signal');
subplot(312);stem(n,xe);grid on; xlabel('n');ylabel('Amplitude');title('Even Signal');
subplot(313);stem(n,xo);grid on; xlabel('n');ylabel('Amplitude');title('Odd Signal');
0 Comments
Paul
on 9 Jun 2024
Matlab doesn't support zero or negtaive indices, so it won't be possible to implement this operation using ordinary vector indexing.
One approach is to define a fucntion that returns elements of the signal x[n] for values of n. One option is to use an anonymous function.
Though not stated expliclty, it appears that x[n] = 0 for n < 0 and x[n] = 0 for n > 4.
x = @(n) (n == 0)*2 + (n == 1)*3 + (n == 2)*-1 + (n == 3)*2 + (n == 4)*-3;
n = -5:5;
tiledlayout(3,1);
nexttile,stem(n,x(n)),title('x[n]')
xe = (x(n) + x(-n))/2;
nexttile,stem(n,xe);title('xe[n]')
xo = (x(n) - x(-n))/2;
nexttile,stem(n,xo);title('xo[n]')
all(x(n) == xe + xo)
0 Comments
Tannu
about 3 hours ago
Edited: Walter Roberson
18 minutes ago
clc;
clear all;
close all;
n = [-5,-4,-3,-2,-1,0,1,2,3,4,5];
x1 = [1,2,3,4,5,6,5,4,3,2,1];
x2 = [-5,-4,-3,-2,-1,0,1,2,3,4,5];
x3 = [3,1,4,2,6,5,7,0,2,1,4];
signals = {x1, x2, x3};
N = length(n);
mid = (N+1)/2;
for k = 1:3
x = signals{k};
Even_flag = 1;
Odd_flag = 1;
% Check Even and Odd separately
for i = 1:N
if x(i) ~= x(N-i+1)
Even_flag = 0;
break;
end
end
for i = 1:N
if x(i) ~= -x(N-i+1)
Odd_flag = 0;
break;
end
end
% For odd signal, middle value must be 0
if Odd_flag == 1
if x(mid) ~= 0
Odd_flag = 0;
end
end
% Display result
if Even_flag == 1
fprintf('Signal %d is Even\n', k);
elseif Odd_flag == 1
fprintf('Signal %d is Odd\n', k);
else
fprintf('Signal %d is Neither Even nor Odd\n', k);
end
end
```
0 Comments
See Also
Categories
Find more on Signal Processing Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!