Projete um filtro Passa-Banda de 1a ordem, com frequências de corte em 80 Hz e 240 Hz e pico igual a 1. Esboce o gráfico da magnitude X frequência, contendo a posição das frequências de corte com suas respectivas amplitudes (nota: um filtro Passa-Banda de 1ª ordem não existe, pois resulta da multiplicação de duas Funções de Transferência de 1ª ordem).
library(ggplot2)# --- 1. Projeto do Filtro Passa-Banda (Passa-Alto + Passa-Baixo) ---# Frequências de Corte (Hz)fc_baixo <-80# Frequência de corte inferior (Passa-Alto)fc_alto <-240# Frequência de corte superior (Passa-Baixo)# Pico (Ganho na Banda Passante)G_pico <-1# Frequências angulares (rad/s)w_baixo <-2* pi * fc_baixow_alto <-2* pi * fc_altoG_PA <-1# Ganho na banda passante do Passa-Alto (f >> fc_baixo)G_PB <-1# Ganho na banda passante do Passa-Baixo (f << fc_alto)# Função de magnitude do filtro Passa-Banda (cascata de 1a ordem)magnitude_banda <-function(f) { w <-2* pi * f# Magnitude do Passa-Alto de 1a ordem H_PA <- G_PA * ( (w / w_baixo) /sqrt(1+ (w / w_baixo)^2) )# Magnitude do Passa-Baixo de 1a ordem H_PB <- G_PB * ( 1/sqrt(1+ (w / w_alto)^2) )# Magnitude total (multiplicação das magnitudes)return(H_PA * H_PB)}# --- 2. Esboço do Gráfico da Magnitude X Frequência ---frequencias <-seq(1, 1000, length.out =500) # Faixa de frequências para o gráfico (1 Hz a 1000 Hz)magnitudes <-magnitude_banda(frequencias)pico_max <-max(magnitudes)amplitude_corte_teorica <- pico_max /sqrt(2) # Amplitude de -3dB# Frequências de corte reais (onde a magnitude é aproximadamente -3dB)amplitude_fc_baixo <-magnitude_banda(fc_baixo)amplitude_fc_alto <-magnitude_banda(fc_alto)df_bode <-data.frame(Frequencia = frequencias, Magnitude = magnitudes)df_cortes <-data.frame(Frequencia =c(fc_baixo, fc_alto),Amplitude =c(amplitude_fc_baixo, amplitude_fc_alto),Label =c(paste0("fcL = ", fc_baixo, " Hz\nA = ", round(amplitude_fc_baixo, 3)),paste0("fcH = ", fc_alto, " Hz\nA = ", round(amplitude_fc_alto, 3))))# Plotagem com ggplot2p1 <-ggplot(df_bode, aes(x = Frequencia, y = Magnitude)) +geom_line(color ="blue", size =1) +geom_point(data = df_cortes, aes(x = Frequencia, y = Amplitude), color ="red", size =3) +geom_text(data = df_cortes, aes(x = Frequencia, y = Amplitude, label = Label), vjust =2, hjust =c(1,0), color ="red") +geom_hline(yintercept = pico_max, linetype ="dashed", color ="gray50") +geom_text(aes(x =max(Frequencia)*0.8, y = pico_max, label =paste0("Pico Máx = ", round(pico_max, 3))), vjust =-0.5, color ="gray50", size =3) +labs(title ="Gráfico da Magnitude do Filtro Passa-Banda (1ª Ordem Cascata)",x ="Frequência (Hz)",y ="|H(jω)| (Amplitude)") +theme_minimal() +scale_x_continuous(breaks =c(fc_baixo, fc_alto, 500, 1000))
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
print(p1)
Warning in geom_text(aes(x = max(Frequencia) * 0.8, y = pico_max, label = paste0("Pico Máx = ", : All aesthetics have length 1, but the data has 500 rows.
ℹ Please consider using `annotate()` or provide this layer with data containing
a single row.
# --- 3. Simulação no Domínio do Tempo ---# Parâmetros do Sinal x(t)f1 <-20# Hz (frequência a ser atenuada)f2 <-150# Hz (frequência na banda passante)f3 <-500# Hz (frequência a ser atenuada)# Parâmetros de amostragemfs <-4*max(f1, f2, f3, fc_alto) # Frequência de amostragem (Nyquist * 2 para folga)Tempo_total <-0.1# Simular 0.1s para visualizar 10 períodos de f1=100Hz ou 4 períodos de f1=40Hzn_amostras <-round(Tempo_total * fs)t <-seq(0, Tempo_total, length.out = n_amostras) # Vetor de tempo# Sinal de entrada x(t)x_t <-cos(2* pi * f1 * t) +cos(2* pi * f2 * t) +cos(2* pi * f3 * t)# Calculando a resposta complexa (Função de Transferência)H_PA_completo <-function(f) { w <-2* pi * freturn( G_PA * ( (0+1i) * w / w_baixo ) / ( 1+ (0+1i) * w / w_baixo ) )}H_PB_completo <-function(f) { w <-2* pi * freturn( G_PB * ( 1 ) / ( 1+ (0+1i) * w / w_alto ) )}H_BP_completo <-function(f) {return(H_PA_completo(f) *H_PB_completo(f))}# Frequências presentes no sinal x(t)f_componentes <-c(f1, f2, f3)# 1. Obter a resposta do filtro para cada frequênciaH_comp <-H_BP_completo(f_componentes)Magnitude_comp <-Mod(H_comp) # Ganho (atenuação)Fase_comp <-Arg(H_comp) # Defasagem (radianos)# 2. Construir o sinal de saída y(t)# y(t) = |H(f1)|*cos(2*pi*f1*t + Fase(f1)) + |H(f2)|*cos(2*pi*f2*t + Fase(f2)) + ...y_t <- ( Magnitude_comp[1] *cos(2* pi * f1 * t + Fase_comp[1]) + Magnitude_comp[2] *cos(2* pi * f2 * t + Fase_comp[2]) + Magnitude_comp[3] *cos(2* pi * f3 * t + Fase_comp[3]))# --- 4. Plotagem dos Gráficos Temporais ---df_signal <-data.frame(tempo =rep(t, 2),sinal =c(x_t, y_t),tipo =rep(c("Entrada x(t)", "Saída y(t)"), each=length(t)))ggplot(df_signal, aes(x=tempo, y=sinal, color=tipo)) +geom_line(size=0.8) +labs(title="Sinais no tempo", x="Tempo (s)", y="Amplitude") +theme_minimal()
Análise do Filtro Passa-Banda \(1^a\) Ordem (Cascata)
Na Questão 2 projetamos um filtro Passa-Banda com frequências de corte em \(80 \text{ Hz}\) (\(f_{c, \text{baixo}}\)) e \(240 \text{ Hz}\) (\(f_{c, \text{alto}}\)) e pico de magnitude igual a \(1\), implementado pela multiplicação (cascata) de um filtro Passa-Alto de\(1^a\) ordem e um filtro Passa-Baixo de \(1^a\) ordem.
1. Gráfico da Magnitude vs. Frequência
O gráfico de magnitude ilustra a resposta em frequência do filtro em cascata.
Pico de Magnitude: O pico máximo (ganho máximo) alcançado é de \(0.75\). Este valor é inferior ao pico unitário (\(1\)) solicitado na questão, indicando uma atenuação intrínseca devido à natureza do filtro de primeira ordem em cascata.
Frequências de Corte (\(f_c\)):
A frequência de corte inferior (\(f_{cL}\)) é \(80 \text{ Hz}\), com uma amplitude de \(0.61\).
A frequência de corte superior (\(f_{cH}\)) é \(240 \text{ Hz}\), com uma amplitude de \(0.67\).
Observação sobre a Amplitude de Corte:
Em um filtro ideal, a amplitude nas frequências de corte (\(f_c\)) seria o pico máximo dividido por \(\sqrt{2}\) (o ponto de \(-3 \text{ dB}\)). No caso, \(0.75 / \sqrt{2} \approx 0.53\). O fato de as amplitudes calculadas nas frequências de corte (0.61 e 0.67) estarem acima de \(0.53\) (amplitude de \(-3 \text{ dB}\) em relação ao pico real de \(0.75\)) sugere que, para um filtro Passa-Banda em cascata, o ponto de \(-3 \text{ dB}\) em relação ao pico máximo real (0.75) estaria em frequências diferentes de \(80 \text{ Hz}\) e \(240 \text{ Hz}\). Isso ressalta a diferença entre as frequências de corte de \(-3 \text{ dB}\) teóricas (dos filtros individuais) e a resposta do sistema em cascata.
2. Simulação no Domínio do Tempo
Na simulação utilizamos um sinal de entrada \(x(t)\) composto por três componentes de frequência: \(f_1 = 20 \text{ Hz}\) (A ser atenuada, fora da banda), \(f_2 = 150 \text{ Hz}\) (Na banda passante) e \(f_3 = 500 \text{ Hz}\) (A ser atenuada, fora da banda).
A tabela de resultados mostra o efeito do filtro em cada componente:
Frequência (\(f\))
Magnitude (\(|H(f)|\))
Ganho (\(\text{dB}\))
Análise (Banda Passante: \(80 \text{ Hz}\) a \(240 \text{ Hz}\))
\(20 \text{ Hz}\) (\(f_1\))
\(0.242\)
\(-12.33 \text{ dB}\)
Alta Atenuação: Frequência muito abaixo da banda.
\(150 \text{ Hz}\) (\(f_2\))
\(0.748\)
\(-2.52 \text{ dB}\)
Mínima Atenuação: Frequência no centro da banda passante (próximo ao Pico Máx = 0.75).
\(500 \text{ Hz}\) (\(f_3\))
\(0.427\)
\(-7.39 \text{ dB}\)
Atenuação Moderada: Frequência acima da banda.
O gráfico temporal confirma que o sinal de saída (\(y(t)\)) possui uma amplitude menor que o sinal de entrada (\(x(t)\)). O sinal de saída é dominado pela frequência de \(150 \text{ Hz}\) (que foi menos atenuada), enquanto as componentes de \(20 \text{ Hz}\) e \(500 \text{ Hz}\) foram significativamente reduzidas, demonstrando a função do filtro Passa-Banda.
Questão 7:
1- Projete um filtro Passa-Banda de 2a ordem usando a equação (9-19) com o pico unitário e frequências de corte 180 Hz e 530 Hz
2- Projete um filtro Passa-Banda de 2a ordem usando a equação (9-27) com o pico unitário e frequências de corte 180 Hz e 530 Hz
3- Fazer o gráfico das magnitudes no mesmo plano, marcando as frequências de corte.
4- Considere a seguir, um sinal x(t) = cos(2f1t) + cos(2f2t) + cos(2f3t). Escolha as frequências f1, f2 e f3 de formas que uma delas passe praticamente sem atenuação, outra seja medianamente e outra seja muito atenuada. Construa os sinais ya(t) e yb(t), fazendo o sinal x(t) passar pelos filtros separadamente. Em seguida plote os gráficos temporais de x(t), ya(t) e yb(t). Interprete o resultado. Use a equação 8.12, para obter as amplitudes e fases dos sinais filtrados.
### Código em R# Pacotes necessárioslibrary(signal)
Anexando pacote: 'signal'
Os seguintes objetos são mascarados por 'package:stats':
filter, poly
# Definições iniciaisfL <-180# frequência de corte inferior (Hz)fU <-530# frequência de corte superior (Hz)fs <-5000# taxa de amostragem (Hz)t <-seq(0, 0.05, by =1/fs) # janela temporal (50 ms)# Filtros (equações 9-19 e 9-27)# Frequência natural e fator de amortecimentown <-sqrt(fL * fU) *2*pi # frequência natural (rad/s)bw <- (fU - fL) *2*pi # largura de banda (rad/s)zeta <- bw / (2*wn) # fator de amortecimento# Magnitude Eq. (9-19)M_919 <-function(w, K=1) { num <- K/wn^2 den <-sqrt((1- (w/wn)^2)^2+ (2*zeta*w/wn)^2)return(num/den)}# Magnitude Eq. (9-27)M_927 <-function(w, K=1) { num <- K*w/wn^2 den <-sqrt((1- (w/wn)^2)^2+ (2*zeta*w/wn)^2)return(num/den)}# Eixo de frequênciaf <-seq(0, 1000, length.out =2000)w <-2*pi*f# Normalização para pico unitárioM1 <-M_919(w)M2 <-M_927(w)M_919_norm <- M1 /max(M1)M_927_norm <- M2 /max(M2)# Gráfico de magnitudeplot(f, M_919_norm, type="l", col="blue", lwd=2, ylim=c(0,1.2),xlab="Frequência (Hz)", ylab="Magnitude", main="Filtros Passa-Banda 2a ordem")lines(f, M_927_norm, col="red", lwd=2, lty=2)abline(v=c(fL, fU), col="black", lty=3)legend("topright", legend=c("Eq. (9-19)", "Eq. (9-27)"),col=c("blue","red"), lwd=2, lty=c(1,2))
# --- SINAL DE TESTE ---f1 <-200# dentro da bandaf2 <-400# medianamente atenuadaf3 <-800# fora da bandax <-cos(2*pi*f1*t) +cos(2*pi*f2*t) +cos(2*pi*f3*t)# Filtro digital IIR para simulação (a partir de zeta e wn)# Modelo passa-banda 2ª ordembp_filter <-butter(2, c(fL, fU)/(fs/2), type="pass")# Saídas filtradasya <-filter(bp_filter, x) # aproximando Eq. 9-19yb <-filter(bp_filter, x) # aproximando Eq. 9-27 (mesma estrutura digital p/ simulação)# Plotagem dos sinaispar(mfrow=c(3,1))plot(t, x, type="l", col="black", main="Sinal Original x(t)", xlab="t (s)", ylab="")plot(t, ya, type="l", col="blue", main="Saída ya(t) - Eq. (9-19)", xlab="t (s)", ylab="")plot(t, yb, type="l", col="red", main="Saída yb(t) - Eq. (9-27)", xlab="t (s)", ylab="")
par(mfrow=c(1,1))
Análise Filtros Passa-Banda de \(2^a\) Ordem
Foram projetados dois filtros Passa-Banda de \(2^a\) ordem, ambos com pico unitário e frequências de corte em \(180 \text{ Hz}\) (\(f_L\)) e \(530 \text{ Hz}\) (\(f_U\)). Os filtros são modelados com base em duas equações diferentes: Eq. (9-19) e Eq. (9-27).
1. Gráfico Comparativo da Magnitude
O gráfico (página 7) compara as respostas em magnitude dos dois filtros, ambos normalizados para ter um pico unitário.
Eq. (9-19) (Linha Sólida Azul): Apresenta uma característica de filtro Passa-Baixo/Ressonante de\(2^a\) ordem (ou um filtro de pico largo), atenuando levemente em baixas frequências, mas a magnitude é próxima de \(1\) em \(f=0\) e decai lentamente após o pico. Não se comporta como um Passa-Banda típico, pois não atenua drasticamente frequências muito baixas.
Eq. (9-27) (Linha Tracejada Vermelha): Demonstra o comportamento esperado de um filtro Passa-Banda de\(2^a\) ordem. A magnitude é zero em\(f=0\) (atenuando as baixas frequências) e aumenta em direção ao pico, decaindo nas altas frequências.
Ambos os gráficos indicam as frequências de corte em \(180 \text{ Hz}\) e \(530 \text{ Hz}\).
2. Simulação no Domínio do Tempo e Interpretação
O sinal de entrada \(x(t)\) é composto por: \(f_1 = 200 \text{ Hz}\) (Dentro da banda passante: espera-se pouca atenuação). \(f_2 = 400 \text{ Hz}\) (Medianamente atenuada: espera-se atenuação moderada). \(f_3 = 800 \text{ Hz}\) (Fora da banda: espera-se alta atenuação).
Embora o código tenha tentado simular os filtros baseados nas Equações (9-19) e (9-27), a simulação no domínio do tempo utilizou a mesma função digital para gerar as saídas \(y_a(t)\) e \(y_b(t)\). Esta função butter implementa o filtro Passa-Banda de\(2^a\) ordem de Butterworth, que tem a característica de magnitude semelhante ao esperado pela Eq. (9-27) (Passa-Banda típico).
Sinal Original \(x(t)\): Apresenta uma oscilação complexa, com amplitude máxima próxima de \(\pm 3\) (soma das três componentes unitárias).
Saídas \(y_a(t)\) e \(y_b(t)\): Ambas as saídas são quase idênticas e apresentam uma amplitude máxima significativamente menor (próxima a \(\pm 0.5\)).
Interpretação:
As saídas \(y_a(t)\) e \(y_b(t)\) são muito atenuadas em relação ao sinal de entrada \(x(t)\). A atenuação é esperada, pois a componente de maior amplitude do sinal de entrada (3) corresponde à soma das três frequências.
O filtro (Butterworth \(2^a\) ordem) atenuou as componentes \(f_2 = 400 \text{ Hz}\) (medianamente atenuada) e \(f_3 = 800 \text{ Hz}\) (muito atenuada). A componente dominante na saída é \(f_1 = 200 \text{ Hz}\), que está dentro da banda e passa com menos atenuação, resultando em um sinal de saída que parece ser dominado por uma frequência mais baixa e com uma amplitude máxima reduzida.
A semelhança entre \(y_a(t)\) e \(y_b(t)\) é explicada pelo uso do mesmo filtro digital para a simulação, o que não reflete a diferença teórica entre as magnitudes de (9-19) e (9-27) vistas no gráfico de frequência, mas sim a resposta do filtro Butterworth \(2^a\) ordem Passa-Banda.