Conversão de 16 para 12 bits?

Software e Hardware para uC STM

Moderadores: andre_luis, 51

Conversão de 16 para 12 bits?

Mensagempor Vonnilmam » 16 Fev 2018 19:04

Olá a todos os colegas,

Meus caros, estou com uma dúvida cruel, para variar...peço a ajuda de vocês.

Eu tenho uma amostra em 16 bits, sample rate de 44.100hz...até aí tudo certinho.

O problema é que quero converter esses 16 bits em 12 bits, alguém sabe como eu faço isso ou tem uma dica de algum programa que o faça.

Pois no soundforge só há conversões (geração de novas amostras) em 8, 16, 24 bits...

Eu vou utilizar o DAC do STM32 que é de 12 bits para fazer a conversão D/A...

Obrigado
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Conversão de 16 para 12 bits?

Mensagempor eletroinf » 16 Fev 2018 21:05

Como provavelmente no armazenamento e manuseio dos dados tanto faz se é 12 ou 16 bit, tu vai sempre ocupar 16 bit (2 bytes), uma solução é passar para o DAC o valor shiftado pra direita.
Exemplo:
Se a função que escreve do DAC é void DAC_Write(unsigned int16) e o valor que tu quer escrever, de 16 bit, está armazenado em ValorDAC, tu pode utilizar, na chamada:
DAC_Write(ValorDAC >>4);
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Conversão de 16 para 12 bits?

Mensagempor andre_luis » 16 Fev 2018 23:10

Inicialmente pensei na mesma coisa, mas achei que seria meio obvio e ofendido ele me desse uma resposta malcriada :lol: e presumi que na verdade ele pudesse estar procurando algo que compactasse os valores lidos num frame maior, sem desperdicio dos 4 bits à esquerda, e deu preguiça de responder :mrgreen: mas também posso estar errado e ser apenas o shift á direita, enfim...
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Conversão de 16 para 12 bits?

Mensagempor eletroinf » 17 Fev 2018 09:35

kkkkkkkkkkkkkkkkkkkk
Eu fiquei com a mesma dúvida que tu escreveste aí Andre, mas só descobriria escrevendo o que eu escrevi, vamos ver se vem uma voadora...
:mrgreen:
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Conversão de 16 para 12 bits?

Mensagempor Red Neck Guy » 17 Fev 2018 10:54

Você pode fazer um programa que leia o stream de audio e converta para 12 bits, algo como: var_12 = var_16>>4;
Porém, como o armazenamento em memoria é justificado em 8 bits, você não ganharia nada com isso, pois apenas teria bits zerados dentro do stream(Tá bom, economizaria a operação de shift em real time....)
ASM51 descanse em paz!
Avatar do usuário
Red Neck Guy
Dword
 
Mensagens: 1968
Registrado em: 12 Out 2006 22:24

Re: Conversão de 16 para 12 bits?

Mensagempor pamv » 17 Fev 2018 11:38

Aqui tem um tutorial rápido sobre o DAC do STM32 com um exemplo em C no final

http://embedded-lab.com/blog/stm32-digi ... erter-dac/
pamv
Word
 
Mensagens: 842
Registrado em: 20 Jun 2016 21:47

Re: Conversão de 16 para 12 bits?

Mensagempor Vonnilmam » 17 Fev 2018 21:05

Obrigadão a todos...

Mas vejam só, por enquanto estou apenas nas teorias, ainda vou colocar o treco todo para "rodar"...mas antes quero entender os procedimentos corretos...

Eu também pensei em shiftar para a direita, no caso seriam 4 casas apenas, que no frigir dos ovos, 4 casas seriam perdidos nada mais nada menos que 16 pontos menos significativos na resolução
final, até ai eu acho que não seria percepitivel (bom, obviamente vou reproduzir uma senoide em cima desse DAC), se valendo de que a resolução original é de 16bits de audio (ou seja são 65536 pontos de resolução), perder apenas 16 pontos é quase nada, eu ACHO!!!

Só para exclarecer, vou repoduzir uma onda senoidal que esta "sampleada" em 16 bits, 44100hz, localizada em memória, ok...

Vou fazer o teste no PC, para ver o que acontece e retorno os resultados...

Obrigado :D
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Conversão de 16 para 12 bits?

Mensagempor Vonnilmam » 18 Fev 2018 11:11

Então, fazendo o deslocamento a direita, no caso 16 pontos dentro de um sample de 16bits, realmente não afetou o som, pelo menos aparentemente.

Agora e se eu desejar criar uma nova amostragem com resolução de 12 bits, para não ter que fazer essa matemática, minha pergunta é:

Alguém sabe se é possível fazer isso no sound forge ou em outro programa.?
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Re: Conversão de 16 para 12 bits?

Mensagempor Guri » 19 Jan 2019 01:04

Agradecendo a todos os amigos,

Realmente, a técnica em principio seria deslocar a direita os dados para reduzir a resolução mais alta ou fazer ao contrário para alocar o buffer menor em outro maior.

A perca de dados é muito pequena e não provoca danos ao produto final.

Vejam aqui um exemplos de uma senoide criada em 16bits e reajustada para uma saida DAC de 12 bits, no meu caso foi utilizado um ARM m0.

https://soundcloud.com/user-452496119/p ... synth-m114

Obrigado
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais


Voltar para STMicroelectronics

Quem está online

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

x