Componentes par e impar de x(n)
clc, clear all, close all
disp(‘Variable independiente -tiempo (nx = nxi:nxf) para la señal x(n)’);
nx=input(‘nxi:nxf : ‘);
sw=input(‘Para ingresar muestras de x(n), teclee 1, ecuación matemática de x(n), teclee 2: ‘);
if sw == 1,
disp(‘Ingrese las muestras de la señal x(n)’);
x=input(‘Utilizar corchetes [x(nxi) … x(nxf)]: ‘);
else
disp(‘Ingrese la expresión matemática de la señal x(n)’);
disp(‘Ejemplo: cos(0.3*pi*nx)’);
x=input(‘Señal x(n) : ‘);
end
xdn=sx(nx,x);
[xp,xi,npi]=parimp(xdn,nx);
subplot(3,1,1), stem(nx,xdn,‘LineWidth’,2),
axis([min(npi)-1,max(npi)+1,min(xdn)-2,max(xdn)+2]);
xlabel(‘n’); ylabel(‘x(n)’); title(‘Señal x(n)’);
ntick = [npi(1):npi(length(npi))];
set(gca,‘XtickMode’,‘manual’,‘XTick’,ntick,‘FontSize’,10)
subplot(3,1,2), stem(npi,xp,‘LineWidth’,2),
axis([min(npi)-1,max(npi)+1,min(xdn)-2,max(xdn)+2]);
xlabel(‘n’); ylabel(‘x(n)’); title(‘Componente par de la señal x(n)’);
ntick = [npi(1):npi(length(npi))];
set(gca,‘XtickMode’,‘manual’,‘XTick’,ntick,‘FontSize’,10)
subplot(3,1,3), stem(npi,xi,‘LineWidth’,2),
axis([min(npi)-1,max(npi)+1,min(xdn)-2,max(xdn)+2]);
xlabel(‘n’); ylabel(‘x(n)’); title(‘Componente impar de la señal x(n)’);
ntick = [npi(1):npi(length(npi))];
set(gca,‘XtickMode’,‘manual’,‘XTick’,ntick,‘FontSize’,10)
% Señal x(n) expresada con la función delta(n)
function y=sx(nx,x),
y=zeros(1,length(nx));
for k=1:length(x);
y = y + x(k)*delta(nx-nx(k));
end
end
function y=delta(n),
y = 1.*(n==0);
end
function [xp,xi,m]=parimp(xdn,nx)
[xc,nc] = sigfold(conj(xdn),nx);
[xp,m] = sigadd(0.5*xdn,nx,0.5*xc,nc);
[xi,m] = sigadd(0.5*xdn,nx,-0.5*xc,nc);
end
function [y,n] = sigfold(x,n)
% implements y(n) = x(-n) Fuente: J.G.Proakis
y = fliplr(x); n = -fliplr(n);
end
function [y,n] = sigadd(x1,n1,x2,n2)
% implements y(n) = x1(n)+x2(n) Fuente: J.G.Proakis
% —————————–
% [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; % initialization
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;
end
function y=escalon(n),
y=1.*(n>=0);
end
Nota. Cambiar la comilla simple por apóstrofe en la hoja de editor de Matlab.
Ejemplo 1. Calcular las componentes par e impar de .
Solución.
Se ingresan los siguientes datos:
Variable independiente -tiempo (nx = nxi:nxf) para la señal x(n)
nxi:nxf : -2:3
Para ingresar muestras de x(n), teclee 1, ecuación matemática de x(n), teclee 2: 1
Ingrese las muestras de la señal x(n)
Utilizar corchetes [x(nxi) … x(nxf)]: [-2.5 0.5 1 -1.5 0.5 2.5]