Índice:
- Etapa 1: Lista de equipamentos (tire uma foto da placa e da composição de Kevin)
- Etapa 2: Visão geral
- Etapa 3: Arquivo Wav
- Etapa 4: Python - Usos de Pylab e Scipy
- Etapa 5: Amostragem Python e FFT (mostrar o código e seus resultados)
- Etapa 6: Vivado (comparador)
- Etapa 7: IMAGENS DA BASE 3 Placa
- Etapa 8: Vivado (decodificador de 7 segmentos com multiplexação)
- Etapa 9: Vivado (combinação de componentes)
Vídeo: Sintonizador: 9 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Este projeto foi desenvolvido para fazer um afinador de violão usando Vivado e um display de 7 segmentos. Uma vez que o sintonizador encontra a frequência do som introduzido, o sintonizador irá comparar esse valor a uma lista de valores embutidos em código para frequências exatas que são conhecidas como a frequência padrão para o tom correto de uma nota. Em seguida, o afinador exibirá o quão perto ou distante o som emitido está da nota desejada. O interessante é que uma onda sonora é uma combinação de múltiplas formas de onda senoidais com componentes reais e imaginários. Embora possa parecer difícil de trabalhar para quem não está familiarizado, existem algumas maneiras de analisar uma onda com valores reais e imaginários.
Demo:
Etapa 1: Lista de equipamentos (tire uma foto da placa e da composição de Kevin)
Primeiro, precisamos de uma placa Basys 3 e um computador que suporte os seguintes programas. Garageband / Audacity ou outro DAW - para gravar através de um microfone e exportar arquivos wav
Python - capaz de usar pylab e scipy para amostragem e fft
Vivado - para conectar a placa do Basys 3 e ver visualmente os resultados
Etapa 2: Visão geral
Um sintonizador é feito de alguns componentes importantes: microfone, sampler, FFT (Fast Fourier Transform), comparador, decodificador e display. O objetivo do microfone é capturar a forma de onda de entrada. O amostrador recebe o sinal de saída do microfone e usa o FFT para converter o sinal em uma saída de magnitude em frequências. Então, usando a saída do FFT e encontrando a magnitude máxima e a frequência associada a ela dividida por 2, a frequência associada com a afinação da forma de onda pode ser encontrada. Esse valor pode então ir para o comparador. Em seguida, é comparado a uma tabela de consulta, que já definiu os valores de frequência para tons perfeitos de todas as notas. O comparador recebe uma entrada para a nota desejada, que pode então combinar a nota desejada com a frequência correta da tabela de consulta. Em seguida, o comparador escolherá a nota com a frequência mais próxima da frequência máxima. O comparador irá comparar os dois valores e ver de perto se o valor da frequência é o desejado e, em seguida, colocar esses dados em um sinal. O comparador enviará esse sinal para o decodificador, onde o decodificador escolherá as entradas para os ânodos do display de 7 segmentos para mostrar a precisão da nota.
Etapa 3: Arquivo Wav
Nesta etapa, pegaremos um arquivo wav de uma nota e tentaremos gerar a frequência dessa nota.
Primeiro você precisa de um arquivo wav de uma nota. Neste exemplo, usaremos um arquivo wav estéreo de 16 bits com uma taxa de amostragem de 44,1 kHz. Isso pode ser criado em uma DAW como o Garageband ou baixado. Para este exemplo, uma onda senoidal A4 440 Hz gerada por nós no Garageband pode ser baixada aqui.
Etapa 4: Python - Usos de Pylab e Scipy
Usamos a biblioteca Python para fazer “Fast Fourier transform”. O recurso online nos permitiu imitar e ver o que é útil no pylab e no scipy.
1. Se você não instalou o pylab ou scipy, você precisa fazer isso. Ou o Pycharm tem um recurso muito bom, ao tentar importar pylab ou scipy, há um sublinhado rabiscado informando que você ainda não instalou a biblioteca. Você pode então instalá-los diretamente pressionando a lâmpada vermelha (ela aparecerá quando você colocar o cursor perto do sublinhado ondulado).
2. Usando a função scipy.io.wavfile.read, leia e extraia os dados do arquivo wav de amostra. Percorrendo os dados por pylab.fft, ele retornará a você uma lista de magnitude para a potência.
3. Em seguida, encontre o máximo da potência emitida da lista. Procure o índice da lista onde ocorre a potência máxima, porque é a maneira mais rápida de encontrar a frequência associada a essa potência. Finalmente, retorne a frequência máxima. Como mais tarde precisamos inserir um sinal de frequência binária no código VHDL, podemos converter a frequência em flutuante em binário e retorná-la.
Etapa 5: Amostragem Python e FFT (mostrar o código e seus resultados)
Nesta etapa, os créditos completos vão para este link abaixo para a amostragem e FFT.
samcarcagno.altervista.org/blog/basic-sound…Nosso código:
Após a instalação do pylab e do scipy, os arquivos wav podem ser importados e lidos.
from pylab import * from scipy.io import wavfile
sampFreq, snd = wavfile.read ('440_sine.wav')
Então snd.shape representa os pontos de amostra e o número de canais. Em nosso caso, os pontos de amostra dependem de quanto tempo o arquivo wav é e o número de canais é 2 porque ele é estéreo.
Então snd = snd / (2. ** 15) …… xlabel ('Tempo (ms)')
organiza o sinal de ajuste da hora em uma matriz.
Em seguida, o FFT cria uma matriz em frequência e magnitude (potência)
Então, por meio de um loop while, a magnitude máxima e a frequência associada a ela são encontradas. Essa frequência / 2 representa o tom do arquivo de ondas.
Então, usando nosso próprio código, o inteiro que representa a frequência foi convertido em um número binário de 12 bits e um arquivo de texto foi criado com esse número.
Etapa 6: Vivado (comparador)
Nesta parte do processo, precisamos de um comparador para comparar duas frequências de entrada.
1. Criou um comparador para comparar se a frequência de entrada (receptor) é mais alta, mais baixa ou dentro da nota definida na faixa de margem de 2 Hz. (o afinador de guitarra típico varia de e2 a g5, 82 Hz a 784 Hz).
2. Ao criar uma margem de 2 Hz, usamos um RCA para adicionar “000000000010” à frequência do receptor e verificar onde ainda está muito baixo para a entrada do usuário. Se for esse o caso, sinal de bit único “alto” <= ‘0’, “baixo” <= ‘1’. Em seguida, adicionamos “000000000010” à entrada do usuário para ver se a entrada do receptor é ainda maior do que isso. Se for esse o caso, “alto” <= ‘1’, “baixo” <= ‘0’. Nenhum dos casos retornaria '0'.
3. Uma vez que a próxima parte do módulo precisa de dados específicos de 4 bits para dizer qual é a nota do receptor, não apenas retornando as 2 saídas comparativas (baixa e alta), precisamos retornar o código associado à nota, que se associa com a frequência. Consulte o gráfico abaixo:
C | 0011
C # | 1011
D | 0100
D # | 1100
E | 0101
F | 0110
F # | 1110
G | 0111
G # | 1111
A | 0001
A # | 1001
B | 0010
Usando várias instruções if para categorizá-los em notas e codificá-los para o que é necessário para o decodificador de sete segmentos.
Etapa 7: IMAGENS DA BASE 3 Placa
Etapa 8: Vivado (decodificador de 7 segmentos com multiplexação)
Tudo precisa de um display. É um fator importante que determina o valor de um design. Portanto, precisamos criar um display usando um decodificador de sete segmentos, o que nos permitiria demonstrar nossa capacidade de projetar um sintonizador na placa B. Além disso, nos ajudaria em testes e depuração.
Um decodificador de sete segmentos contém entradas denominadas Nota, baixo, alto e CLK, enquanto produz SSEG, AN e Fiz_Hz. Há uma imagem do diagrama de blocos acima para nos ajudar a entender o projeto.
O objetivo de ter duas entradas separadas de baixa e alta é fornecer ao projetista do comparador a liberdade de manipular se a frequência do som (onda) é mais alta ou mais baixa do que a frequência de entrada (Fix_Hz) que o usuário deseja comparar. Além disso, a saída SSEG representa a exibição de sete segmentos e o ponto seguinte, enquanto o AN representa os ânodos para os quais o conjunto de exibição de sete segmentos acenderá.
Neste decodificador de sete segmentos, o relógio (CLK) desempenha um papel importante na exibição de dois valores diferentes em dois ou mais ânodos diferentes. Como a placa não nos permite exibir dois valores diferentes ao mesmo tempo, temos que usar a multiplexação para exibir um valor de cada vez, enquanto mudamos para outro valor rápido o suficiente para que nossos olhos não possam capturá-lo. É aqui que a entrada CLK entra em ação.
Para obter mais informações, consulte o código-fonte.
Etapa 9: Vivado (combinação de componentes)
Com todos os módulos (receptor python, comparador, decodificador de sete segmentos, etc.) concluídos, nós então montamos usando um módulo maior. Assim como a imagem na seção "Visão geral" mostrada, conectamos cada sinal de acordo. Para referência, verifique nosso código-fonte "SW_Hz.vhd".
Obrigada. Espero que goste.
Recomendado:
Como fazer uma antena dupla BiQuade 4G LTE Etapas fáceis: 3 etapas
Como Fazer Antena Dupla BiQuade 4G LTE Etapas fáceis: Na maioria das vezes que enfrentei, não tenho uma boa intensidade de sinal para meus trabalhos do dia-a-dia. Então. Procuro e tento diferentes tipos de antena, mas não funciona. Depois de perder tempo, encontrei uma antena que espero fazer e testar, porque não é um princípio de construção
Design de jogo no Flick em 5 etapas: 5 etapas
Design de jogos no Flick em 5 etapas: o Flick é uma maneira realmente simples de fazer um jogo, especialmente algo como um quebra-cabeça, romance visual ou jogo de aventura
Sintonizador Ukelele usando LabView e NI USB-6008: 5 etapas
Ukelele Tuner usando LabView e NI USB-6008: Como um projeto de aprendizado baseado em problemas para o meu LabVIEW & Curso de instrumentação no Humber College (Tecnologia de Engenharia Eletrônica), criei um afinador de ukulele que levaria uma entrada analógica (tom de corda do ukulele), encontraria a frequência fundamental
Hackeando o sintonizador de TV para ler fotos da Terra a partir de satélites: 7 etapas (com imagens)
Hackeando o sintonizador de TV para ler fotos da Terra a partir de satélites: Existem muitos satélites acima de nossas cabeças. Você sabia que usando apenas o seu computador, sintonizador de TV e uma antena DIY simples, você pode receber as transmissões deles? Por exemplo, imagens da terra em tempo real. Vou te mostrar como. Você vai precisar de: - 2 w
Consertar uma corda do sintonizador de rádio vintage: 11 etapas (com imagens)
Consertar uma corda do sintonizador de rádio antigo: já existem alguns tutoriais muito bons sobre rádios antigos, mas eu tive um problema específico: o rádio liga, o rádio faz barulho e fica mais alto com o botão de volume, mas girar o botão de sintonia não move a agulha ou o chan