Índice:

Sintonizador: 9 etapas
Sintonizador: 9 etapas

Vídeo: Sintonizador: 9 etapas

Vídeo: Sintonizador: 9 etapas
Vídeo: QUE ES EL SINTONIZADOR 2024, Novembro
Anonim
Image
Image
Lista de equipamentos (tire uma foto do quadro e do Kevin's Comp)
Lista de equipamentos (tire uma foto do quadro e do Kevin's Comp)

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

Visão geral
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

Arquivo Wav
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

Python- Usos de Pylab e Scipy
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)

Vivado (comparador)
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

FOTOS DE BASYS 3 Board
FOTOS DE BASYS 3 Board

Etapa 8: Vivado (decodificador de 7 segmentos com multiplexação)

Vivado (decodificador de 7 segmentos com multiplexação)
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: