Aqui está o meu código para um sinal de dois tons, em que uso uma banda de parada para remover o tom mais alto e, em seguida, plotamos o antes (em azul) e o depois (em vermelho) no domínio da frequência depois de convocar meu sinal com os coeficientes do filtro .
Se você inserir esse código no Matlab, poderá ver claramente que a frequência mais alta foi removida com êxito pelo filtro; no entanto, por algum motivo, a amplitude da frequência mais baixa foi cortada pela metade e quanto mais eu aumentar o número de coeficientes do filtro, quanto mais aplana toda a minha curva, por que isso ocorre? E como posso evitar que a banda de parada não se propague para o exterior? Aqui está a imagem e o código:
fSampling = 8000; tSampling = 1 / fSampling; t = 0: t Amostragem: 0,005; F0 = 1000; F1 = 3000; xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t); ht = fir1 (40, 0,25, 'parar'); yt = conv (xt, ht); fAxis = -4000: 125: 4000-125; xF = fft (xt, 64); MagXF = deslocamento de ffts (abs (xF)); plot (fAxis, MagXF); aguente yF = fft (yt, 64); MagYF = deslocamento de cinco vezes (abs (yF)); plot (fAxis, MagYF, 'r')
Respostas:
Os filtros sempre têm um "roll-off" inerente em sua resposta de frequência, porque você praticamente não consegue perceber uma banda passante que é uma função retangular perfeita. Para um filtro passa-baixo, o ponto em que a magnitude da sua resposta de frequência cai para -3dB é chamado de banda passante e tudo o mais é chamado de banda parada (tecnicamente, tudo além da frequência de canto, mas usaremos o freqüência de canto seja o nível -3dB). A rapidez com que a resposta de frequência atenua além da banda passante depende do comprimento do filtro.
Se você observar a resposta de frequência do seu filtro,
ht
verá que ele cai para -6dB a 1000 Hz:Portanto, faz sentido que a energia caia 6dB após a filtragem, o que você vê na figura como uma amplitude reduzida pela metade.
Se você tivesse examinado a documentação da
fir1
função que usou, também teria percebido isso (grifo meu):Agora, para criar filtros mais nítidos, com respostas muito próximas de um retângulo, você precisará usar os filtros IIR, que vêm com seus próprios problemas de estabilidade, etc., mas definitivamente uma opção. Você pode ver minha resposta aqui para algumas idéias sobre a implementação de um filtro IIR de seção 2 de segunda forma, de forma discreta, que fornece cantos muito afiados. O exemplo existe para um filtro passa-banda, mas você pode ler os documentos para as funções usadas lá e implementar você mesmo uma versão passa-baixo.
fonte
Leva um tempo para um filtro "decidir" se um sinal está dentro ou fora de uma transição de filtro. Uma solução é simplesmente afastar a transição do filtro de qualquer sinal de interesse, como no meio do caminho entre os dois sinais de teste, onde, no seu caso de teste, há muito pouco sinal para distorcer por uma decisão imperfeita.
fonte
Usar
em vez disso, você terá uma atenuação muito baixa em F0 e atenuação muito alta em F1.
fonte