Página 1 de 3

Reprodução de som com PWM (como acabar com zumbido agudo?)

MensagemEnviado: 31 Mar 2010 15:39
por ivan braga
Boa tarde a todos.

Nos últimos dias tenho tentado reproduzir um som via PWM.
A amostra de som que estou tentando reproduzir está gravada há 8khz, 8bits, unsigned e mono.
Na primeira tentativa de reprodução desta amostra configurei o PWM para a 8khz, ou seja, a cada 125us o pino de saída do módulo PWM é configurado com um valor de 8bits desta amostra.
O timbre da voz gravada permaneceu muito próximo do original, porem com um chiado muito agudo durante toda reprodução.
Como quase tudo que pude ler até agora informa que a taxa de reprodução deve ser de no mínimo duas vezes a taxa de aquisição, configurei novamente a saída PWM, porem agora a 16khz e repetindo duas vezes o mesmo byte e rodei o programa, ficando quase a mesma coisa.
Refiz tudo a 24khz, não saiu nada, apenas uns clicks.
E finalmente a 32khz, repetindo quatro vezes o mesmo byte, rodou sem chiado nenhum. Porem o timbre ficou muito grave, como se estivesse rodando lentamente, mais com muito boa definição da palavra.
Resumindo, fiz diversas formas de configurações possíveis no programa com filtros diversos e não consegui chegar a um consenso.
Ou seja, me falta conhecimento e compreensão técnica do assunto.
Como áudio digital é um assunto muito complexo, então peço a algum participante aqui do fórum possa dar uma explanação sobre o assunto, porem de forma reduzida para que eu possa entender.
O que necessito é reproduzir os números de 0 a 9 já gravados em um cartão SD.
Como ler o cartão não é problema, isto já é feito sem problema nenhum.
Para que nada interfira na reprodução uma destas amostras está gravada na memória ROM de um pic18f2620 junto com o programa.
O que realmente preciso é saber como reproduzir as amostras já gravadas o mais fielmente possível dentro deste contexto (8khz, 8bits, unsigned e mono).

Desde já agradeço.

MensagemEnviado: 31 Mar 2010 16:01
por fabim
primo, aliasing.
class D sample rate pwm.

Aliasing, seria o seguinte.
Imagina que tu esta a 8khz sampleando um pwm.
Só que sem nenhum tipo de filtragem. onde a F de corte -3DB = sample rate/2...

O dominio de tensão no tempo, para dada variação, ultrapassa o tempo entre amostras deste som, o que faz criar o aliasing ou ruido over sample..

Sendo assim, para aquisição precisamos de um filtro, a frequencia de corte deste filtro -3DB de preferencia ATIVO é de 8khz-sample/razão_de_2_fourrier_explica = 4khz.

Agora, vem a parte legal.
Eu quero pegar estas amostras, e fazer um Dclass, só que não quero um LC, eu quero um RL para gerar o audio.

Bom, você não pode se esquecer que pwm = onda quadrada que tem um zilhão de armonicos, que fuderizam o som. Então como proceder ?

Facil.

Regra, constante e não quebravel..
A frequencia de portadora de um pwm, não deve ser menor do que 10X , a maxima frequencia de amostragem.
Se sua frequencia de amostragem for de 8khz, seu pwm teria que ser 80khz.. Isso para ter qualidade eu digo.. e evitar batimentos de portadoras...

Ixe fabim, mais o meu PIC não chega a 80khz com 8 bits. Pronto ja perdeu qualidade logo aí..
chega no maximo a 40khz. Bom, ja sabe então que os 4khz de audio em banda passante esta perdendo 3db.
Saindo deste pwm de 40khz portadora, e sample rate de 8khz. tu joga a um resistor de carga, e deste resistor de carga para um FPB igualzinho o que usou na entrada para evitar o aliazing..
so que tem um problema, o sample dos 8khz perdeu -3db , e agora vai perder mais -3db... ou seja.. -6db, o som vai ficar bem grave...

Tem como compensar isso com um equalizador ? não. tu só vai piorar as coisas ainda mais..

Ta entendendo ?

MensagemEnviado: 31 Mar 2010 16:04
por EDSONCAN
Não é muito minha area com PWM, sempre usei DA, mas se voce olhar esse datasheet, vera que a saida e em PWM para alto-falante direto.
http://www.aplusinc.com.tw/data/aivr_da ... 091012.pdf

Esse chip tem na cika e na alcircuit, acho que voce poderia estuda-lo e ver como ele gera o pwm.

A qualidade é lastimavel.

Edson

MensagemEnviado: 31 Mar 2010 16:10
por fabim
ops, ...

MensagemEnviado: 31 Mar 2010 16:31
por vtrx
Se voce só vai reproduzir,use um DAC com fonte simétrica.
Esses 'ruidos' provavelmente é a parte negativa da onda (bytes 00H a 80H) que estão sendo reproduzidos indevidamente.

MensagemEnviado: 31 Mar 2010 16:34
por BolhaDigital
olha só, tem sim uma forma de vc resolver esse problema de ruido utilizando um simples conversor D/A do tipo r2r....

Recentemente eu fiz uma bateria eletrônica com sample rate de 22.050hz x 8bits...
Eu estou gerando uma interrupção via timer 0 ou 1 tanto faz (pic877A) e nessa interrupção eu pego o dado da memória e envio para o DAC R2R, na saida do DAC eu estou usando um filtrinho com O.P. tipo passa baixas (fonte simétrica, porém não haverá problemas para a utilização que vc deseja que reproduzir apenas a vóz, ok)...a reprodução é fiel, sem ruidos....

Até que no meu caso foi um pouco mais complicado porque eu tinha que mixar varias waves ao mesmo tempo e enviar para o DAC...

Bom, estou a disposição para lhe enviar o meu diagrama, ok...

Eu entendo que vc esta desejando utilizar o PWM afim de facilitar o hardware e realmente fica muito mais elegânte, mas eu acredito na minha modesta sabedoria que o melhor processo é utilizar um DAC, quer seja um simples R2r ou um DAC de audio....o que posso te afirmar que o método por PWM é uma espécie de "GAMBIARRA" e o método correto seria utilizar um DAC....

Boa sorte,
vonnilmam

MensagemEnviado: 31 Mar 2010 16:36
por fabim
á , é chato a gente dar pitaco, tipo.
po meu use um R2R, ou seja mais profissional e use um DAC de 12 bits da uXip, com forma de reprodução PCM, e um cap para desacoplamento DC.
tipo o MCP4921...
Mais ultimamente ta brabo, o pessoal da as dicas soluções, e nunca serve.. por isso que eu explico só uma vez, na proxima é so zoação !! hehehe

MensagemEnviado: 31 Mar 2010 17:55
por ivan braga
Antes de tudo, obrigado a todos pelas respostas.

Sendo assim, para aquisição precisamos de um filtro, a frequencia de corte deste filtro -3DB de preferencia ATIVO é de 8khz-sample/razão_de_2_fourrier_explica = 4khz.


Essas amostras foram colhidas usando a placa de som do PC, então esta regra também se aplica neste caso? Desculpe a ignorância, é que já li tanto sobre tanta coisa que os neurônios estão meio falhos.
Antes que me sacaneie, sei que na placa de som tem filtro, a pergunta de maneira direta é. Está regra acima se aplica exatamente desta forma nessa situação?

Ixe fabim, mais o meu PIC não chega a 80khz com 8 bits. Pronto ja perdeu qualidade logo aí..


Estou usando o pic configurado a 32Mhz, e aplicando a formula no datasheet tenho uma resolução ‘8.64bits’ com o PWM a 80khz, então está dentro do contexto.

tu joga a um resistor de carga, e deste resistor de carga para um FPB igualzinho o que usou na entrada para evitar o aliazing..


Poderia dar um exemplo do esquema resistor-FPB, pois não usei isto na entrada. “não diretamente, pois foi feito via placa de som”.

Não é muito minha area com PWM, sempre usei DA, mas se voce olhar esse datasheet, vera que a saida e em PWM para alto-falante direto.
http://www.aplusinc.com.tw/data/aivr_da ... 091012.pdf


Obrigado pela sugestão, vou verificar.

Se voce só vai reproduzir,use um DAC com fonte simétrica.
Esses 'ruidos' provavelmente é a parte negativa da onda (bytes 00H a 80H) que estão sendo reproduzidos indevidamente.


Obrigado pela sugestão, mas um DAC e uma fonte simétrica aumentam mais o tamanho do hardware e encarece o conjunto, então como não preciso de nada HI-FI, ainda opto pelo PWM.

mas eu acredito na minha modesta sabedoria que o melhor processo é utilizar um DAC, quer seja um simples R2r ou um DAC de audio....o que posso te afirmar que o método por PWM é uma espécie de "GAMBIARRA" e o método correto seria utilizar um DAC....


Já fiz um teste uma vez com R2R, e sei que seria o ideal neste caso por sua simplicidade e eficiência, porem não tenho pinos disponíveis para uma rede R2R de 8bits, então teria que trocar de do 18f2620 para o 18f4620. Tentarei o maximo me manter no 18f2620.

Mais ultimamente ta brabo, o pessoal da as dicas soluções, e nunca serve.. por isso que eu explico só uma vez, na proxima é so zoação !! hehehe


Sem “stress” “primo” , todos tentam ajudar, o grande ‘X’ é tentar enquadrar dentro das possibilidades e necessidades todas as opiniões. Algumas são viáveis, outras possíveis e as vezes uma ou algumas são o ‘X’.

Obrigado a todos, e continuo lendo sugestões, pois no meu caso o que parece realmente mais se encaixar no contexto é o PWM, pois tenho o modulo a disposição, tenho o pino a disposição e tenho disposição de aprender.
T+...

MensagemEnviado: 31 Mar 2010 18:09
por vtrx
ainda opto pelo PWM

Tomara que seja viável utiliza-lo...
Ja leu isto?
http://www.electronics-related.com/usenet/design/show/63943-1.php

Re: Reprodução de som com PWM (como acabar com zumbido agudo

MensagemEnviado: 31 Mar 2010 18:33
por MOR_AL
ivan braga escreveu:Boa tarde a todos.

Nos últimos dias tenho tentado reproduzir um som via PWM ....
Na primeira tentativa de reprodução desta amostra configurei o PWM para a 8khz, ou seja, a cada 125us o pino de saída do módulo PWM é configurado com um valor de 8bits desta amostra.
O timbre da voz gravada permaneceu muito próximo do original, porem com um chiado muito agudo durante toda reprodução. .

Ivan!
Se este chiado tivesse uma frequência fundamental superior à frequência máxima do seu sinal, e você pudesse medi-la, além da amplitude média deste chiado e a amplitude média do seu sinal, talvez eu pudesse projetar um Filtro Passa-Baixas (FPB) para você.
Obs.:
Considerar que o seu sinal seja de voz (+/- de 300Hz a 3400Hz).
Como o seu sinal PWM possui apenas valores positivos, e o seu sinal possui valores positivos e negativos, seria necessário incluir um Filtro Passa-Altas (FPA) também.

Responda às minhas três perguntas que vamos ver o que se pode fazer.
[]'s
MOR_AL

MensagemEnviado: 31 Mar 2010 19:00
por msamsoniuk
vc nao pode configurar para o pic gerar continuamente a saida pwm independente de vc atualizar ou nao o valor do contador?

por exemplo, seta ele para gerar a saida na frequencia maxima possivel (provavelmente clock/256) e mantem ele gerando continuamente. entao atraves de um timer de 8KHz vc soh atualiza o valor desse contador conforme a saida de audio que deseja. se vc estiver utilizando 20MHz, por 256 vc vai ter 78125 pulsos pwm/segundo (se nao me falha a memoria, a cadencia tipica utilizada nos amplificadores classe D costuma ser entre 100 e 500kHz, se nao for mais!). a correlacao com a saida de 8KHz nao eh importante, o que vai ocorrer eh que vc vai ter uma media de uns 9 ou 10 pulsos pwm repetidos antes de atualizar o valor.

a cadencia alta na saida pwm evita que as pessoas escutem a propria saida pwm, a troca do valor em funcao de um tempo fixo (8KHz) impede que o audio tenha distorcao de frequencia.

a parte das criticas, pwm eh certamente a melhor forma de dar saida para audio digital, pq vc consegue jogar em um amplificador classe D sem distorcao.

MensagemEnviado: 31 Mar 2010 19:14
por tcpipchip
fabim escreveu:primo, aliasing.
class D sample rate pwm.

Aliasing, seria o seguinte.
Imagina que tu esta a 8khz sampleando um pwm.
Só que sem nenhum tipo de filtragem. onde a F de corte -3DB = sample rate/2...


Sempre eu aprendendo mais....

MensagemEnviado: 31 Mar 2010 20:31
por BolhaDigital
QUÍ...NARQUIA, MEU...

Olha só amiguinho! Se vc não tem pinos suficientes para ligar um r2r, porque não utiliza um shift register do tipo 4094 que bem baratinho e comum, há uma frequencia de clock de 20mhz (se não me falha a memo) vc terá um tempo de despejo de aproximadamente 20 us (se vc quiser posso te enviar uma ROT em assembler que executa bem rapidinho esse 4094)...

Olha só, eu não quiz dizer que o PWM é ruim para esse tipo de aplicação, só disse que não seria o mais indicado para o nosso amigo, eu estou imaginando que ele quer um reprodutor de vôz que boa ou ótima qualidade...outro detalhe, se PWM fosse mais adequado em relação ao DAC convencional com certeza existiram na prateleira muitos e muito tipos de DACs PWM...

Eu falo isso porque já testei na pratica e falo com convicção que o método DAC r2r (no caso do nosso amigo tá bom galera! antes que me dêem algum exporro) é a melhor opção.

Uma boa dica também (se é que vc ainda não fez isso) colha suas amostras de audio com sua placa de PC ou pegue na net essas amostras (tem zilhões a disposição e de tudo quando é jeito), depois passe para o formato PCM atravé do sound forge ou outro programinha como o ACONAS ou o AdSynt....se vc quiser a versão antiga do aconas que vem com o transformador se assim posso dizer do formato wav para pcm....

HÁ RAPAZ, ACABOU DE PASSAR PELA MINHA CUCA UMA POSSÍVEL COISA PARA ESSE RUIDO, PODE SER, LÍ EM ALGUM LUGAR ISSO: É O SEGUINTE, QUANDO VC JOGA UMA WAVE COM O FORMATO .WAV DIRETAMENTE NUM DAC SEJA ELE PWM OU R2R OU CHIPADO, EXISTE O PROTOCOLO DO ARQUIVO .WAV JUNTO COM A AMOSTRA, ISSO PODERIA GERAR RUIDOS! LEVE ESSA OBSERVAÇÃO EM CONSIDERAÇÃO ANTES DE FAZER ALTERAÇÕES NO SEU SISTEMA, EXPERIMENTE PASSAR O SER ARQUIVO DO FORMATO .WAV PARA O FORMATO .PCM E REPRODUZA O TREM, VEJA SE O RUIDO NÃO SOME!

MAIS UMA VÊZ ESTA A SUA DISPOSIÇÃO ESSE PROGRAMINHA DA ACONAS É SÓ ME ENVIAR UM EMAIL QUE TE ENVIO O CARINHA...

MCUPICC@HOTMAIL.COM

MensagemEnviado: 31 Mar 2010 20:36
por BolhaDigital
Outra coisa, eu concordo com o raciocinio do marcelão...

A idéia dele de fazer o pwm em 78 kilo é mais adquada, quanto maior a frequencia da portadora menor será o possibilidade do sinal interferir no audio...

Vem cá explica de novo como vc esta fazendo o processo, vou testar aquí..ok,

MensagemEnviado: 31 Mar 2010 21:25
por fabim
BolhaDigital escreveu:Outra coisa, eu concordo com o raciocinio do marcelão...

A idéia dele de fazer o pwm em 78 kilo é mais adquada, quanto maior a frequencia da portadora menor será o possibilidade do sinal interferir no audio...

Vem cá explica de novo como vc esta fazendo o processo, vou testar aquí..ok,

ca7te.. porque ideia do marcelo samsonite ?
Quer dizer que eu sou um inutil é ? Eu escrevi a mesma coisa que o sam, só que explicando como proceder, aí o japa vem fala o mesmo que eu , e tu concorda com ele?
Por essa e outras que eu só faço zuação mesmo .. hehehe sou um inutil mesmo..
Depois se eu falar que tenho um 1766 com pwm a 10 bits e 100khz+/-.. e saindo para um buffim de 12V e 2.5A da uXip alimentado, que vai para um LC.. Q o proex me explicou algumas coisas que eu desconhecia. cuja são detalhes... tipo se for usar um DAC com samples comerciais, a frequencia do pwm deve ser multiplo positivo do sample rate, para evitar batimentos.. etc

á sei lá, o mundo é muito cruel, e eu com essa mania de fazer 10 coisas e aprender 10000.. é F***.

Licensa, cansei do assunto..