Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

invfreqs

Identificar parámetros de filtro de tiempo continuo a partir de datos de respuesta de frecuencia

Sintaxis

[b,a] = invfreqs(h,w,n,m)
[b,a] = invfreqs(h,w,n,m,wt)
[b,a] = invfreqs(h,w,n,m,wt,iter)
[b,a] = invfreqs(h,w,n,m,wt,iter,tol)
[b,a] = invfreqs(h,w,n,m,wt,iter,tol,'trace')
[b,a] = invfreqs(h,w,'complex',n,m,...)

Descripción

es elinvfreqs operación inversa de .freqs Encuentra una función de transferencia de tiempo continuo que corresponde a una respuesta de frecuencia compleja determinada. Desde el punto de vista del análisis de laboratorio, es útil para convertir datos de magnitud y fase en funciones de transferencia.invfreqs

[b,a] = invfreqs(h,w,n,m) devuelve el numerador real y los vectores de coeficiente denominador y de la función de transferenciaba

H(s)=B(s)A(s)=b(1)sn+b(2)sn1++b(n+1)a(1)sm+a(2)sm1++a(m+1)

cuya respuesta de frecuencia compleja se da en vector en los puntos de frecuencia especificados en vector .hw Escalares y especificar las órdenes deseadas de los polinomios numeradores y denominadores.nm

La longitud de debe ser la misma que la longitud de . para asegurar la simetría de dominio de frecuencia adecuada para un filtro real.hwinvfreqsconj(h)-w

[b,a] = invfreqs(h,w,n,m,wt) pondera los errores de ajuste frente a la frecuencia, donde hay un vector de factores de ponderación de la misma longitud que .wtw

[b,a] = invfreqs(h,w,n,m,wt,iter) Y

[b,a] = invfreqs(h,w,n,m,wt,iter,tol) proporcionar un algoritmo superior que garantiza la estabilidad del sistema lineal resultante y busca el mejor ajuste utilizando un esquema numérico e iterativo. El parámetro indica que finaliza la iteración cuando la solución ha convergido o después de iteraciones, lo que ocurra primero. Define la convergencia como que ocurre cuando la norma del vector de degradado (modificado) es menor que , donde es un parámetro opcional que tiene como valor predeterminado 0.01.iterinvfreqsiterinvfreqstoltol Para obtener un vector de peso de todos los, utilice

invfreqs(h,w,n,m,[],iter,tol) 

[b,a] = invfreqs(h,w,n,m,wt,iter,tol,'trace') muestra un informe de progreso textual de la iteración.

[b,a] = invfreqs(h,w,'complex',n,m,...) crea un filtro complejo. En este caso no se aplica ninguna simetría y la frecuencia se especifica en radianes entre y .–ππ

Ejemplos

contraer todo

Convierta una función de transferencia simple en datos de respuesta de frecuencia y, a continuación, de nuevo a los coeficientes de filtro originales.

a = [1 2 3 2 1 4]; b = [1 2 3 2 3];  [h,w] = freqs(b,a,64); [bb,aa] = invfreqs(h,w,4,5)
bb = 1×5

    1.0000    2.0000    3.0000    2.0000    3.0000

aa = 1×6

    1.0000    2.0000    3.0000    2.0000    1.0000    4.0000

y son equivalentes a y , respectivamente.bbaaba Sin embargo, el sistema es inestable porque tiene polos con parte real positiva.aa Ver los polos de y .bbaa

zplane(bb,aa)

Utilice el algoritmo iterativo de encontrar una aproximación estable al sistema.invfreqs

[bbb,aaa] = invfreqs(h,w,4,5,[],30)
bbb = 1×5

    0.6816    2.1015    2.6694    0.9113   -0.1218

aaa = 1×6

    1.0000    3.4676    7.4060    6.2102    2.5413    0.0001

Compruebe que el sistema es estable trazando los nuevos polos.

zplane(bbb,aaa)

Genere dos vectores y, que simulan datos de magnitud y fase recopilados en un laboratorio.magphase También generar un vector, , de frecuencias.w

rng('default')  fs = 1000; t = 0:1/fs:2; mag = periodogram(sin(2*pi*100*t)+randn(size(t))/10,[],[],fs); phase = randn(size(mag))/10; w = linspace(0,fs/2,length(mag))';

Se utiliza para convertir los datos en una función de transferencia de tiempo continuo.invfreqs Trazar el resultado.

[b,a] = invfreqs(mag.*exp(1j*phase),w,2,2,[],4);  freqs(b,a)

Sugerencias

Al construir modelos de orden superior utilizando frecuencias altas, es importante escalar las frecuencias, dividiendo por un factor como la mitad de la frecuencia más alta presente en, con el fin de obtener valores bien acondicionados de y .wab Esto corresponde a un reescalado de tiempo.

Algoritmos

De forma predeterminada, utiliza un método de error de ecuación para identificar el mejor modelo a partir de los datos.invfreqs Esto encuentra y enba

minb,ak=1nwt(k)|h(k)A(w(k))B(w(k))|2

creando un sistema de ecuaciones lineales y resolviéndolas con el operador.MATLAB®\ Aquí ( ( )) y ( ( )) están las transformaciones de Fourier de los polinomios y , respectivamente, en la frecuencia ( ), y es el número de puntos de frecuencia (la longitud de y ).AwkBwkabwknhw Este algoritmo se basa en Levi .[1] Varias variantes se han sugerido en la literatura, donde la función de ponderación da menos atención a las altas frecuencias.wt

El algoritmo superior ("output-error") utiliza el Gauss-Newton para la búsqueda iterativa, con la salida del primer algoritmo como estimación inicial.[2] Esto resuelve el problema directo de minimizar la suma ponderada del error al cuadrado entre los puntos de respuesta de frecuencia reales y deseados.

minb,ak=1nwt(k)|h(k)B(w(k))A(w(k))|2

Referencias

[1] Levi, E. C. “Complex-Curve Fitting.” IRE Trans. on Automatic Control. Vol. AC-4, 1959, pp. 37–44.

[2] Dennis, J. E., Jr., and R. B. Schnabel. Numerical Methods for Unconstrained Optimization and Nonlinear Equations.Englewood Cliffs, NJ: Prentice-Hall, 1983.

Consulte también

| | |

Introducido antes de R2006a