Hacer que el analizador de espectro sea incorrecto en ATtiny85

Todos critican, pero difícilmente discuten con éxito. Y solo eso [agp.cooper] tiene con sus analizadores de espectro basados ​​en ATtiny85.

La forma "normal" de construir un analizador de espectro es recolectar un montón de muestras y lanzar una Transformada Rápida de Fourier (FFT) en todas ellas con un solo disparo. Como su nombre lo indica, la FFT es rápida y el resultado son las partículas de frecuencia de los datos probados. [agp.cooper]La forma "incorrecta" de hacerlo es necesitar el algoritmo de Goertzel, que se utiliza para detectar la intensidad de una frecuencia en particular y escanear a través del rango de frecuencia de interés. Es mucho más lento que una FFT, pero lo que es más importante para el ATtiny85 que implementa esto, requiere menos RAM.

El resultado no es instantáneo ni por un solo momento, como sería con FFT. Por ejemplo, su última versión del software necesita casi 3/4 de segundo para realizar 61 mediciones en 500 Hz de ancho de banda y enviar los datos a una pantalla LCD. Esto es demasiado lento para datos de señal rápida, pero es casi adecuado para observar el camino, como los componentes de frecuencia de una cuerda de guitarra pulsada que se mojan.

Estamos seguros de que hay alguna versión del código FFT que encaja dentro de estos microcríticos y logrará hacer el trabajo más rápido, y si alguno de ustedes puede probarlo, se lanza el guante. Pero requerirá mucho trabajo en comparación con simplemente deslizar el algoritmo de Goertzel hacia arriba y hacia abajo, y sinceramente, creemos que es genial que este método funcione en absoluto.

  • Bien dice:

    A mí me suena bien, así que lo hicieron antes del primer fft. Se le llamó filtro de banco.

    • BrilaBluJim dice:

      También es como funcionaban los analizadores de espectro analógicos "en la guerra *": escaneando un rango de frecuencias escaneando el oscilador local en un receptor superheterodino y operando la FI a través de un "filtro de ancho de banda de resolución" seleccionable.

      * donde "guerra" podría significar cualquier guerra de la segunda guerra mundial durante la mayor parte de la guerra fría.

      • Steven-X dice:

        Me hizo pensar en el confiable HP 141T o el ALR-20

        • BrilaBluJim dice:

          Sí, casi me lees la mente: tengo un 140S junto a mi escritorio en este momento (ese es el tubo redondo no almacenable con fósforo P7, en lugar del tubo de almacenamiento rectangular del 141T) con la sección de RF 8554B. Sigue siendo una gran máquina. Nunca me metí en el hardware aéreo, por lo que ALR-20 no significa nada especial para mí. Hasta la llegada de un DSP bastante capaz, casi todo funcionaba de esa manera. Sin embargo, tuve la oportunidad de trabajar con un procesador FFT en 1976, lo cual fue bastante impresionante: era una máquina de $ 100k en ese momento, en comparación con $ 10k para un analizador superhet convencional.

      • Coleccionista de basura dice:

        Si por Back in the War te refieres a hoy. Agilent tiene un muy buen ensayo disponible públicamente sobre el tema. Creo que se llama "Medición de ruido por analizador de espectro" y detalla por qué querría utilizar un tipo de analizador frente a otro y por qué todavía venden analizadores de barrido de alta calidad en un mundo de dispositivos FFT. Sin embargo, le advertiría que el documento técnico tiene aproximadamente 80 páginas y, a medida que lo lee, sugieren al azar cuál de sus productos sería el más adecuado para cada medida.

    • fonz dice:

      no del todo correcto, el algoritmo de Goertzel es básicamente una forma de calcular DFT (FFT) en una sola frecuencia muestra tras muestra, cuando todo lo que necesita es amplitud.

      • duh dice:

        Según recuerdo, también da una fase.

        • BrilaBluJim dice:

          Lo hace. DFT usa dos filtros separados, uno que usa cosenos y el otro seno, para obtener elementos reales + imaginarios. Necesita hacer un cálculo adicional (sqrt (real ^ 2 + imag ^ 2)) para extraer un tamaño de él, y otro (arctangent (real / imag)) para obtener una fase.

  • Alfombrillas S dice:

    Eso usa eta85 muy bien. ¡Muy genial!

  • sebastianfoerster86 dice:

    ¡Para!

  • notarealemail dice:

    Tengo que preguntar por qué Attiny84 es tan diferente al 85, ¿o no?
    Apareció después del 85 y tiene más pines.
    Solo quiero un micrófono simple para crear un control remoto IR o hacer parpadear los pines suficientes para un reloj.

    El analizador de espectro se ve muy bien. No sabía que esto podría lograrse con un chip tan pequeño.

    • Elliot Williams dice:

      Son bastante diferentes. El primer dígito es el ram intermitente y el último es un número de serie.

      Entonces, 25.45 y 85 son los mismos pines / dispositivos laterales con diferentes relámpagos. 44, 84 es una serie diferente con la misma cantidad de rayos. Es confuso en este momento, con el 841 y así sucesivamente ... Faltan números.

      La serie 44/84 es una gran b / c, tienen muchos pines. El Tiny45 / 85s tiene un temporizador / contador rápido que se obtiene mediante PLL del reloj de la CPU y puede ejecutarse con bastante rapidez, lo que lo hace útil para USB que supera los bits.

      • notarealemail dice:

        ¡Supongo que entonces compraré algunos de ambos! 🙂
        Los diagramas de comparación que comparan micrones no son particularmente útiles para un principiante.

      • esotérico dice:

        Espera, están usando el temporizador de alta velocidad para bitbang-USB, ¿verdad? Lo vi usado para el enlace FPD;)

        Un dispositivo similar al 85 en un mayor número de pines sería el 861.
        Pero con pines intermitentes, probablemente no necesite un temporizador de velocidad de 64MHz, ni 3 canales PWM con generadores de lapso de tiempo y salida libre. (Y, a partir de ahí, la serie AT90PWMx).

        Seguro que esta puede ser la "forma incorrecta" de hacer este proyecto, pero muestra que podría manejarse fácilmente, p. Busque una serie de frecuencias específicas (DTMF) sin la luz superior de FFT.

        No solo un truco decente que saca mucho de lo pequeño (memoria y calculadora), sino también una buena introducción a otra herramienta que otros quizás no conozcan.

        • esotérico dice:

          Momentos como estos, sería bueno tener una opción editorial ... Pero el problema del correo electrónico no real sobre las cartas de comparación es un problema. Ha pasado mucho tiempo desde que me di cuenta de que una forma de buscar sus necesidades es buscar los archivos de título para los nombres de registro que coincidan con sus necesidades: (por ejemplo, ¿necesita PLL? 'Grep PLL / usr / lib / avr / include / avr ') Pero eso no ayuda mucho al comparar las diferencias de características generales.

  • BrilaBluJim dice:

    Algunas cosas, los procesadores de 8 bits simplemente no están destinados a serlo. Actualmente, puede obtener un chip de 32 bits basado en ARM por casi el mismo precio que un microcontrolador de 8 bits. En realidad, solo es cuestión de elegir el chip adecuado para el trabajo. Si desea matemáticas rápidas, elija el motor de 32 bits. Pero si desea que las matemáticas sean fáciles y no se preocupe demasiado por la capacidad de respuesta de la pantalla, utilice un kernel de 8 bits. Solo espera vivir con sus límites.

    Pero supongamos que hay alguna razón de peso para usar un procesador diminuto. Quizás el poder sea un factor importante, por ejemplo. Lo que. Aquí hay algo más a considerar:

    Mirando la pantalla, parece ser un espectro de audio, con pasos horizontales de 100 Hz / píxel. Lo cual es bueno si desea que la pantalla sea lineal en frecuencia. Además, FFT también te atrapa, y no es lo mejor para una pantalla que muestra información de sonido, porque nuestros oídos no detectan el tono de forma lineal, sino logarítmicamente. Entonces, en lugar de tener una pantalla con una escala horizontal lineal en Hz / píxel, podría ser más útil dedicar una cierta cantidad de píxeles a cada octava. La pantalla usa 60 píxeles de su espacio horizontal para la frecuencia, por lo que podría dividir esto en tres décadas de frecuencia, para obtener 20 píxeles que cubran cada uno 10-100, 100-1k y 1k-10k Hz, que puede subdividir aún más logarítmicamente, por lo que que cada intervalo de frecuencia es 1/20 de una década. Alternativamente, puede dividir la banda en octavas y dedicar cada rendija horizontal a una fracción de octava, pero es mucho más fácil etiquetar una escala en décadas. No he investigado demasiado el algoritmo de Goertzel (TL: DR), pero si lo entiendo, es un filtro digital que puede aplicar en cualquier frecuencia, por lo que podría usar una tabla para la frecuencia central y el ancho de banda de lo digital. filtro para cada paso horizontal, de modo que cada paso de frecuencia solo necesite el tiempo necesario para el ancho de banda de esa ranura. Esto requeriría más ciclos de CPU para las ranuras menos frecuentes y mucho menos para las más altas. No estoy seguro de que esto termine siendo más eficiente que la escala de frecuencia lineal, pero creo que haría que la pantalla fuera más útil.

    • BrilaBluJim dice:

      En ese último párrafo, apunto principalmente a la pantalla de "espaciado de frecuencia completo". Por supuesto, al cancelar una señal, desea una escala de frecuencia lineal.

    • RW versión 0.0.2 dice:

      Espera, ¿quieres decirme que los relojes más rápidos y más bits obtienen una resolución más alta?

      Gracias Capitán. Obviamente.

      • Elliot Williams dice:

        Si usara un chip más rápido (con una unidad deslizante) definitivamente NO SERÍA UN HACK !! 1! Pero sí, esa es la forma "correcta" de concluir en el título. Tenga 60 píxeles, haga FFT / DFT con 64 contenedores, descarte 4. Finalizado.

        Sin embargo, imagine el titular: "Un ingeniero toma una decisión prudente: implementa FFT de una manera obviamente racional". O si quisiéramos hacer clic en: "Ideas de proyectos aburridas y apropiadas: ¡Nunca creerás lo que está mal! (Nada").

        "¡El hombre pone obstáculos al eliminar los límites (arbitrarios)!" ¡Oh, podría continuar!

        Mucho de lo que publicamos es estúpido y divertido y no tiene ningún sentido. Algo es brillante. [agp] solo quería jugar con algo de Goerzel y llevarlo a su punto de ruptura. Misión cumplida.

      • BrilaBluJim dice:

        Al parecer, no fue lo suficientemente obvio para el creador de este proyecto.

  • pacman10101 dice:

    estás apuntando al camino correcto.

  • bistec dice:

    La matemática podría optimizarse para reducir el tiempo de ciclo. Optimizaciones fáciles como realizar el cambio a la derecha en lugar de dividir por 2, etc. (según MSB, LSB, etc.)
    Conocer la arquitectura del chip también es muy importante. Por ejemplo, utilicé un PIC18F que tenía un multiplicador de dispositivo pero no un divisor. Las únicas dos secciones fueron / 10 y / 5, que tomaron alrededor de 500 ciclos de reloj cada una. Reduje esto a aproximadamente 40 al tener mis propias funciones auxiliares, que podía llamar, que usaban la multiplicación y el cambio para obtener el valor correcto.
    Dividir por 10 en realidad se multiplicó por 103 y cambió 10 a la derecha (dividiendo por 1024). Aparecen errores de sonido envolvente si su valor inicial es superior a 178 pero funcionó en el rango que estaba mirando.
    Nuevamente dividiendo por 5 multiplicado por 103 y desplazado 9 hacia la derecha (dividiendo por 512). Los errores circundantes aparecen desde 174, pero nuevamente el número más grande que compartí fue 60.

  • Fred dice:

    Desde hace algunos años, he querido producir un analizador de espectro de sonido que produzca resultados logarítmicos utilizando técnicas digitales, en lugar de filtros analógicos. Como ha demostrado BrightBlueJim, nuestros oídos responden a la frecuencia logarítmica (así como al volumen). Miré el algoritmo "Q constante", pero nunca encontré la implementación en nada más que en Matlab, y todavía no tengo mi puerto de Matlab para mi microcontrolador.
    Esto podría acercarme un paso más ... nunca antes había oído hablar del algoritmo de Goertzel. El análisis “adecuado” de las señales de sonido requiere una resolución de tiempo baja a frecuencias bajas (respuesta lenta) y una resolución de tiempo alta a frecuencias altas (respuesta rápida).
    Leyendo un poco sobre cómo funciona Goertzel, supongo que para hacer un análisis adecuado, uno tendría que calcular una pila completa de Goertzel en paralelo. Al no ser matemático, tal vez eso sea lo que hace la 'Q constante' de todos modos ...

Ricardo Prieto
Ricardo Prieto

Deja una respuesta

Tu dirección de correo electrónico no será publicada.