5. Transmissão em Banda Base e Critério de Nyquist
5. Transmissão em Banda Base e Critério de Nyquist
Apostila de Comunicações — Transmissão em Banda Base e Critério de Nyquist
Tópicos: PAM · ISI · pulso sinc · critério de Nyquist I · raised cosine · root-raised cosine · filtro casado · eye diagram · códigos de linha
5.1 Antes de começar
Ao final, você deve explicar a origem da ISI, aplicar o primeiro critério de Nyquist e distinguir RC, RRC e filtro casado. Diagnóstico: zeros do pulso nos múltiplos de $T_s$ bastam quando há erro de timing? Evidência mínima: gerar um diagrama de olho e relacionar abertura vertical, abertura horizontal, ruído e jitter.
5.2 Representação do Sinal Digital em Banda Base
5.2.1 Pulsos e Símbolos
Uma sequência discreta de símbolos $\{a_k\}_{k\in\mathbb{Z}}$, onde $a_k \in \mathcal{A}$ é um alfabeto finito (por exemplo $\mathcal{A} = \{\pm 1, \pm 3\}$ para 4-PAM), é modulada em um pulso $p(t)$ de energia finita:
5.2.2 Representação Vetorial
A transmissão em banda base pode ser vista como um mapeamento de vetores discretos $\mathbf{a} = (a_k)_k \mapsto s(t) \in L^2(\mathbb{R})$. A norma $\|p\|^2 = \int_{-\infty}^{\infty} |p(t)|^2 dt = E_p$ é a energia do pulso. A potência média do sinal é:
Para sequência estacionária com média zero e auto-correlação $R_{aa}[m] = \mathbb{E}[a_k a_{k-m}]$:
A média temporal sobre uma fase completa de símbolo é necessária porque a forma de onda PAM aleatória é, em geral, cicloestacionária.
5.2.3 M-PAM e Constelações
A constelação M-PAM centrada na origem pode ser escrita, para $M$ par ou ímpar, como
Os pontos adjacentes estão separados por $d_{\min}=2A$. Como
temos $E_s=A^2(M^2-1)/3$. Para $E_s=1$,
5.3 Espectro de Sequências PAM Aleatórias
5.3.1 Espectro de Sequência Periódica
Se $a_k$ é periódica com período $N$, então $s(t)$ é quase-periódica com período $NT_s$. Expandindo $a_k$ em série de Fourier discreta:
onde $c_n = \frac{1}{N}\sum_{k=0}^{N-1} a_k\, e^{-j2\pi nk/N}$. Substituindo em (1.1):
O espectro é discreto:
Os coeficientes $c_n$ são periódicos em $n$ com período $N$; por isso aparece $c_{k\bmod N}$, e não um coeficiente com índice fracionário.
Para sequência periódica com média $\bar{a}$, o termo DC é:
5.3.2 Densidade Espectral de Potência — Sequência Aleatória
Defina $C_{aa}[m]=\mathbb E[(a_k-\mu_a)(a_{k-m}-\mu_a)]$ e sua DTFT
Então
Leitura passo a passo: a sequência centrada determina $S_a$; o formatador de pulso multiplica essa densidade por $|P(f)|^2$; transmitir um símbolo a cada $T_s$ introduz o fator $1/T_s$. A média não nula é uma sequência determinística constante e gera linhas em múltiplos de $1/T_s$. Para símbolos i.i.d., $C_{aa}[m]=\sigma_a^2\delta[m]$, portanto $S_a=\sigma_a^2$ e recupera-se (2.3). Não se deve somar $\sigma_a^2$ novamente à série de covariância, pois $C_{aa}[0]$ já é a variância.
5.3.3 PSD para Símbolos Não-Correlacionados
Quando $a_k$ são não-correlacionados com variância $\sigma_a^2$:
A banda principal (primeiro zero) ocorre em $f = 1/T_s = R_s$. A energia está concentrada em torno de $R_s/2$, mas o espectro é infinito.
5.4 Definição e Modelagem de ISI
5.4.1 Canais com Dispersão e ISI
Quando o sinal atravessa um canal com resposta impulso $h_c(t)$, o pulso recebido é $g(t) = (p * h_c)(t)$. Em receptores reais, há um filtro adicional $h_r(t)$:
onde $g(t) = (p * h_c * h_r)(t)$ e $n(t)$ é o ruído aditivo.
Amostrando em $t = nT_s$:
5.4.2 Condição de Ausência de ISI
Para eliminar ISI, exigimos:
Com essa condição, $y[n] = a_n + n[n]$, e a decisão é direta.
5.4.3 Exemplo Numérico de ISI
Para $n = 0$: $y[0] = a_0\operatorname{sinc}(0) + a_1\operatorname{sinc}(-1) = 1 + 0 = 1$. ✓
Para $n = 1$: $y[1] = a_0\operatorname{sinc}(1) + a_1\operatorname{sinc}(0) = 0 + 1 = 1$. ✓
Para $n = 2$: $y[2] = a_0\operatorname{sinc}(2) + a_1\operatorname{sinc}(1) = 0$. ✓
O pulso sinc satisfaz perfeitamente a condição de Nyquist.
5.5 Critério de Nyquist para Ausência de ISI
5.5.1 Enunciado do Primeiro Critério de Nyquist
Se $g(0)=A$ em outra normalização, o lado direito passa a ser $A$.
5.5.2 Prova no Domínio da Frequência
Se $g(nT_s)=\delta[n]$, então $g_s(t)=\delta(t)$ e sua transformada é 1. Multiplicação no tempo corresponde a convolução na frequência:
Igualando $G_s(f)=1$, obtemos (4.1). O argumento é reversível. Observe que $\sum_kg(t-kT_s)=\text{constante}$ é uma propriedade de partição da unidade e não é, em geral, equivalente a amostras sem ISI. $\blacksquare$
5.5.3 Interpretação Geométrica
A condição (4.1) pode ser interpretada geometricamente: se "enrolarmos" o espectro $G(f)$ ao longo de um período $1/T_s$, o resultado deve ser a constante 1. Isso implica que qualquer excesso espectral em uma região deve ser compensado por déficit em outra, de modo que a soma seja uniforme.
5.5.4 Limite de taxa para canal passa-baixas ideal
Ou seja, a largura de banda de Nyquist é $B_N = R_s/2$.
Da condição (4.1), as réplicas de $G(f)$ são deslocadas por $1/T_s$. Se $G(f)=0$ para $|f|>B$, é preciso que essas réplicas cubram o eixo sem lacunas. A menor banda ocorre quando $G(f)$ ocupa exatamente $[-1/(2T_s),1/(2T_s)]$, logo $B=1/(2T_s)=R_s/2$.
Respostas com suporte maior que $R_s/2$ podem satisfazer Nyquist quando as regiões de sobreposição são complementares; banda maior, isoladamente, não garante a condição. $\blacksquare$
5.5.5 Condição de Simetria Hilbert
Esta é a condição de "complementar simetria" ou "Hilbert-symmetry" em relação à frequência de Nyquist $f_N = 1/(2T_s)$.
5.6 Pulso Sinc — Banda Mínima
5.6.1 Pulso de Banda Mínima
O pulso que alcança a taxa máxima de Nyquist com a menor largura de banda possível é o pulso sinc:
Seu espectro é o retânguo:
5.6.2 Verificação da Condição de Nyquist
Para $p(t) = \operatorname{sinc}(t/T_s)$, temos $p(nT_s) = \delta[n]$, logo a condição (3.2) é satisfeita.
No domínio da frequência, as réplicas de $P(f)$ deslocadas por $1/T_s$ são retânguos de largura $1/(2T_s)$ centrados em $\ell/T_s$. Como cada retânguo ocupa metade do intervalo entre réplicas adjacentes, a soma é exatamente 1 (pela complementar simetria (4.5)). $\blacksquare$
5.6.3 Propriedades do Pulso Sinc
- Zeros: $p(t) = 0$ para $t = kT_s$, $k \in \mathbb{Z} \setminus \{0\}$. ✓ (Nyquist)
- Decaimento: $p(t) \sim 1/t$. Decaimento muito lento.
- Ringing: Oscilações de longa duração — qualquer erro de temporização causa ISI significativa.
- Banda: $B = 1/(2T_s) = R_s/2$. Banda de Nyquist mínima.
- É infinito no tempo → requer truncamento com perda.
- Decaimento lento $1/t$ → sensível a erros de temporização.
- Qualquer offset de amostragem $\epsilon$ causa ISI: $p(\epsilon + kT_s) \ne 0$ para $k \ne 0$.
5.6.4 Sensibilidade a Erro de Temporização
Para $n = 1$: interferência do símbolo vizinho é $\operatorname{sinc}(1 + \epsilon/T_s) = \frac{\sin(\pi(1 + \epsilon/T_s))}{\pi(1 + \epsilon/T_s)} = \frac{-\sin(\pi\epsilon/T_s)}{\pi(1 + \epsilon/T_s)}$.
Para $\epsilon/T_s = 0{,}01$: interferência $\approx -0{,}0318$, ou seja, ~3% do símbolo desejado. Isso é significativo em sistemas de alta ordem.
5.7 Dedução do Pulso Raised Cosine
5.7.1 Motivação
O pulso sinc é impraticável por decrescer lentamente ($1/t$). O pulso raised cosine (RC) oferece:
- Zeros exatos em $t = kT_s$ ($k \ne 0$).
- Decaimento rápido ($1/t^3$), tornando-o robusto a erros de temporização.
- Banda controlada pelo parâmetro $\alpha \in [0, 1]$.
5.7.2 Definição do Espectro RC
A banda unilateral é:
5.7.3 Verificação da Simetria de Nyquist
Devemos verificar $P_{\text{RC}}(f_N + \nu) + P_{\text{RC}}(f_N - \nu) = T_s$ para $f_N = 1/(2T_s)$ e $|\nu| \le 1/(2T_s)$.
Para $\nu \in [-\frac{\alpha}{2T_s}, \frac{\alpha}{2T_s}]$ (zona do rolloff):
Da mesma forma:
Somando: $\frac{T_s}{2}[1 - \sin] + \frac{T_s}{2}[1 + \sin] = T_s$. ✓
Para $\nu$ fora da zona de rolloff, um dos termos é $T_s$ e outro é $0$, somando $T_s$. ✓
Para $\nu$ fora do suporte ($|\nu| > (1+\alpha)/(2T_s)$), ambos são zero e a condição não se aplica. $\blacksquare$
5.7.4 DEDUÇÃO do Formato no Tempo
A resposta temporal é obtida pela inversa de Fourier:
Substituindo (6.1):
Primeira integral (região plana):
Segunda integral (região de rolloff): Fazendo $u = f - \frac{1-\alpha}{2T_s}$, de $0$ a $\alpha/T_s$:
Expandindo $\cos(2\pi t(u + \frac{1-\alpha}{2T_s})) = \cos(2\pi tu)\cos\!\left(\frac{\pi t(1-\alpha)}{T_s}\right) - \sin(2\pi tu)\sin\!\left(\frac{\pi t(1-\alpha)}{T_s}\right)$.
O termo constante 1 multiplicado pelo cosseno:
O termo com $\cos(\frac{\pi T_s}{\alpha}u)\cos(2\pi tu)$: usando $\cos A\cos B = \frac{1}{2}[\cos(A-B)+\cos(A+B)]$:
Essas integrais produzem termos proporcionais a $\frac{\sin(\frac{\pi\alpha t}{2T_s}\pm\pi t)}{\dots}$. Após simplificações trigonométricas extensas (detalhadas abaixo):
5.7.5 Dedução Detalhada do Resultado Final
Vamos consolidar os cálculos. Para $t \neq 0$:
Verificação para $\alpha = 0$:
Verificação para $\alpha = 1$:
5.7.6 Valores nas Singularidades
A expressão (6.6) é indeterminada para $t = 0$ e para $t = \pm T_s/(2\alpha)$ (quando $\alpha > 0$).
Para $t = 0$:
Para $t = \pm T_s/(2\alpha)$: (quando $\alpha > 0$)
Usando L'Hôpital ou expansão de Taylor:
5.8 Propriedades do Pulso Raised Cosine
5.8.1 Zeros em $t = kT_s$, $k \ne 0$
De (6.6), $p_{\text{RC}}(kT_s) = \operatorname{sinc}(k) \cdot \frac{\cos(\alpha\pi k)}{1 - (2\alpha k)^2} = 0 \cdot (\dots) = 0$, pois $\operatorname{sinc}(k) = 0$ para inteiro não-nulo. $\blacksquare$
5.8.2 Decaimento
Para $\alpha = 0$, o decaimento é $O(1/t)$ (pulso sinc puro).
5.8.3 Largura de Banda vs. Fator $\alpha$
A banda unilateral é $B = \frac{1+\alpha}{2T_s}$:
| $\alpha$ | Banda $B$ | Eficiência espectral $\eta = \log_2 M / B$ |
|---|---|---|
| 0 | $1/(2T_s)$ | Máxima (banda mínima) |
| 0,25 | $1,25/(2T_s)$ | 80% da máxima |
| 0,5 | $1,5/(2T_s)$ | 67% da máxima |
| 1 | $1/T_s$ | 50% da máxima |
5.8.4 Visualização dos Pulsos
- $\alpha = 0$: decaimento $1/t$ — "ringing" longo.
- $\alpha = 0{,}35$: decaimento $1/t^3$ — principal lóbulo + poucos side lobes.
- $\alpha = 1$: decaimento $1/t^3$ — pulsos ainda mais localizados.
5.9 Root-Raised Cosine e Filtros Casados
5.9.1 Filtro Casado
onde $K$ é uma constante e $T_0$ é o tempo de amostragem.
A saída do filtro em $t = T_0$ é:
Pela desigualdade de Cauchy-Schwarz:
A potência do ruído na saída é:
Logo, $\text{SNR} = \frac{|y(T_0)|^2}{P_n} \le \frac{E_p E_h}{(N_0/2)E_h} = \frac{2E_p}{N_0}$.
A igualdade ocorre quando $h(T_0 - \tau) \propto p^*(\tau)$, ou seja, $h(t) \propto p^*(T_0 - t)$. $\blacksquare$
5.9.2 Root-Raised Cosine (RRC)
5.9.3 Split RC: Transmissor e Receptor
A cascata $H_T H_R=P_{\text{RC}}$ satisfaz Nyquist. O RRC ideal é bilateral no tempo, de duração infinita e não causal; na prática ele é atrasado, truncado e implementado como FIR causal, o que introduz pequena ISI residual.
5.9.4 Expressão Temporal do RRC
A forma temporal do RRC é mais complexa que a do RC. Para $\alpha > 0$ e $t \neq 0, \pm T_s/(4\alpha)$:
Para $t = 0$:
Para $t = \pm T_s/(4\alpha)$:
5.9.5 Exemplo: Sistema Completo RRC
- Transmissor: símbolos $a_k$ → pulso $p_{\text{RRC}}(t-kT_s)$.
- Canal: AWGN.
- Receptor: filtro RRC, amostra em $t = nT_s$.
- Saída: $y[n] = a_n(p_{\text{RRC}} * p_{\text{RRC}})(0) + \text{ISI} + n[n] = a_n + n[n]$.
No modelo ideal, $p_{\text{RRC}}*p_{\text{RRC}}=p_{\text{RC}}$, que satisfaz Nyquist e maximiza a SNR no instante de decisão. Em uma realização FIR truncada, a igualdade é aproximada e deve-se medir a ISI residual nas amostras vizinhas.
5.10 Representação Complexa e I/Q
5.10.1 Sinal Banda Base Complexo
onde $I(t)$ é o componente em fase (in-phase) e $Q(t)$ é o componente quadratura (quadrature).
5.10.2 Relação com Banda Passante
O sinal banda passante correspondente é:
5.10.3 Representação de Envelope e Fase
O sinal banda passante pode ser escrito:
5.10.4 Aplicações: QAM e PSK
Para QAM, $I(t)$ e $Q(t)$ são sinais PAM independentes, cada um modulado em uma portadora ortogonal.
Para PSK, a informação está na fase: $\tilde{s}(t) = A e^{j\phi_k}$, onde $\phi_k$ são fases discretas.
5.11 Códigos de Linha e Eye Diagram
5.11.1 Codificações Básicas
NRZ (Non-Return-to-Zero):
- Bit 0 → $-A$, bit 1 → $+A$.
- PSD: $\propto \operatorname{sinc}^2(fT_b)$.
- Possui componente DC se $P(0) \ne 0$ e $\mathbb{E}[a_k] \ne 0$.
RZ (Return-to-Zero):
- Bit 1 → pulso de duração $\tau < T_b$, retorna a zero.
- Bit 0 → zero.
- Mais fácil sincronismo de clock, mas mais banda.
Manchester:
- Bit 0 → transição baixa→alta no meio.
- Bit 1 → transição alta→baixa no meio.
- Sempre há transição → facilitação de clock, elimina DC.
- Banda: primeiro zero em $2R_b$ (o dobro do NRZ).
AMI (Alternate Mark Inversion):
- Bit 0 → zero.
- Bit 1 → alternância $+A, -A, +A, \dots$
- Balanceamento DC automático.
- Problema: sequências longas de zeros perdem sincronismo.
HDB3 (High-Density Bipolar 3):
- Substitui sequências de 4+ zeros por padrões especiais.
- Elimina o problema de zeros consecutivos do AMI.
- Usado em enlaces E1; sistemas T1 tradicionalmente usam B8ZS, não HDB3.
5.11.2 Códigos com Balanceamento DC
5.11.3 Eye Diagram (Diagrama de Olho)
O eye diagram revela:
- ISI: "Fechamento" dos olhos. Quanto mais aberto, menor ISI.
- Jitter: Espessura horizontal dos cruzamentos.
- Ruído: Espessura vertical nas aberturas.
- Distorção de amplitude: Assimetria vertical.
5.11.4 Abertura do Eye
Para um sinal binário, se $\mathcal Y_1(t)$ e $\mathcal Y_0(t)$ são os conjuntos de traços condicionados ao símbolo central 1 e 0, a abertura vertical no instante $t$ é
e escolhe-se o instante de maior abertura:
Para sinais multinível há um olho entre cada par de níveis adjacentes; a margem do sistema é a menor dessas aberturas.
A abertura horizontal é a janela temporal onde a amostragem pode ocorrer sem ISI significativa.
5.12 Exercícios Resolvidos em Python
5.12.1 Protocolo computacional
Objetivo: validar PSD de PAM, pulsos RC/RRC, ausência de ISI e abertura do olho. Normalização: declare energia do pulso, amostras por símbolo e descarte de transientes. Validação: amostre a resposta conjunta em múltiplos de $T_s$ e reporte numericamente os resíduos de ISI.
5.12.2 Exercício 1: PSD de Sequência PAM Aleatória
Calcule e visualize a densidade espectral de potência (PSD) de um sinal PAM 4-aleatório com pulso retangular e pulso RC.
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch
np.random.seed(42)
T_s = 1.0
sps = 16 # samples per symbol
N_sym = 4096
# Sequência aleatória 4-PAM
a = np.random.choice(np.array([-3, -1, 1, 3]), size=N_sym)
# Pulso retangular
rect = np.ones(sps)
# Pulso RC (alpha=0.35)
def rc_pulse(t, T_s, alpha):
scalar_input = np.ndim(t) == 0
t = np.atleast_1d(t)
if alpha == 0:
y = np.sinc(t / T_s)
return y.item() if scalar_input else y
den = 1 - (2 * alpha * t / T_s) ** 2
with np.errstate(divide='ignore', invalid='ignore'):
y = np.sinc(t / T_s) * np.cos(np.pi * alpha * t / T_s) / den
# tratar singularidades
mask = np.isclose(np.abs(2 * alpha * t / T_s), 1, atol=1e-6)
y[mask] = np.pi / 4 * np.sinc(1 / (2 * alpha))
y[np.isclose(t / T_s, 0, atol=1e-6)] = 1.0
return y.item() if scalar_input else y
alpha = 0.35
rc = rc_pulse(np.arange(-5*sps, 5*sps+1) / sps, T_s, alpha)
rc = rc / np.sqrt(np.mean(rc**2)) # normalizar
# Transmitir
u_rect = np.zeros(len(a) * sps)
u_rect[::sps] = a
u_rc = np.convolve(a, rc, mode='full')
# PSD via Welch
fs = sps / T_s
f_rect, P_rect = welch(u_rect, fs=fs, nperseg=min(2**14, len(u_rect)))
f_rc, P_rc = welch(u_rc, fs=fs, nperseg=min(2**14, len(u_rc)))
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
ax[0].plot(f_rect, 10*np.log10(P_rect), label='4-PAM, pulso retangular')
ax[0].set(xlabel='f (symb⁻¹)', ylabel='PSD (dB)', title='PSD: Pulso Retangular')
ax[0].grid(True)
ax[0].legend()
ax[1].plot(f_rc, 10*np.log10(P_rc), label=f'4-PAM, pulso RC (α={alpha})')
ax[1].set(xlabel='f (symb⁻¹)', ylabel='PSD (dB)', title=f'PSD: Pulso RC (α={alpha})')
ax[1].grid(True)
ax[1].legend()
plt.tight_layout()
plt.show()
5.12.3 Exercício 2: Pulso RC — Cálculo no Tempo e Frequência
Plotar o pulso RC e seu espectro para diferentes valores de $\alpha$.
import numpy as np
import matplotlib.pyplot as plt
def rc_time(t, T_s, alpha):
if alpha == 0:
return np.sinc(t / T_s)
den = 1 - (2 * alpha * t / T_s) ** 2
with np.errstate(divide='ignore', invalid='ignore'):
y = np.sinc(t / T_s) * np.cos(np.pi * alpha * t / T_s) / den
singular = np.isclose(np.abs(2 * alpha * t / T_s), 1, atol=1e-6)
y[singular] = np.pi / 4 * np.sinc(1 / (2 * alpha))
y[np.isclose(t / T_s, 0, atol=1e-6)] = 1.0
return y
def rc_spec(f, T_s, alpha):
if alpha == 0:
return T_s * (np.abs(f) <= 1 / (2 * T_s))
B = (1 + alpha) / (2 * T_s)
G = np.zeros_like(f)
# região plana
flat = np.abs(f) <= (1 - alpha) / (2 * T_s)
G[flat] = T_s
# região de rolloff
rolloff = (np.abs(f) > (1 - alpha) / (2 * T_s)) & (np.abs(f) <= B)
arg = (np.pi * T_s / alpha) * (np.abs(f[rolloff]) - (1 - alpha) / (2 * T_s))
G[rolloff] = T_s / 2 * (1 + np.cos(arg))
return G
T_s = 1.0
t = np.linspace(-6, 6, 3001)
f = np.linspace(-1.5, 1.5, 3001)
fig, ax = plt.subplots(1, 2, figsize=(14, 5))
alphas = [0, 0.25, 0.5, 1.0]
for alpha in alphas:
ax[0].plot(t, rc_time(t, T_s, alpha), label=f'α={alpha}')
ax[0].set(xlabel='t/T_s', ylabel='p(t)', title='Pulso Raised Cosine (domínio do tempo)',
xlim=(-6, 6))
ax[0].grid(True)
ax[0].legend()
ax[0].axhline(0, color='k', linewidth=0.5)
for alpha in alphas:
G = rc_spec(f, T_s, alpha)
ax[1].plot(f, G / T_s, label=f'α={alpha}')
ax[1].axvline((1 + alpha) / (2 * T_s), color='r', linestyle='--', alpha=0.4,
label=f'α={alpha}: B')
ax[1].set(xlabel='f·T_s', ylabel='P(f)/T_s', title='Espectro RC (domínio da frequência)')
ax[1].grid(True)
ax[1].legend()
plt.tight_layout()
plt.show()
5.12.4 Exercício 3: Eye Diagram para Diferentes Fatores $\alpha$
import numpy as np
import matplotlib.pyplot as plt
def rrc_pulse(t, T_s, alpha):
if alpha == 0:
return np.sinc(t / T_s)
num = np.sin(np.pi * t / T_s * (1 - alpha)) + 4 * alpha * t / T_s * np.cos(np.pi * t / T_s * (1 + alpha))
den = np.pi * t / T_s * (1 - (4 * alpha * t / T_s) ** 2)
with np.errstate(divide='ignore', invalid='ignore'):
h = num / den
# t = 0
mask0 = np.isclose(t, 0, atol=1e-12)
h[mask0] = 1 / T_s * (1 + alpha * (4/np.pi - 1))
# singularidades em t = ±T_s/(4α)
sing = np.isclose(np.abs(4 * alpha * t / T_s), 1, atol=1e-6)
if np.any(sing):
s = t[sing]
h[sing] = (alpha / np.sqrt(2 * T_s)) * ((1 + 2/np.pi) * np.sin(np.pi / (4*alpha)) +
(1 - 2/np.pi) * np.cos(np.pi / (4*alpha)))
return h
T_s = 1.0
sps = 8
N_sym = 500
np.random.seed(0)
a = 2 * np.random.randint(0, 2, N_sym) - 1 # BPSK
alphas = [0, 0.25, 0.5, 0.75, 1.0]
fig, axes = plt.subplots(2, 3, figsize=(15, 8))
axes = axes.ravel()
for idx, alpha in enumerate(alphas):
h = rrc_pulse(np.arange(-5*sps, 5*sps+1) / sps, T_s, alpha)
h = h / np.sqrt(np.sum(h**2)) # normalizar energia
# transmit
u = np.zeros(len(a) * sps)
u[::sps] = a
tx = np.convolve(u, h, mode='full')
# eye diagram
eye_len = 2 * sps
start = N_sym * sps // 2
for k in range(start // sps, start // sps + 200):
segment = tx[k*sps: min(k*sps+eye_len, len(tx))]
if len(segment) == eye_len:
axes[idx].plot(np.arange(eye_len) / sps, segment,
'b', alpha=0.06)
axes[idx].set(xlabel='tempo/T_s', title=f'α = {alpha}', ylim=(-3, 3))
axes[idx].grid(alpha=0.3)
if idx == 0:
axes[idx].set_ylabel('amplitude')
# último subplot vazio ou com info
axes[-1].axis('off')
axes[-1].text(0.1, 0.5, 'Diagrama de olho\napós cascata RRC+RRC\nPara cada α, 200 símbolos\nsobrepostos',
fontsize=11, ha='center', va='center')
for ax in axes[:-1]:
ax.axhline(0, color='k', linewidth=0.5)
plt.tight_layout()
plt.show()
5.12.5 Exercício 4: ISI com Pulso Não-Ideal
Demonstrar numericamente como um pulso com rolloff alto causa ISI quando há erro de temporização.
import numpy as np
import matplotlib.pyplot as plt
def rc_pulse(t, T_s, alpha):
scalar_input = np.ndim(t) == 0
t = np.atleast_1d(t)
if alpha == 0:
y = np.sinc(t / T_s)
return y.item() if scalar_input else y
den = 1 - (2 * alpha * t / T_s) ** 2
with np.errstate(divide='ignore', invalid='ignore'):
y = np.sinc(t / T_s) * np.cos(np.pi * alpha * t / T_s) / den
singular = np.isclose(np.abs(2 * alpha * t / T_s), 1, atol=1e-6)
y[singular] = np.pi / 4 * np.sinc(1 / (2 * alpha))
y[np.isclose(t / T_s, 0, atol=1e-6)] = 1.0
return y.item() if scalar_input else y
T_s = 1.0
t = np.linspace(-5, 5, 2001)
# Sequência: símbolo principal em k=0, interferentes em k=-2..-1, 1..2
a = {0: 1.0, 1: 0.5, -1: -0.3, 2: 0.2, -2: -0.1}
alphas = [0.0, 0.25, 0.5, 1.0]
errors = [0.0, 0.05, 0.1, 0.15] # erro de temporização em unidades de T_s
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
for idx, eps in enumerate(errors):
ax = axes[idx // 2, idx % 2]
for alpha in alphas:
g = np.array([rc_pulse((n + eps) * T_s, T_s, alpha) * a.get(n, 0)
for n in range(-2, 3)])
ISI = sum(g[n] for n in range(-2, 3) if n != 0)
desired = g[0]
ax.plot(alpha, abs(ISI) / abs(desired) if abs(desired) > 1e-12 else 0,
'o-', label=f'α={alpha}', alpha=0.7)
ax.set(xlabel='α', ylabel='ISI / símbolo_desejado',
title=f'Erro de timing ε = {eps} T_s', ylim=(0, 1))
ax.grid(True)
ax.legend(fontsize=8)
plt.tight_layout()
plt.show()
# Tabela numérica
print("ISI relativa para diferentes α e ε:")
print(f"{'α':>6} | {'ε=0':>10} | {'ε=0.05':>10} | {'ε=0.1':>10} | {'ε=0.15':>10}")
print("-" * 60)
for alpha in alphas:
vals = []
for eps in errors:
g = np.array([rc_pulse((n + eps) * T_s, T_s, alpha) * a.get(n, 0)
for n in range(-2, 3)])
ISI = sum(g[n] for n in range(-2, 3) if n != 0)
desired = g[0]
vals.append(f"{abs(ISI)/abs(desired):.6f}" if abs(desired) > 1e-12 else "N/A")
print(f"{alpha:>6.2f} | {vals[0]:>10} | {vals[1]:>10} | {vals[2]:>10} | {vals[3]:>10}")
ISI relativa para diferentes α e ε:
α | ε=0 | ε=0.05 | ε=0.1 | ε=0.15
------------------------------------------------------------
0.00 | N/A | 376.458830 | 176.839827 | 110.481374
0.25 | N/A | 473.978945 | 220.196437 | 136.066980
0.50 | N/A | 1063.467719 | 471.514031 | 278.613068
1.00 | N/A | 5523.947549 | 2590.311189 | 1651.0081945.13 Lista de Exercícios Propostos
E1. Dê a expressão da potência média $P$ de um sinal PAM 8-PAM com $\sigma_a^2 = 7$ e pulso de energia $E_p = 2$, para $T_s = 10^{-6}$ s.
E2. Mostre que para sequência não correlacionada com $\mu_a = 0$, a PSD é $S_s(f) = \frac{\sigma_a^2}{T_s}|P(f)|^2$.
E3. Para $R_s = 10$ Mbaud, calcule a banda de Nyquist mínima e a banda RC com $\alpha = 0{,}35$.
E4. Verifique analiticamente que o pulso $p(t) = \operatorname{sinc}(2Wt)$ satisfaz o critério de Nyquist para $T_s = 1/(2W)$.
E5. Mostre que para $\alpha = 0$, a expressão (6.6) se reduz ao pulso sinc.
E6. Calcule o valor de $p_{\text{RC}}(t)$ em $t = T_s/(2\alpha)$ para $\alpha = 0{,}5$ e $T_s = 1$.
E7. Prove que o decaimento do pulso RC para $\alpha > 0$ é $O(1/t^3)$.
E8. Calcule a SNR máxima de um filtro casado para pulso retangular de amplitude $A$ e duração $T_s$ em AWGN com PSD $N_0/2$.
E9. Para um sistema RRC com $\alpha = 0{,}25$ e $T_s = 2 \times 10^{-6}$ s, calcule a banda unilateral.
E10. Trace o eye diagram conceitual para um canal com ISI severa e compare com um canal sem ISI. Descreva as diferenças.
E11. Justifique por que Manchester tem banda duas vezes maior que NRZ polar.
E12. Para o pulso $g(t) = e^{-|t|/T}$, calcule a ISI no instante de decisão causada por símbolos adjacentes.
5.14 Gabarito
E1. $P = \sigma_a^2 E_p / T_s = 7 \times 2 / 10^{-6} = 14 \times 10^6$ W = 14 MW.
E2. $R_{aa}[m] = \sigma_a^2\delta[m]$, então $\sum_m R_{aa}[m] e^{-j2\pi f m T_s} = \sigma_a^2$. Logo $S_s(f) = \frac{\sigma_a^2}{T_s}|P(f)|^2$.
E3. Nyquist: $B_N = R_s/2 = 5$ MHz. RC ($\alpha=0{,}35$): $B = (1{,}35)R_s/2 = 6{,}75$ MHz.
E4. $p(nT_s) = \operatorname{sinc}(2W \cdot n/(2W)) = \operatorname{sinc}(n) = \delta[n]$. ✓
E5. Para $\alpha = 0$: $\cos(0) = 1$ e $1 - (0)^2 = 1$, logo $p(t) = \operatorname{sinc}(t/T_s) \cdot 1/1 = \operatorname{sinc}(t/T_s)$. ✓
E6. $p_{\text{RC}}(T_s/2) = \operatorname{sinc}(1/2) \cdot \frac{\cos(\pi/4)}{1 - 1}$. Usando limite: $= \frac{\pi}{4}\operatorname{sinc}(2) = \frac{\pi}{4}\cdot \frac{\sin(\pi/2)}{\pi/2} = \frac{1}{2}$.
E7. $\operatorname{sinc}(t) = O(1/t)$ e $\frac{\cos(\alpha\pi t/T_s)}{1-(2\alpha t/T_s)^2} = O(1/t^2)$, então o produto é $O(1/t^3)$. ✓
E8. $E_p = A^2 T_s$. $\text{SNR}_{\max} = 2A^2 T_s / N_0$.
E9. $B = (1{,}25) / (2 \times 2 \times 10^{-6}) = 312{,}500$ Hz = 312,5 kHz.
E10. ISI severa: olhos fechados, cruzamentos dispersos, pouca abertura vertical/horizontal. Sem ISI: olhos amplamente abertos, cruzamentos precisos.
E11. Manchester tem transição em cada meio-bit, dobrando a frequência fundamental. Primeiro zero em $2/T_b$ vs $1/T_b$ do NRZ.
E12. ISI = $\sum_{k \ne 0} a_k e^{-|k|T/T} = e^{-1}(a_{-1}+a_1) + e^{-2}(a_{-2}+a_2) + \dots$. Para $a_k$ aleatórios com energia $\sigma_a^2$, a variância da ISI é $\sigma_a^2 \sum_{k \ne 0} e^{-2|k|} = \sigma_a^2 \frac{2e^{-2}}{1-e^{-2}}$.