Math ClubMath Club
v1 · padrão canônico

Transformada Z e Sistemas Discretos

Transformada Z bilateral e unilateral, região de convergência, inversão por frações parciais e resíduos, equações de diferenças, estabilidade no plano-z e projeto de filtros digitais.

Used in: engenharia

Choose your door

Real scenarios with market data and step-by-step calculations

Implementação de Filtros Digitais

Filtro de Média Móvel (FIR Simples)

y[n]=1Mk=0M1x[nk]y[n] = \frac{1}{M}\sum_{k=0}^{M-1} x[n-k]

Função de transferência: H(z)=1M(1+z1++z(M1))=1M1zM1z1H(z) = \frac{1}{M}(1 + z^{-1} + \cdots + z^{-(M-1)}) = \frac{1}{M}\frac{1 - z^{-M}}{1 - z^{-1}}.

Zeros: em z=e2πik/Mz = e^{2\pi i k/M} para k=1,,M1k = 1,\ldots,M-1 (raízes da unidade diferentes de 1).

Código Python — Análise de Filtros

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

# Filtro Butterworth IIR de 4ª ordem, passa-baixas, corte em 0.3π
N = 4
Wn = 0.3  # freq. normalizada (0 a 1, onde 1 = π rad/amostra)
b, a = signal.butter(N, Wn, btype='low')

# Zeros e polos
z, p, k = signal.tf2zpk(b, a)
print("Zeros:", np.round(z, 4))
print("Polos:", np.round(p, 4))
print("Todos polos dentro do círculo unit.?", all(np.abs(p) < 1))

# Resposta em frequência
w, H = signal.freqz(b, a, worN=1024)
freq = w / np.pi  # normalizada [0, 1]

# Verificar Parseval
h = signal.impulse2(signal.dlti(b, a))[1]
energia_tempo = np.sum(np.abs(h)**2)
energia_freq  = np.trapz(np.abs(H)**2, w) / (2*np.pi)
print(f"Parseval check — tempo: {energia_tempo:.4f}, freq: {energia_freq:.4f}")

Equação de Diferença — Implementação Recursiva

def iir_filter(b, a, x):
    """Implementar filtro IIR diretamente pela equação de diferenças."""
    M, N = len(b), len(a)
    y = np.zeros(len(x))
    for n in range(len(x)):
        y[n] = sum(b[k]*x[n-k] for k in range(min(M, n+1)))
        y[n] -= sum(a[k]*y[n-k] for k in range(1, min(N, n+1)))
        y[n] /= a[0]
    return y

# Testar vs scipy.signal.lfilter
x = np.random.randn(100)
y_manual = iir_filter(b, a, x)
y_scipy  = signal.lfilter(b, a, x)
print(f"Erro máximo: {np.max(np.abs(y_manual - y_scipy)):.2e}")

Referência: Oppenheim & Schafer, Discrete-Time Signal Processing, 3ª ed., §§5–7; Oppenheim & Willsky, §§10–11.

To continue

Referências Bibliográficas

  • Oppenheim, A.V.; Willsky, A.S. Signals and Systems, 2ª ed. Prentice Hall, 1997. Caps. 10–11 (transformada Z, sistemas discretos). Referência principal.
  • Oppenheim, A.V.; Schafer, R.W. Discrete-Time Signal Processing, 3ª ed. Prentice Hall, 2009. Caps. 2–7 (DTFT, Z, filtros FIR/IIR). Referência completa de DSP.
  • Ogata, K. Discrete-Time Control Systems, 2ª ed. Prentice Hall, 1995. Caps. 2–5 (transformada Z, projeto de controladores discretos, critério de Jury).
  • Proakis, J.G.; Manolakis, D.G. Digital Signal Processing, 4ª ed. Prentice Hall, 2007. Caps. 3–5 (Z, filtros digitais, estruturas).
  • Kreyszig, E. Advanced Engineering Mathematics, 10ª ed. Wiley, 2011. §21 (transformada Z e sistemas discretos).

Updated on 2026-05-28 · Author(s): Clube da Matemática

Found an error? Open an issue on GitHub or submit a PR — open source forever.