Citando el clásico Procesamiento digital de señales de Bellanger : teoría y práctica , el punto no es dónde está su frecuencia de corte, sino cuánta atenuación necesita, cuánta ondulación en la señal que desea preservar puede tolerar y, lo más importante, cómo debe reducir su transición de paso a stopband (ancho de transición).
Supongo que desea un filtro de fase lineal (aunque especifica una latencia mínima, no creo que un filtro de fase mínima sea una buena idea, en general, a menos que sepa muy bien lo que hará con su señal después) . En ese caso, el orden del filtro (que es el número de toques) es
N≈23log10[110δ1δ2]fsΔf
con
fsΔfδ1δ2 the sampling rate the transition width, ie. the difference between end of pass band and start of stop band the ripple in passband, ie. "how much of the original amplitude can you afford to vary" the suppresion in the stop band.
¡Enchufemos algunos números! Especificó una frecuencia de corte de , así que seguiré adelante y reclamaré que su ancho de transición no será más de la mitad de eso, entonces .fs100Δf=fs200
Procedente de la tecnología SDR / RF, 60 dB de supresión suelen ser completamente suficientes: el hardware, sin costos locos, no será mejor para mantener las señales no deseadas fuera de su entrada, así que, no desperdiciemos CPU en tener un filtro fantástico que es mejor de lo que tu hardware puede hacer. Por lo tanto, .δ2=−60 dB=10−3
Digamos que puede vivir con una variación de amplitud de 0.1% en la banda de paso (si puede vivir con más, considere también hacer que el requisito de supresión sea menos estricto). Eso es .δ1=10−4
Entonces, conectando esto:
NTommy's filter≈23log10[110δ1δ2]fsΔf=23log10[110⋅10−4⋅10−3]fsfs200=23log10[110⋅10−7]200=23log10[110−6]200=23(log10106)200=23⋅6⋅200=800 .
Entonces, con sus 200 toques, está lejos, si usa una banda de paso extremadamente estrecha en su filtro, como supuse que lo haría.
Tenga en cuenta que esto no tiene por qué ser un problema: en primer lugar, un filtro de 800 toques da miedo, pero, francamente, solo a primera vista:
- Como probé en esta respuesta en StackOverflow : las CPU de hoy en día son rápidas , si usas la implementación FIR optimizada para CPU de alguien. Por ejemplo, utilicé la implementación FFT-FIR de GNU Radio con exactamente el esquema de especificación de filtro anterior. Obtuve un rendimiento de 141 millones de muestras por segundo, eso podría o no ser suficiente para ti. Así que aquí está nuestro caso de prueba de preguntas específicas (que me llevó unos segundos producir):
- Decimación: si solo va a mantener una fracción del ancho de banda de entrada, la salida de su filtro se sobremuestre drásticamente. La introducción de una decimación de significa que su filtro no le proporciona todas las muestras de salida, sino solo cada ésto, lo que normalmente generaría muchos alias, pero dado que está erradicando toda señal que podría tener un alias, puede con seguridad hazlo. Las implementaciones inteligentes de filtros (decimadores polifásicos) pueden reducir el esfuerzo computacional de M, de esta manera. En su caso, podría diezmar fácilmente por , y luego, su computadora solo tendría que calcularMMM=50120050=24multiplicaciones / acumulaciones por muestra de entrada, mucho más fácil. Los filtros en GNU Radio generalmente tienen esa capacidad. Y de esta manera, incluso fuera de la FIR FFT (que no se presta muy bien a una implementación de decimación polifásica), puedo exprimir otro factor de 2 en el rendimiento. No puedo hacer mucho más. Eso es bastante cercano al ancho de banda de RAM, en mi experiencia, en mi sistema. por
- Latencia: no me importa. Realmente, no lo hagas, a menos que lo necesites. ¿Estás haciendo esto con frecuencias de muestreo de audio típicas? Recuerde, mencionado anteriormente. Por lo tanto, el tiempo dedicado a calcular la salida del filtro solo será relevante para la transmisión de señal en vivo de MS / s. Para DSP con datos fuera de línea: bueno, agregue un retraso a cualquier señal que tenga en paralelo a su filtro para compensar. (Si su filtro es de fase lineal, su retraso será la mitad de la longitud del filtro). Esto podría ser relevante en una implementación de hardware del filtro FIR.96kSs≪ridiculously141MSs
- Implementación de hardware: por lo tanto, tal vez la CPU y el sistema operativo de su PC o dispositivo integrado realmente no le permitan cumplir con sus restricciones de latencia, por lo que está buscando FIRs implementadas con FPGA. Lo primero que notará es que para el hardware, hay un paradigma de diseño diferente: un "Suprimo todo menos1100de mi índice de velocidad de entrada "necesita un ancho de bits grande para los números de punto fijo que manejaría en Hardware (en oposición a los números de punto flotante en una CPU). Así que esa es la primera razón por la que normalmente dividiría ese filtro en múltiples , filtros FIR en cascada, más pequeños y diezmadores. Otra razón es que usted puede, con cada "paso" en cascada, dejar que sus multiplicadores (típicamente, "segmentos DSP") funcionen a una velocidad menor y, por lo tanto, multiplexarlos (número de segmentos DSP) usualmente es muy limitado), usando un multiplicador para múltiples toques. Otra razón más es que especialmente los filtros de media banda, es decir, los pasos bajos que suprimen la mitad de la banda de entrada y entregan la mitad de la velocidad de entrada, son implementables de manera muy eficiente en el hardware (ya que tienen la mitad los grifos son cero, algo que es difícil de explotar en una implementación de CPU / SIMD).