¿Por qué mi filtro stop-band atenúa otras frecuencias?

12

Aquí está mi código para una señal de dos tonos, donde uso una banda de detención para eliminar el tono más alto y luego graficar el antes (en azul) y después (en rojo) en el dominio de frecuencia después de convolucionar mi señal con los coeficientes del filtro .

Si coloca este código en Matlab, puede ver claramente que la frecuencia más alta ha sido eliminada con éxito por el filtro, sin embargo, por alguna razón, la amplitud de la frecuencia más baja se ha reducido a la mitad, y cuanto más aumento el número de coeficientes del filtro, cuanto más se aplana toda mi curva, ¿por qué ocurre esto? ¿Y cómo puedo evitarlo para que la banda de detención no se propague hacia afuera? Aquí está la imagen y el código:

ingrese la descripción de la imagen aquí

fMuestreo = 8000;
tSampling = 1 / fSampling;

t = 0: tMuestreo: 0.005;
F0 = 1000;
F1 = 3000;

xt = sin (2 * pi * F0 * t) + sin (2 * pi * F1 * t);
ht = fir1 (40, .25, 'stop');
yt = conv (xt, ht);

fAxis = -4000: 125: 4000-125;

xF = fft (xt, 64);
MagXF = desplazamiento manual (abs (xF));

trama (fAxis, MagXF);
Espere

yF = fft (yt, 64);
MagYF = desplazamiento manual (abs (yF));

trama (fAxis, MagYF, 'r')
Zaubertrank
fuente
1
El filtrado de paso de banda / detención de banda es inherentemente imperfecto y siempre afectará áreas del espectro que le gustaría dejar solo. Es la naturaleza de la bestia.
Daniel R Hicks
1
Hmm ... ¿hay formas de contrarrestar esto? ¿O otro filtro relativamente simple que sería más adecuado? No sé mucho sobre los filtros de muesca, pero sé que son filtros de parada de banda realmente estrechos y que Matlab tiene comandos para ellos.
Zaubertrank
2
Como dije, es inherente. Diseñar un filtro siempre es una compensación en términos de optimización de algunos parámetros a expensas de otros (y a expensas de los gastos).
Daniel R Hicks

Respuestas:

12

Los filtros siempre tienen un "roll-off" inherente en su respuesta de frecuencia, porque prácticamente no puede darse cuenta de una banda de paso que es una función rectangular perfecta. Para un filtro de paso bajo, el punto donde la magnitud de su respuesta de frecuencia cae a -3dB se llama banda de paso y todo lo que está más allá se llama banda de detención (técnicamente, todo más allá de la frecuencia de esquina, pero tomaremos la frecuencia de esquina para ser el nivel de -3dB). La rapidez con la que su respuesta de frecuencia se atenúa más allá de la banda de paso depende de la longitud del filtro.

Si observa la respuesta de frecuencia de su filtro, htverá que cae a -6dB a 1000 Hz:

ingrese la descripción de la imagen aquí

Por lo tanto, tiene sentido que la potencia caiga 6dB después del filtrado, lo que se ve en su figura como una reducción de la amplitud a la mitad.

Si hubiera mirado la documentación de la fir1función que utilizó, también se habría dado cuenta (énfasis mío):

B = fir1(N,Wn)diseña un Nfiltro digital FIR de paso bajo de orden th y devuelve los coeficientes del filtro en el N+1vector de longitud B. La frecuencia de corte Wn debe estar entre 0 < Wn < 1.0, y 1.0 corresponde a la mitad de la frecuencia de muestreo. El filtro Bes real y tiene fase lineal. La ganancia normalizada del filtro en Wn es -6 dB.

Ahora, para crear filtros más nítidos, con respuestas que se acerquen bastante a un rectángulo, tendrá que usar filtros IIR, que vienen con su propia serie de problemas de estabilidad, etc., pero definitivamente una opción. Puede ver mi respuesta aquí para obtener algunas ideas sobre la implementación de un filtro IIR de sección de segundo orden de forma discreta 2 que ofrece esquinas muy definidas. El ejemplo es para un filtro de paso de banda, pero puede leer los documentos de las funciones utilizadas allí e implementar una versión de paso bajo usted mismo.

Lorem Ipsum
fuente
1

A un filtro le lleva tiempo "decidir" si una señal está dentro o fuera de una transición de filtro. Una solución es simplemente alejar la transición del filtro de cualquier señal de interés, como a medio camino entre sus dos señales de prueba, donde, en su caso de prueba, hay muy poca señal para distorsionar por una decisión imperfecta.

hotpaw2
fuente
0

Utilizar

ht = fir1(40,.5,'stop');

en cambio, tendrá una atenuación muy baja en F0 y una atenuación muy alta en F1.

ingrese la descripción de la imagen aquí

Telaclavo
fuente