Discretización mediante ZOH, FOH y la transformación bilineal de Tustis

0

Soy muy nuevo en este foro, así que discúlpeme si no escribo las ecuaciones correctamente. Y también soy bastante nuevo en DSP, así que esto puede ser muy básico para la mayoría de ustedes, pero es bastante complicado para mí.

Necesito discretizar un filtro PT1:

\ $ T \ frac {dy (t)} {dt} + y (t) = u (t) \ $

Necesito discriminar esto utilizando la transformación bilineal de ZOH, FOH y Tustins. Necesito aplicar este filtro a mi señal, usando un bucle for (sí, tengo Fc, Wn). Sé que esto se puede hacer fácilmente en Matlab. pero quiero entender cómo se hace a mano. No pude entender nada de google.

Cualquier pista me ayudaría.

Edit1 @JonRB: Matlab Script:

% define a continuous-time first order low-pass filter in state-space
% notation. differential equation of the filter:
%  T * y'(t) + y(t) = u(t)
% -> State-space notation:
%  x'(t) = -1/T * x + 1/T * u
  % -3dB cutoff frequency: 100 Hz => omega_c = 2 * pi * 100 rad/s
% => T = 1 / omega_c
f_c = 10;
T = 1 / 2 / pi / f_c;
filt_cont = ss(-1/T, 1/T, 1, 0);
enter code here
% sampling period
Ts= 
% discretization of the filter 
filt_discr_zoh = c2d(filt_cont, Ts, 'zoh');
filt_discr_foh = c2d(filt_cont, Ts, 'foh');
filt_discr_tustin = c2d(filt_cont, Ts, 'tustin');
    
pregunta EpicUser

1 respuesta

1

Se requieren un par de pasos para realizar un filtro digital

Considerando transformación bilineal

Esto facilitará tomar una ecuación de dominio de tiempo continuo & convirtiéndolo en una ecuación de dominio de tiempo discreta apropiada.

Copiar en EE.SE solo para completar

\ $ H (s) = \ frac {1} {1+ RCs} \ $

se puede realizar una transformación de dominio s a dominio z sustituyendo los términos s por el dominio z equivalente

\ $ s \ leftarrow \ frac {2} {\ Delta_T} \ frac {1-z ^ {- 1}} {1 + z ^ {- 1}} \ $

\ $ H (z) = \ frac {1 + z ^ {- 1}} {(1+ \ frac {2RC} {\ Delta_T}) + (1- \ frac {2RC} {\ Delta_T}) z ^ {- 1}} \ $

Con la ecuación de dominio de tiempo discreto, la ecuación de diferencia se puede realizar a través de refactorización para encontrar la relación de recurrencia

\ $ y_n = y_ {n-1} + \ alpha (x_n - y_ {n-1}) \ $

donde \ $ \ alpha = \ frac {\ Delta_T} {\ Delta_T + \ tau} \ $ y \ $ \ tau = RC \ $ la constante de tiempo.

\ $ y_n \ $ representa la salida actual

\ $ y_ {n-1} \ $ representa la última salida

\ $ x_n \ $ representa la entrada actual

Si ahora observa la ecuación (ligeramente reordenada) en la pregunta

\ $ u (t) = y (t) + T \ frac {dy (t)} {dt} \ $

w.r.t. la ecuación de la diferencia:

\ $ y_n = y_ {n-1} + \ alpha (x_n - y_ {n-1}) \ $

Se puede ver que hay una correlación. \ $ \ Frac {dy (t)} {dt} \ $ está representado por NEW - OLD y un factor de escala que tiene unidades de \ $ s ^ {- 1} \ $: dy / dt

Realización en Matlab: Simulink

Mirando la ecuación en diferencias: \ $ y_n = y_ {n-1} + \ alpha (x_n - y_ {n-1}) \ $

hay una necesidad de

  1. adición
  2. multiplicación
  3. diferencia
  4. ganancia

Esto está usando un generador de pecado de 10 kHz, un tiempo de muestra de 1us y un \ $ \ alpha \ $ de 0.059117397, que es un \ $ \ tau \ $ de 1.59155e-5, el equivalente de 10 kHz

    
respondido por el JonRB

Lea otras preguntas en las etiquetas