Main Content

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.

ss2sos

Convertir parámetros de espacio de estado de filtro digital en secciones de segundo orden

Sintaxis

[sos,g] = ss2sos(A,B,C,D)
[sos,g] = ss2sos(A,B,C,D,iu)
[sos,g] = ss2sos(A,B,C,D,'order')
[sos,g] = ss2sos(A,B,C,D,iu,'order')
[sos,g] = ss2sos(A,B,C,D,iu,'order','scale')
sos = ss2sos(...)

Descripción

convierte una representación de espacio de estado de un filtro digital determinado en una representación de sección de segundo orden equivalente.ss2sos

[sos,g] = ss2sos(A,B,C,D) encuentra una matriz en forma de sección de segundo orden con ganancia que es equivalente al sistema de espacio de estado representado por argumentos de entrada , , , y .sosgABCD

Nota

El sistema de espacio de estado de entrada debe ser de salida única y real.

es una matriz -by-6sosL

sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

cuyas filas contienen los coeficientes numerador y denominador Bik Y Unik de las secciones de segundo orden de ( ).Hz

H(z)=gk=1LHk(z)=gk=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2

[sos,g] = ss2sos(A,B,C,D,iu) especifica un escalar que determina qué entrada del sistema de espacio de estado , , , se utiliza en la conversión.iuABCD El valor predeterminado es 1.iu

[sos,g] = ss2sos(A,B,C,D,'order') Y

[sos,g] = ss2sos(A,B,C,D,iu,'order') especificar el orden de las filas en , dondesos 'order' Es

  • , para ordenar las secciones de modo que la primera fila de contenga los polos más cercanos al círculo de la unidad'down'sos

  • , para ordenar las secciones de modo que la primera fila de contenga los polos más alejados del círculo de la unidad (predeterminado)'up'sos

Los ceros siempre se emparejan con los polos más cercanos a ellos.

[sos,g] = ss2sos(A,B,C,D,iu,'order','scale') especifica la escala deseada de la ganancia y los coeficientes del numerador de todas las secciones de segundo orden, donde 'scale' Es

  • , para no aplicar ninguna escala (predeterminado)'none'

  • , para aplicar el escalado de normas infinitas'inf'

  • , para aplicar el escalado de 2 normas'two'

El uso del escalado de normas infinitas junto con el orden minimiza la probabilidad de desbordamiento en la realización.up El uso de escalado de 2 normas junto con el pedido minimiza el ruido de redondeo máximo.down

Nota

El escalado de normas infinitas y 2 normas solo es adecuado para implementaciones de forma directa II.

sos = ss2sos(...) incrusta la ganancia general del sistema, , en la primera sección,gH1( ), de modo quez

H(z)=k=1LHk(z)

Nota

No se recomienda incrustar la ganancia en la primera sección al escalar una estructura de forma directa II y puede dar lugar a una escala errática. Para evitar incrustar la ganancia, utilice con dos salidas.ss2sos

Ejemplos

contraer todo

Diseñe un filtro de paso bajo Butterworth de 5o orden utilizando la función.butter Especifique una frecuencia de corte de

<math display="block">
<mrow>
<mn>0</mn>
<mo>.</mo>
<mn>2</mn>
<mi>π</mi>
</mrow>
</math>
rad/muestra. Exprese la salida en forma de espacio de estado. Convierta el resultado del espacio de estado en secciones de segundo orden. Visualice la respuesta de frecuencia del filtro.

[A,B,C,D] = butter(5,0.2); sos = ss2sos(A,B,C,D)
sos = 3×6

    0.0013    0.0013         0    1.0000   -0.5095         0
    1.0000    2.0009    1.0009    1.0000   -1.0966    0.3554
    1.0000    1.9976    0.9976    1.0000   -1.3693    0.6926

freqz(sos)

Un sistema oscilante unidimensional de tiempo discreto consiste en una masa unitaria,

<math display="block">
<mrow>
<mi>m</mi>
</mrow>
</math>
, unido a una pared mediante un muelle de constante elástica de unidad. Un sensor mide la aceleración,
<math display="block">
<mrow>
<mi>a</mi>
</mrow>
</math>
, de la masa.

El sistema se muestrea en

<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
<mo>=</mo>
<mn>5</mn>
</mrow>
</math>
Hz. Generar 50 muestras de tiempo. Definir el intervalo de muestreo
<math display="block">
<mrow>
<mi>Δ</mi>
<mi>t</mi>
<mo>=</mo>
<mn>1</mn>
<mo>/</mo>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
</mrow>
</math>
.

Fs = 5; dt = 1/Fs; N = 50; t = dt*(0:N-1);

El oscilador puede ser descrito por las ecuaciones de estado-espacio

<math display="block">
<mrow>
<mtable>
<mtr>
<mtd>
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>A</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>B</mi>
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>,</mo>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mi>y</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mi>C</mi>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>D</mi>
<mi>u</mi>
<mo stretchy="false">(</mo>
<mi>k</mi>
<mo stretchy="false">)</mo>
<mo>,</mo>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

Dónde

<math display="block">
<mrow>
<mi>x</mi>
<mo>=</mo>
<msup>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mi>r</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi>v</mi>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
</mrow>
</math>
es el vector de estado,
<math display="block">
<mrow>
<mi>r</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mi>v</mi>
</mrow>
</math>
son respectivamente la posición y la velocidad de la masa, y las matrices

<math display="block">
<mrow>
<mi>A</mi>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mi mathvariant="normal">cos</mi>
<mi>Δ</mi>
<mi>t</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi mathvariant="normal">sin</mi>
<mi>Δ</mi>
<mi>t</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mi mathvariant="normal">sin</mi>
<mi>Δ</mi>
<mi>t</mi>
</mrow>
</mtd>
<mtd>
<mrow>
<mi mathvariant="normal">cos</mi>
<mi>Δ</mi>
<mi>t</mi>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mspace width="1em"></mspace>
<mi>B</mi>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
<mo>-</mo>
<mi mathvariant="normal">cos</mi>
<mi>Δ</mi>
<mi>t</mi>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mi mathvariant="normal">sin</mi>
<mi>Δ</mi>
<mi>t</mi>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mspace width="1em"></mspace>
<mi>C</mi>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>0</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
<mo>,</mo>
<mspace width="1em"></mspace>
<mi>D</mi>
<mo>=</mo>
<mrow>
<mo>(</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>)</mo>
</mrow>
<mo>.</mo>
</mrow>
</math>

A = [cos(dt) sin(dt);-sin(dt) cos(dt)]; B = [1-cos(dt);sin(dt)]; C = [-1 0]; D = 1;

El sistema se excita con un impulso unitario en la dirección positiva. Utilice el modelo de espacio de estado para calcular la evolución temporal del sistema a partir de un estado inicial de cero.

u = [1 zeros(1,N-1)];  x = [0;0]; for k = 1:N     y(k) = C*x + D*u(k);     x = A*x + B*u(k); end

Trazar la aceleración de la masa en función del tiempo.

stem(t,y,'filled')

Calcular la aceleración dependiente del tiempo mediante la función de transferencia para filtrar la entrada. Exprese la función de transferencia como secciones de segundo orden. Trazar el resultado.

sos = ss2sos(A,B,C,D); yt = sosfilt(sos,u); stem(t,yt,'filled')

El resultado es el mismo en ambos casos.

Algoritmos

utiliza un algoritmo de cuatro pasos para determinar la representación de sección de segundo orden para un sistema de espacio de estado de entrada:ss2sos

  1. Encuentra los polos y ceros del sistema dados por , , , y .ABCD

  2. Utiliza la función , que primero agrupa los ceros y los polos en pares conjugados complejos utilizando la función. a continuación, forma las secciones de segundo orden haciendo coincidir los pares de polos y cero de acuerdo con las siguientes reglas:zp2soscplxpairzp2sos

    1. Coincide con los polos más cercanos al círculo de la unidad con los ceros más cercanos a esos polos.

    2. Coincide con los polos más cercanos al círculo de la unidad con los ceros más cercanos a esos polos.

    3. Continúe hasta que todos los polos y ceros coincidan.

    agrupa los polos reales en secciones con los polos reales más cercanos a ellos en valor absoluto.ss2sos La misma regla se mantiene para ceros reales.

  3. Ordena las secciones de acuerdo con la proximidad de los pares de polos al círculo de la unidad. normalmente ordena las secciones con polos más cercanos al círculo de la unidad último en la cascada.ss2sos Puede indicar que se ordenen las secciones en el orden inverso especificando la marca.ss2sos'down'

  4. escala las secciones según la norma especificada en elss2sos'scaleArgumento.' En el caso de los valores arbitrarios (H

    Hp=[12π02π|H(ω)|pdω]1/p

    donde puede ser ya sea o 2.p Consulte las referencias para obtener más información. Esta escala es un intento de minimizar el desbordamiento o el ruido de redondeo máximo en implementaciones de filtro de punto fijo.

Referencias

[1] Jackson, L. B. Digital Filters and Signal Processing. 3rd Ed. Boston: Kluwer Academic Publishers, 1996, chap. 11.

[2] Mitra, S. K. Digital Signal Processing: A Computer-Based Approach. New York: McGraw-Hill, 1998, chap. 9.

[3] Vaidyanathan, P. P. “Robust Digital Filter Structures.” Handbook for Digital Signal Processing (S. K. Mitra and J. F. Kaiser, eds.). New York: John Wiley & Sons, 1993, chap. 7.

Consulte también

| | | | |

Introducido antes de R2006a