Controle de volume

Software e Hardware para linha ARM

Moderadores: 51, guest2003, Renie, gpenga

Controle de volume

Mensagempor jonowsky » 15 Out 2010 22:28

Pessoal, sei que nossa audição funciona de forma logaritmica, minha pergunta é, qual a lógica que devo utilizar por exemplo para criar 10 níveis de volume para um sinal de áudio de 8 bits (0 a 255)?
Avatar do usuário
jonowsky
Byte
 
Mensagens: 148
Registrado em: 26 Mai 2009 15:18
Localização: Rio Grande do Sul

Mensagempor MarcusPonce » 15 Out 2010 23:00

Acho que a maneira mais simples e mais fácil é que cada para cada nível de volume que você diminui você deve dividir a intensidade do áudio por 2.
Dividir por 2 as amostas de áudio é baixar 6dB.
Portanto no volume máximo, vamos chamar de "10", você não faz nada com as amostas.
No volume "9" você divide por 2.
No volume "8" você divide por 4.
No volume "7" você divide por 8.
Etc.
Supondo que você vai controlar o volume no firmware e mandar o resultado da conta para um D/A então fica bem fácil.
O problema é que seu D/A deveria ter pelo menos 16 bits para o audio ficar com a mesma qualidade tanto alto quanto baixo volume.

Uma forma simples de sentir quanto é tirar 6dB do volume é você ficar em frente a um som estéreo tocando música e zera uma caixa de som.
MarcusPonce
Byte
 
Mensagens: 166
Registrado em: 12 Fev 2007 13:58
Localização: Campinas - SP

Mensagempor rcakto » 15 Out 2010 23:06

dependendo do circuito, caso o controle do volume for externo ao MCU, voce poderia colocar um potenciometro logaritimico em serie com a saida do DAC para o amplificador ou em paralelo com o amplificar.. mas sao circuitos a ser bem projetados...

esse potenciometro e meio dificil de se achar mas ele trabalha com a escala de dBs quando voce o gira...
(parado por culpa da faculdade...)Osciloscopio opensource... entre e participe:
http://asm51.eng.br/phpBB/viewtopic.php?t=10710
rcakto
Word
 
Mensagens: 787
Registrado em: 09 Jun 2010 00:57
Localização: vitoria ES

Mensagempor MarcusPonce » 15 Out 2010 23:07

Faltou explicar um detalhe: Se você usar as amostas de 8 bits e o conversor D/A de 16 bits então sempre tem que multiplicar por 256 antes de dividir. Claro que é mais fácil fazer um passo apenas...
E tem que levar em conta o fato que as amostas de audio normalmente são sinalizadas.
MarcusPonce
Byte
 
Mensagens: 166
Registrado em: 12 Fev 2007 13:58
Localização: Campinas - SP

Mensagempor jonowsky » 15 Out 2010 23:14

a idéia é fazer todo o controle digital. O áudio está gravado em 8 bits e o D/A trabalha com 14 bits, então todo sinal que leio desloco 6 casas para a direita <<6 e então jogo no A/D...
Avatar do usuário
jonowsky
Byte
 
Mensagens: 148
Registrado em: 26 Mai 2009 15:18
Localização: Rio Grande do Sul

Mensagempor rcakto » 15 Out 2010 23:27

olha se voce ainda esta projetando, eu sei que tem ICs que tem o controle de volume todo digital utilizando portas i/o de mcu mas se nao me falha a memoria voce iria precisar montar um circuito equalizador que a saida nao tem qualidade pq e basicamente um recistor variando... não um circuito de controle de dBs de verdade...
(parado por culpa da faculdade...)Osciloscopio opensource... entre e participe:
http://asm51.eng.br/phpBB/viewtopic.php?t=10710
rcakto
Word
 
Mensagens: 787
Registrado em: 09 Jun 2010 00:57
Localização: vitoria ES

Mensagempor MarcusPonce » 15 Out 2010 23:30

ok, então nos níveis mais baixos o áudio final vai ficar ruidoso, mas talvez dê para encarar...
Só lembrando que se as amostras são sinalizadas complemento 2, então o bit +sig da amostra (que é o sinal) deve ser copiado em todos os bits mais significativos (na esquerda) do resultado que vai para o D/A quando você fizer as contas.
MarcusPonce
Byte
 
Mensagens: 166
Registrado em: 12 Fev 2007 13:58
Localização: Campinas - SP

Mensagempor jonowsky » 15 Out 2010 23:40

O sistema já funciona bem, com uma qualidade muito boa, só agora estou implementando o volume. Fiz como o amigo MarcusPonce sugeriu, de dividir por 2^n, funcionou muito bem, só nos últimos níveis como ele mesmo disse, ficou ruidoso, mas eliminarei estes últimos níveis... Obrigado Amigos!!!

testei aqui e ficou bala!

Problema resolvido :)
Avatar do usuário
jonowsky
Byte
 
Mensagens: 148
Registrado em: 26 Mai 2009 15:18
Localização: Rio Grande do Sul

Mensagempor MarcusPonce » 15 Out 2010 23:41

A sugestão do rcakto também funcionaria se calcular quais as combinações adequadas para os 10 níveis. Ir de 2 em 2 (6dB em 6dB) é uma possibilidade. Pode ser de 1,5 em 1,5 também, etc.
MarcusPonce
Byte
 
Mensagens: 166
Registrado em: 12 Fev 2007 13:58
Localização: Campinas - SP

Mensagempor MarcusPonce » 15 Out 2010 23:43

Já testou e funcionou, que bacana!
Abraço
MarcusPonce
Byte
 
Mensagens: 166
Registrado em: 12 Fev 2007 13:58
Localização: Campinas - SP


Voltar para ARM

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x