Hola a todos, y en espcial a Antonio y a Pumy. Bueno, a continuación pongo el fragmento de código donde uso las funciones real e imag..."resiuos" es un vector de números complejos. Para calcular ciertos coeficientes: B0,B1,A1,A2 necesitos las partes reales e imaginarias de esos números complejos guardados en "residuos". Es todo bien simple, no comprendo la razón de este contratiempo. El error lo da cuando llega a la línea:
B0=2*Tm*real(residuos(i))...espero noticias. Ah, por si acaso, pongo también el código completo de mi programa. Para darles una idea, este programa es para diseñar filtros digitales(para el procesamiento de digital de señales)usando la Aproximación de Chebyshev y el Método de la Respuesta Invariante al Impulso, si alguien conoce de esto entenderá, y si no pues no interesa, se puede entender todo sin conocer nada de procesamiento digital de señales. Saludos a todos:
FRAGMENTO:
for i=1:fix(N/2)
disp(i)
B0=2*Tm*real(residuos(i))
B1=-2*Tm*exp(real(polos(i))*Tm)*(real(residuos(i))...
*cos(imag(polos(i))*Tm)+imag(residuos(i))*sin(imag(polos(i))*Tm))
A1=-2*exp(real(polos(i))*Tm)*cos(imag(polos(i))*Tm)
A2=exp(2*real(polos(i))*Tm)
end
CODIGO COMPLETO:
function chebinvar(wc,wa,Ap,Aa,fm)
% fac: frecuencia analógica de corte(rad/s).
% faa: frecuencia analógica de atenuación(rad/s).
% faax: frecuencia analógica de atenuación normalizada.
% wc: fecuencia digital de corte(rad).
% wa: frecuencia digital de atenuación(rad).
% Ap: atenuacion en la banda de paso(dB).
% Aa: atenuación en la banda de atenuación(dB).
% fm: fecuencia de muestreo(Hz).
Tm=1/fm;
fac=wc/Tm;
faa=wa/Tm;
faax=faa/fac;
epsilon=sqrt(10^(-Ap/-10)-1);
Cn=sqrt((10^(-Aa/-10)-1)/epsilon^2);
n=acosh(Cn)/acosh(faax);
N=ceil(n); %Primer entero mayor.
%Calculando los polos de la función de sistema en Sx.
a=(1/N)*asinh(1/epsilon);
for i=N:2*N-1
real=sinh(a)*sin((2*i+1)*pi/(2*N));
imag=cosh(a)*cos((2*i+1)*pi/(2*N));
polosx(i-(N-1))=complex(real,imag);
end
polos=polosx*fac; %Desnormalizando los polos del plano Sx.
%Calculando las constantes Kx(residuos) de las fracciones simples.
%Nota: Los polos se multiplican por -1 porque los términos del denominador
%en la función de sistema son de la forma: (Sx-polosx).
coefden=[1 -1*polosx(1)];
for i=1:N-1
coefden=conv(coefden,[1 -1*polosx(i+1)]);
end
residuosx=residue(1,coefden);
residuosx=circshift(residuosx,[-1 1]); %Dando a los residuos el mismo orden de los polos.
residuos=residuosx*fac; %Desnormalizando los residuos del plano Sx.
% Calculando los coeficientes del filtro digital.
if rem(N,2)~=0
disp('Función de primer orden:')
B0=Tm*residuos(ceil(N/2))
A1=-1*exp(polos(ceil(N/2))*Tm)
disp('Funciones de segundo orden:')
for i=1:fix(N/2)
disp(i)
B0=2*Tm*real(residuos(i))
B1=-2*Tm*exp(real(polos(i))*Tm)*(real(residuos(i))...
*cos(imag(polos(i))*Tm)+imag(residuos(i))*sin(imag(polos(i))*Tm))
A1=-2*exp(real(polos(i))*Tm)*cos(imag(polos(i))*Tm)
A2=exp(2*real(polos(i))*Tm)
end
else
disp('Funciones de segundo orden:')
for i=1:fix(N/2)
disp(i)
B0=2*Tm*real(residuos(i))
B1=-2*Tm*exp(real(polos(i))*Tm)*(real(residuos(i))...
*cos(imag(polos(i))*Tm)+imag(residuos(i))*sin(imag(polos(i))*Tm))
A1=-2*exp(real(polos(i))*Tm)*cos(imag(polos(i))*Tm)
A2=exp(2*real(polos(i))*Tm)
end
end