Geração de Sinais
O objetivo dessa parte é criar um sinal composto por várias frequências, o que é muito comum em aplicações de processamento de sinais, como em telecomunicações, análise de áudio, e outras. No contexto do laboratório, você trabalha com um sinal que é uma mistura de componentes senoidais com frequências e amplitudes específicas. Vamos detalhar cada parte do processo de geração deste sinal:
Frequência de Amostragem
- Frequência de Amostragem (Fs): 2000 Hz. Isso significa que o sinal é amostrado 2000 vezes por segundo. A escolha da frequência de amostragem é crucial e deve ser pelo menos o dobro da frequência máxima presente no sinal para satisfazer o teorema da amostragem de Nyquist, evitando o efeito de aliasing.
Duração do Sinal
- Duração: 5 segundos. A duração define quanto tempo o sinal simulado vai durar. No seu caso, você vai gerar um sinal que continua por 5 segundos.
Componentes do Sinal
- Componentes Senoidais: O sinal é uma soma de várias senoides, cada uma com uma frequência e amplitude diferentes:
- 2cos(2pi50t) — Componente de 50 Hz com amplitude 2
- cos(2pi300*t) — Componente de 300 Hz com amplitude 1
- 2.5cos(2pi500t) — Componente de 500 Hz com amplitude 2.5
- 1.5cos(2pi700t) — Componente de 700 Hz com amplitude 1.5
Implementação no Octave
Para implementar isso no Octave, o código inicializa a variável de tempo t
com intervalos que dependem da frequência de amostragem. A expressão t=0:1/Fs:5-1/Fs
cria um vetor de tempo que começa em 0, termina pouco antes dos 5 segundos completos (para garantir um número inteiro de amostras), e incrementa em passos de 1/2000 segundos (que é o inverso da frequência de amostragem).
O sinal é então gerado pela soma das várias componentes senoidais em função deste vetor de tempo, resultando em um sinal temporal que você pode analisar ou filtrar posteriormente.
Esse primeiro passo é essencial para entender como sinais compostos são formados e como suas características de frequência e amplitude podem ser definidas e manipuladas digitalmente.
Se tudo estiver claro até aqui, posso continuar explicando sobre o design do filtro digital recursivo (IIR).
Projeto de Filtro Digital Recursivo (IIR)
Nesta parte do laboratório, o objetivo é projetar um filtro que possa atenuar significativamente a componente de 300 Hz do sinal gerado, enquanto minimamente afeta as outras frequências. Os filtros IIR (Infinite Impulse Response) são amplamente usados devido à sua eficiência em termos de ordem do filtro e capacidade de imitar as características de filtros analógicos clássicos.
Definição das Especificações do Filtro
- Frequências de Passagem (Wp): Define as faixas de frequência onde o sinal deve passar pelo filtro sem ser atenuado. No seu caso, são definidas em torno das frequências de 50 Hz e 500 Hz.
- Frequências de Corte (Ws): Estabelece os limites onde o filtro deve atenuar o sinal, centradas em torno da frequência de 300 Hz (290 Hz e 310 Hz).
- Atenuação nas Faixas de Passagem (Rp) e de Rejeição (Rs): Rp é a máxima perda permitida na banda de passagem (menos de 2% de atenuação), enquanto Rs é a atenuação mínima desejada na banda de parada (aqui configurada para 30 dB).
Projeto do Filtro usando Octave
Para projetar o filtro, utiliza-se o método de Butterworth devido à sua resposta de frequência maximamente plana na banda de passagem, o que ajuda a minimizar distorções. Aqui estão os passos básicos usando funções específicas do Octave:
- Calculando a Ordem do Filtro:
buttord
: Esta função calcula a ordem mínima do filtro e a frequência de corte normalizada que atendem às especificações de atenuação e banda de passagem/rejeição. Os parâmetros incluem as frequências de passagem e de parada (ambas normalizadas pela metade da frequência de amostragem, 𝐹𝑠22Fs) e as atenuações desejadas (Rp e Rs).
- Desenvolvendo o Filtro:
butter
: Com a ordem e a frequência de corte calculadas, essa função gera os coeficientes do numerador e denominador da função de transferência do filtro.
- Análise da Resposta do Filtro:
tf
efreqz
: A funçãotf
cria um modelo de função de transferência a partir dos coeficientes, efreqz
pode ser usada para analisar a resposta em frequência do filtro. Isso é crucial para verificar se o filtro atende aos requisitos de design, especialmente na atenuação da frequência de 300 Hz e na preservação das outras frequências.
Este processo de design do filtro é essencial para garantir que o sinal processado tenha as características desejadas, removendo ou atenuando frequências específicas sem afetar significativamente outras partes do sinal.
Com essas bases, você pode aplicar o filtro ao seu sinal e verificar se ele funciona conforme esperado. Vamos continuar com a implementação do filtro na próxima parte, se estiver tudo bem até aqui!
% Parâmetros do sinal
Fs = 2000; % Frequência de amostragem
Ts = 1/Fs; % Período de amostragem
t = 0:Ts:5-Ts; % Vetor de tempo
% Geração do sinal
s = 2*cos(2*pi*50*t) + cos(2*pi*300*t) + 2.5*cos(2*pi*500*t) + 1.5*cos(2*pi*700*t);
% Plot do sinal
figure;
plot(t, s);
title('Sinal Gerado');
xlabel('Tempo (s)');
ylabel('Amplitude');
2. Código para Projeto e Análise do Filtro IIR
% Especificações do filtro
Wp = [50 500] / (Fs/2); % Frequências de passagem normalizadas
Ws = [290 310] / (Fs/2); % Frequências de parada normalizadas
Rp = -20*log10(0.98); % Atenuação máxima na banda de passagem
Rs = 30; % Atenuação mínima na banda de parada
% Projeto do filtro usando Butterworth
[N, Wc] = buttord(Wp, Ws, Rp, Rs);
[num, den] = butter(N, Wc, 'stop'); % Filtro 'stop' para rejeitar a banda entre Wp1 e Wp2
% Função de Transferência
H = tf(num, den, Ts);
% Resposta em frequência
figure;
freqz(num, den, 1024, Fs);
title('Resposta em Frequência do Filtro IIR');
% Aplicando o filtro ao sinal gerado
s_filtered = filter(num, den, s);
% Plot do sinal filtrado
figure;
plot(t, s_filtered);
title('Sinal Filtrado');
xlabel('Tempo (s)');
ylabel('Amplitude');
Geração do Sinal
O código para geração do sinal cria um vetor de tempo t
e usa esse vetor para construir um sinal composto por múltiplas componentes senoidais, cada uma com sua própria frequência e amplitude. O vetor de tempo é criado de 0
até 5
segundos, decrementando em passos que correspondem ao período de amostragem Ts
(o inverso da frequência de amostragem Fs
).
Funções Específicas do Filtro
buttord
- Função:
buttord
é usada para determinar a ordem mínima necessária para um filtro Butterworth que atenda às especificações dadas de atenuação e banda de passagem/rejeição. - Parâmetros:
Wp
eWs
: São as frequências de passagem e de parada do filtro, respectivamente, normalizadas pela metade da frequência de amostragem (Fs/2
).Rp
eRs
: São as atenuações em dB na banda de passagem e na banda de parada, respectivamente.Rp
é calculado como-20*log10(0.98)
, o que significa que a atenuação máxima permitida na banda de passagem é menor que 2%.
- Retorno: Retorna a ordem
N
do filtro e a frequência de corte normalizadaWc
que podem ser usadas para construir o filtro.
butter
- Função:
butter
cria um filtro Butterworth digital de ordemN
com as frequências de corte especificadas emWc
. - Parâmetros:
N
: A ordem do filtro determinada porbuttord
.Wc
: As frequências de corte calculadas porbuttord
.'stop'
: Especifica que o filtro é um filtro “notch” (de rejeição de banda), que permite passagem nas bandas fora do intervalo definido porWc
.
- Retorno: Retorna os coeficientes do numerador
num
e do denominadorden
da função de transferência do filtro.
filter
- Função:
filter
aplica o filtro definido pelos coeficientesnum
eden
ao sinal de entrada. - Parâmetros:
num
eden
: Coeficientes do filtro gerados porbutter
.s
: O sinal original a ser filtrado.
- Retorno: Retorna o sinal filtrado, onde a frequência de 300 Hz foi atenuada conforme especificado.
Análise de Resposta em Frequência
O script também inclui uma chamada à função freqz
, que é usada para calcular e plotar a resposta em frequência do filtro. Isso é crucial para visualizar como o filtro afeta diferentes frequências, especialmente a frequência de 300 Hz que se deseja atenuar.
Essas funções são fundamentais no design de filtros digitais, permitindo especificar precisamente o comportamento desejado do filtro e aplicá-lo a sinais para alcançar os efeitos desejados. Se você tiver mais perguntas sobre qualquer parte do código ou sobre o funcionamento das funções, fique à vontade para perguntar!