Filtro de paso de banda para aislar la nota musical "A2"

Me gustaría diseñar un filtro de paso de banda para aislar la nota musical A2 (110 Hz) de sus notas vecinas con una precisión de medio paso. Esto significa que G2# = 103.83Hzy A2# = 116.54Hzdebe estar en la banda de parada.

En el caso ideal , 110 Hz tendría una ganancia de 0. G2# y A2# estarían en silencio (¿ganancia negativa infinita?), y habría una caída suave desde A2 a cada nota vecina.

¿Cómo puedo seleccionar mi tipo de ventana, determinar cuántos coeficientes son necesarios y calcular esos coeficientes?

Tomé algunos cursos de EE en la universidad, pero estoy lejos de ser un ingeniero eléctrico, así que pida aclaraciones cuando sea necesario.

Referencias:

¿Desea finalmente pasar esa frecuencia, o simplemente detectar su presencia/amplitud?
@ChrisStratton: Por ahora solo quiero verificar su amplitud. Eventualmente, también podría querer determinar otras cualidades de la señal en esa frecuencia.
¿Está buscando crear un filtro digital en un DSP o un circuito analógico?

Respuestas (5)

Según tengo entendido, desea detectar la amplitud del componente de 110 Hz con un ancho de banda inferior a la raíz 12 de 2 en cada lado. Las notas adyacentes que no deben detectarse son 103,8 Hz y 116,5 Hz, que están aproximadamente un 6 % fuera de la frecuencia central.

Primero, ese es un filtro muy ajustado. Esto no va a pasar con la electrónica analógica, al menos no en la banda base.

Puede hacer esto digitalmente muestreando la señal de entrada compuesta y multiplicándola por el seno y el coseno de 110 Hz. Filtre paso bajo cada uno de estos productos para que 6 Hz se atenúe al nivel que desea que se atenúen las notas adyacentes. Luego eleva al cuadrado cada uno de los resultados y súmalos. Ese número único será el cuadrado de la amplitud reciente de cualquier componente de 110 Hz en la señal de entrada. Tenga en cuenta que dado que este filtro tiene un ancho de banda muy estrecho, responderá lentamente. Tardará unos 100 ms en estabilizarse a partir de un paso en la amplitud entrante de 110 Hz.

Si solo desea detectar que el componente de 100 Hz está por encima de algún umbral, puede usar el valor de amplitud al cuadrado directamente. Si necesita la amplitud real, tendrá que sacar la raíz cuadrada del resultado.

He hecho algo similar para detectar frecuencias DTMF individuales en una señal DTMF. Las frecuencias, el ancho de banda y, por lo tanto, las constantes de tiempo son diferentes, pero el algoritmo es idéntico. Aquí hay un resultado que muestra el valor de amplitud al cuadrado que describí anteriormente para tres frecuencias DTMF sucesivas con el algoritmo configurado para detectar la del medio:

Aquí está el fragmento de código que se ejecutó sobre cada muestra de entrada para producir la magnitud al cuadrado (MAGSQ) y la magnitud real (MAG):

  for sampn := 0 to nsamp do begin {una vez para cada muestra de entrada}
    t := muestra * muestra; {hacer tiempo de esta muestra}
    muestra := obtieneamp (t); {obtener muestra de entrada}
    r := t * frecuencia; {hacer fase de frecuencia de referencia}
    ii := trunc(r);
    r := r - ii;
    r := r * pi2;
    prods := muestra * sin(r); {mezclar por frecuencia de referencia seno y coseno}
    prodc := muestra * cos(r);
    filtrar (filtros, prods); {resultados del mezclador de filtro de paso bajo}
    filtro (filtc, prodc);
    magsq := sqr(filt.val) + sqr(filtc.val); {calcular el cuadrado de la magnitud}
    Magsq := Magsq * 4.0; {normalizar para que la entrada 1.0 resulte en 1.0}
    mag := sqrt(magsq); {calcular magnitud lineal}

La subrutina FILTER realiza un filtro de paso bajo de dos polos de la forma habitual. Cada polo sigue el algoritmo estándar:

FILTRO <-- FILTRO + FF(NUEVO - FILTRO)

En este caso FF es 1/128. Dado que es una potencia entera de dos (-7 en este caso), podría realizarse en un microcontrolador mediante un desplazamiento a la derecha de 7 bits.

Creo que el IC decodificador de tonos LM567 utiliza básicamente esta técnica. ti.com/lit/ds/symlink/lm567.pdf

Como señaló Olin, el ancho de banda es muy estrecho para el analógico. Muy.

Un PLL bien puede estar a la altura del desafío.

Suena mucho un trabajo para un amplificador de bloqueo. Lo que podría decirse que está cerca de una forma de hardware de la DFT sugerida.

Vea el final para ver la excelente nota de la aplicación de Jim Williams.


Bloquear amplificadores:

Resumen útil de Princeton

Bloqueo de FPGA completamente digital en el proyecto Princeton del amplificador. Bueno. Verilog.

Implementación de Labview - buena. Mucho material de apoyo y enlaces. Excelente actuación.

Notas universitarias relacionadas con un curso : material útil.

Aquí hay una nota de aplicación de 26 años del difunto gran Jim Williams que PUEDE ser justo lo que quieres. Aplicaciones para un bloque de construcción de instrumentación de condensadores conmutados .

Consulte la figura 4 y el texto en las páginas AN3-3 y An3-4. Si parece de valor potencial, probablemente querrá ver muchos de los otros ejemplos dados.

Que esto sea aplicable depende en parte de si tiene acceso a la fuente A2 que hizo el A2 que se mezcla con otra señal. Si lo hace, esto funciona magníficamente: tiene un "Homodyne". De lo contrario, puede usar un A2 generado localmente para el controlador del helicóptero (alimentación del pin 16 al LTC1043) pero no tiene coherencia de fase. Los resultados PUEDEN seguir siendo útiles. Hoja de datos de LTC1043 : disponible por $ 5,70 en unidades de 1 en Digikey. Este es DIP18. También disponible en SOIC18.

ingrese la descripción de la imagen aquí

Ellos dicen:

Amplificador de bloqueo El enfoque de la portadora de CA que se usa en la Figura 3 puede extenderse para formar un amplificador de "bloqueo". Un amplificador lock-in funciona detectando sincrónicamente la salida modulada por la portadora de la fuente de la señal. Debido a que la información de la señal deseada está contenida dentro de la portadora, el sistema constituye un amplificador de banda extremadamente estrecha. Los componentes no relacionados con la portadora son rechazados y el amplificador pasa solo señales que son coherentes con la portadora. En la práctica, los amplificadores lock-in pueden extraer una señal 120 dB por debajo del nivel de ruido.

La Figura 4 muestra un amplificador lock-in que usa una sola sección LTC1043. En esta aplicación, la fuente de señal es un puente termistor que detecta cambios de temperatura extremadamente pequeños en una cámara de reacción de microcalorimetría bioquímica.

La portadora de 500 Hz se aplica en la entrada de T1 (Traza A, Figura 5). La salida flotante de T1 impulsa el puente del termistor, que presenta una salida de un solo extremo a A1. A1 opera con una ganancia de CA de 1000. También se inyecta deliberadamente una fuente de ruido de banda ancha de 60 Hz en la entrada de A1 (Traza B). Los cruces por cero de la portadora son detectados por C1. La salida de C1 sincroniza el LTC1043 (Trace C). La salida de A1 (Trace D) muestra la señal de 500 Hz deseada enterrada dentro de la fuente de ruido de 60 Hz. La conmutación sincronizada cruzada por cero del LTC1043 en la entrada positiva de A2 (Trace E) hace que la ganancia de A2 alterne entre más y menos uno. Como resultado, la salida de A1 es demodulada sincrónicamente por A2. La salida de A2 (Trace F) consiste en una señal portadora demodulada y componentes no coherentes. La información de amplitud y polaridad de la portadora deseada es perceptible en la salida de A2 y se extrae mediante el promedio del filtro en A3. Para recortar este circuito, ajuste el potenciómetro de fase para que C1 cambie cuando la portadora cruce por cero

LT, AN3, julio de 1985:

http://cds.linear.com/docs/Application%20Note/an03f.pdf

Hay algo llamado 'Algoritmo de Goertzl', que a menudo se emplea en los DSP para detectar frecuencias únicas dentro de una señal de dominio de tiempo, por ejemplo, para captar tonos DTMF. Esencialmente es una transformada de Fourier discreta optimizada, pero es muy simple de programar. Google proporcionará numerosos ejemplos si está interesado.

Nota: Estoy publicando esto más como un FYI, ya que los componentes necesarios tendrían que fabricarse a medida y ser ridículamente caros.

Es realmente más un experimento mental.


Esto es bastante fácil en analógico (ya que el diseño eléctrico es simple. ¿El diseño mecánico? No tanto), suponiendo que pueda adquirir los componentes correctos.

Lo que quieres es un filtro de cristal de baja frecuencia .

El verdadero desafío será adquirir cristales de frecuencia suficientemente baja.

Sé que es posible fabricar osciladores de cristal de cuarzo de menos de 1000 Hz, pero fuera de los receptores militares ELF/VLF (por ejemplo, para comunicaciones submarinas), no hay mercado para ellos, por lo que básicamente no están disponibles.

Sin embargo, si quieres aprender a moler tus propios cristales, ¡sin duda sería un proyecto interesante!


Otra idea interesante sería probar y hacer su propio filtro SAW . Creo que sería posible hacerlo con un par de actuadores piezoeléctricos. Necesitaría una masa resonante de algún tipo (diablos, tal vez use un diapasón real), y probablemente tendría múltiples modos resonantes, por lo que necesitaría un filtrado eléctrico además del filtro mecánico, pero ciertamente sería más fácil de hacer. luego moliendo sus propios cristales de cuarzo personalizados.

Sin embargo, no sé qué tipo de roll-offs podría lograr.

También estaba pensando en formas de hacerlo en analógico como una especie de experimento mental. ¿Has oído hablar de los filtros "N-path"? Aquí hay un enlace (advertencia, matemáticas pesadas): alcatel-lucent.com/bstj/vol39-1960/articles/bstj39-5-1321.pdf Son básicamente una especie de filtro de condensador conmutado, a bajas frecuencias puede usarlos para construya filtros de paso de banda con factores Q en millones.
@ Bitrex - Interesante. Parece que tanto el PDF vinculado como el enfoque SAW están haciendo lo mismo, es decir, usar un sistema mecánico para simular un sistema FIR.
@Bitrex: No quieres Q en millones en este caso. Eso haría que la banda de paso fuera tan extremadamente estrecha que la respuesta sería muy lenta. Piénsalo. 1 millón de ciclos a 110 Hz es mucho tiempo.
@Olin Lathrop: no creo que estuviera diciendo que querrías eso en este caso, solo que esa técnica podría lograr tales rendimientos de filtro.

Si solo desea medir la nota, considere usar la transformada discreta de Fourier evaluada solo en la frecuencia de interés (también hay algunos otros algoritmos, pero este es fácil de describir)

Esencialmente, durante un período de tiempo, multiplica las muestras de entrada por el coseno y el seno de una variable que se incrementa a la frecuencia deseada, y acumula los resultados por separado como los dos componentes de un número complejo. De los totales puede tomar la magnitud (raíz cuadrada de la suma de los cuadrados) y la fase.

Para reducir la detección espuria de otras frecuencias, es posible que desee utilizar una función de ventana, como un coseno elevado (coseno + 1, de -pi/2 a pi/2), que aumentará y disminuirá gradualmente la señal para reducir contaminación del análisis con artefactos de transiciones abruptas de inicio y parada.

Omitiste la parte sobre el filtrado de paso bajo de los productos seno y coseno. Así es como se logra el ancho de banda estrecho. El ancho de este filtro es lo que establece el delta de frecuencia alrededor de la señal deseada que se detectará.
@OlinLathrop: no, no lo dejé de lado, como dije para acumular durante un período de tiempo. La duración del tiempo es lo que establece el ancho de banda, y sí, es una forma de filtro de paso bajo. Si bien es posible crear ese filtro de forma continua, la construcción acumular, registrar, volcar y volver a empezar es más común. Lo que sea apropiado dependerá de la frecuencia con la que se necesite una respuesta; si es más frecuente que el período de acumulación necesario para la nitidez deseada, entonces los períodos tendrán que superponerse, posiblemente hasta el extremo de continuamente.
OK, no me di cuenta de que eso es lo que querías decir con "durante algún tiempo". Sí, ese es un filtro de paso bajo, específicamente un filtro de caja. Hay mejores filtros que requieren menos estado y tienen una mejor respuesta de frecuencia y son casi iguales computacionalmente, pero eso funcionará. No estoy de acuerdo con que el procesamiento por lotes de fragmentos de datos sea más común. Hay buenas razones para no hacerlo. Creo que la mayoría de las veces se hace porque eso es todo lo que sabía quien escribió el firmware.
@OlinLathrop: no, no es efectivamente un filtro de cuadro, dada la función de ventana mencionada en el último párrafo. Las principales razones para el procesamiento de fragmentos son el menor requisito de almacenamiento y computación: para hacer un filtro continuo, necesita algo como FIFO para los toques de retardo. En última instancia, no tiene mucho sentido calcular más resultados de los que utilizará.
No, no necesita un FIFO para "toques de retardo". Eso es para filtros FIR. Vea mi código anterior para ver un ejemplo de procesamiento continuo sin nada de eso. Este problema es más adecuado para un filtro IIR.
No ha publicado la implementación interna de su filtro, por lo que no hay nada que "ver". Y un filtro IIR de tiempo discreto requiere elementos de retardo, aunque no tantos.
Eso debería ser obvio. No estoy haciendo nada inusual allí, solo dos polos de filtrado de paso bajo simple. Sin embargo, como preguntas, agregué a mi respuesta para mostrarlo explícitamente. Cada polo requiere solo una pieza de estado y el cálculo por muestra es simple.