Ajuda com sine wave

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor barboza » 22 Jun 2009 09:12

proex escreveu:Se o acumulador do seu DSP é do tamanho da palavra de audio, nunca some varias amostras ao mesmo tempo, somem 2 amostras e dividam por 2, somem esse resultado com a proxima amostra e dividam por 2, e assim sucessivamente.

.


o problema desse processo é que não entrega no final a media das entradas.
E o erro ainda depende da ordem que foram processadas as entradas.


Ex. já citado:

10, 3, 2 que na media seria 5.

(10+3)/2 = 6,5 -> (6,5+2)/2 = 4,25

ou

(10+2)/2 = 6 -> (6+3)/2 = 4,5

ou

(3+2)/2 = 2,5 -> (2,5+10)/2 = 6,25
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor fabim » 22 Jun 2009 11:10

Outra coisa interessante, e que não podemos esquecer para que o processo simples de Soma e subtração, cuja funcione sem distorção.

Seria ADC´s que façam a conversão simultânea...

Exemplo capturar em 22KSPS.

Vamor por exemplo por interrupção.

A cada (1/22000)-(ciclo de interrupção - tempo para acionar os dois ADC)
Acontece a interrupção, o cabra aciona os dois ADC´s simultaneamente.

Volta para o main, espera acabar a conversão dos dois, soma-os divide por dois, pronto... (isto antes do proximo processo de captura).

Se por um exemplo; acontece interrupção;
a = adcread(x);
b = adcread(y);
c = adcread(z);
...
...
..
..
..
j = adcread(bla);

Observe que a captura dos canais ADC, vão acontecer com atraso, aí ferroneamente o sinal...
O tempo de captura do décimo canal vai estar 9*Tconv atrazado do primeiro..............
Se falarmos de um DSP de tempo de velocidade de conversão altissima cuja o atraso do primeiro para o ultimo for de alguns microsegundos, não sera perceptivel.....Caso contrario.....

Por exemplo daria para fazer alguns testes usando arm2368, que tem dois canais ADC de 10 bits..
Start primeiro, Start segundo.. A diferença do acionamento será de nS...

humanamente impossivel de distinguir.....

tipo, o ARM tem ADC 10b e DAC 10b..

aconteceu a interrupt por tempo. (1 / 22000)

hardware_dac = som;

a = adcread1(1);
b = adcread2(2);
som = (a+b)/2;
return();

daria dessa forma pra fazer um teste, e saber na zoreia se há diferença perceptivel, no pic mesmo em 12 mips e dac externo eu nem me atrevo, pois sei que vai ser perda de tempo...

fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor EDSONCAN » 22 Jun 2009 11:36

Lendo esses posts, vou trocar o ouvido e colocar um link direto do DA com o cerebro, pois o coitado do ouvido não tem condições fisicas de acompanhar tanta tecnologia.

Edson
EDSONCAN
Word
 
Mensagens: 876
Registrado em: 11 Out 2006 14:11

Mensagempor Vonnilmam » 22 Jun 2009 12:11

Venhamos e convenhamos, essa "PIADA" do edsoncam veio vem a calhar...rsrsrs!!!!


Mas existe um fundo de sabedoria nela! Realmente trata-se de uma tése de universidade tal técnica, tal técnica se podemos assim dizer, consiste em coisa de gente grande, a área de som e musica audio em geral é algo muito complexo.

Todas as idéias propostas nesse debate foram todas proveitosas e eu acredito que poderá sair daquí um bom projeto! Que sem dúvida será postado.

A idéia de se utilizar um DAC com buffer maior afim de não haver overflon, também passou pela minha cabeça, porém seria uma forma brasileira de fazer uma gambiarra "jeitinho", eu acredito que o melhor é procurar entender de fato como proceder corretamente no intúito de desenvolver a técnica.

Assim sendo, eu até agora achei muito interessante a formula: SOMA TUDO E DIVIDE PELO NUMERO DA SOMA e também pelo nova dica proposta pelo proex: SOMA DUAS AMOSTRAS E DIVIDE POR DOIS, PEGA ESSE RESULTADO SOMA COM MAIS OUTRA AMOSTRA E DIVIDE POR DOIS NOVAMENTE E SUSSECIVAMENTE ATÉ O LIMITE DE ENTRADAS.

Até o momento o debate esta muito bom, em relação ao foco, eu acho que não esta desviando-se, vamos entender que o inicio foi relacionado ao fato de gerar mais de uma senoide (seja via tabela ou formula) "o processador a ser utilizado tanto faz, pode ser amega, dspic, msp4, etc...O que realmente interessa é como fazer para apartir de uma amostra contida numa memória (poder ser qualquer tipo de sinal "SAMPLEADO" por ex...) apartir daí, podermos controlar sua frequencia num range de 1htz até 20khz com precisão.

E também poder enviar essa amostra com frequencias variadas e multiplas simultaneamente para um DAC de 8 16 ou 24 bits (isso não importa muito o que importa é o fato de podermos efetuar a lógica de SOMAR todos os canais e envia-los ao DAC que só tem um buffer).

Em relação ao que o FABIM disse em utilizar um ADC também é interessente, mas o que interessa nesse tópico é o fato de termos uma amostra pre-gravada numa memoria e podermos reproduzi-la em varios canais simultaneamente e com frequencias diferentes afim de montar um algoritimo para pocessar essas informações num DAC...
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor Djalma Toledo Rodrigues » 22 Jun 2009 12:16

barboza escreveu:.... o problema desse processo é que não entrega no final a media das entradas.
E o erro ainda depende da ordem que foram processadas as entradas.
Ex. já citado:
10, 3, 2 que na media seria 5.

(10+3)/2 = 6,5 -> (6,5+2)/2 = 4,25 ou

(10+2)/2 = 6 -> (6+3)/2 = 4,5 ou

(3+2)/2 = 2,5 -> (2,5+10)/2 = 6,25

Resultado Distorção
Tomemos a soma como referência 10, 3, 2 = 15 -> 0 dB

10, 3, 2 que na media seria 5 -> 20 Log 5 / 15 = - 9.5 dB

(10+3)/2 = 6,5 -> (6,5+2)/2 = 4,25 -> 20 Log 4.25 / 15 = - 10.95 dB

(10+2)/2 = 6 -> (6+3)/2 = 4,5 -> 20 Log 4.5 / 15 = - 10.45 dB

(3+2)/2 = 2,5 -> (2,5+10)/2 = 6,25 -> 20 Log 6.25 / 15 = - 7.6 dB
.
Editado pela última vez por Djalma Toledo Rodrigues em 22 Jun 2009 13:04, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Vonnilmam » 22 Jun 2009 12:37

Eu sou uma carinha muito pratico, gosto de pegar as idéias e tentar coloca-las para funcionar no mundo real.

Assim sendo eu montei num protoboard um pic 877 ligado de forma a ler paralelamente um memoria eprom contendo varias amostras de sons, essas amostras foram colhidas no formato WAV e convertidas para o formato PCM (nesse formato as amostras contem apenas os dados referentes ao conteudo sonoro "sem protocolos anexados").

Como DAC, estou querendo utilizar um DAC da cirrus CS4333 ou similar com buffer de 24 bits, porem, só para fins de testes estou utilizando um rede R2R de 8 bits ligada ao port D do pic e sua saida ligada a um Buffer com filtrinho passa baixas afim de eliminar os chiados da conversão.

Essas amostras foram feitas a uma taxa de 22khz em 8bits (no caso especifico eu utilizei samples de instrumentos de percução, tais como snaredrums, bassdrums, cymbals, cuica, etc)

Esse são os dados que tenho em mãos (em relação a niveis de DBs etc, não os tenho até o momento, porém essas amostras foram "pegas" de uma biblioteca da KORG instr. musicais). Estou iniciando os testes considerando essas amostras que tenho em mãos, porém o proximo passa sera amostrar uma senoide pura, com pretendo isolar o tópico em duas fases:

1 - Gerar amostras de percução e apenas reproduzi-las diretamente num DAC (nos caso 8 bits) (sem alterar "mexer" na frequencia das mesmas) o intúito é apenas desenvolver a técnica correta de somar varias amostras afim de tocalas simultaneamente no DAC (sem perda de qualidade perceptivel).

2 - Gerar uma ou varias amostras de senoides puras com a mesma resolução (a principio), controlar a frequencia destas senoides com range de 1htz até 20khz com precisão, em varios canais simultaneamente, soma-las e envialas ao DAC....

Essa é a meta e o grande desafio....

RESULTADO:

Eu fiz os primeiros testes, e notei que ao reproduzir uma amostra de cada vêz (note que eu peguei amostras que foram feitas em estudio de gravação, portanto os timbres são limpos e bem definidos sem chiado algum "perceptivel" pelo menos). Ao reproduzir somente um timbre de cada vez, ficou ótimo, amplitude e a resolução foram fiéis ao reproduzido no PC, ok...

Ainda não incluir a hipótese de somar e dividir, vou fazer isso no proximo passo, ok.

Porem tive uma ideia, interessante, prestem atenção:

Eu peguei duas amostras e resampleei-as (me corrijam se estiver errado e perdõem meu portugues). Tipo: O som do bassDrum + prato hithat, fiz isso no sound forge, daí gravei a memoria com essa amostra e reproduzi novamente enviando isso para o dac r2r de 8 bits, o resultado é que o som ficou "ótimo", sem distoção alguma e com fidelidade....

É isso que teriamos que conseguir compreender, porque que soma feita na hora de criar o sampler não contem erros que originem distoção e o tamanho da amostra ficou a mesma aparentemente: 22khz em 8bits...

Não sei se consegui me expressar corretamente, me corrijam se falei abobrinha...

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

Mensagempor barboza » 22 Jun 2009 13:23

Faça um estudo sobre as amostras .wav que tem e veja qual a relação entre elas e com isso saberá como o Sound Forge fez.

Sound 1;
Sound 2;

Mixed.


Como tem o mesmo tamanho (é natural pois não mudou o tempo, só a forma) veja a relação que tem a cada amostra.

Poste os arquivos para podermos avaliar também.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor barboza » 22 Jun 2009 13:37

Como esperado, o GoldWave gera o DTMF como a soma das freqüências / 2.


(sin(4379*t)+sin(7596*t))/2


Esse é o #1.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Vonnilmam » 22 Jun 2009 13:45

Por favor, eu já estou velho, beirando os 50quentinha...e não tenho muita paciencia com internet no tocante a locar um site para postar as informações.

Gostaria de pedir para que um dos colegas cria-se ou sede-se um espaço em um site para enviarmos os dados sobre o projeto para ele...

Assim já de imediato poderia enviar tudo o que fiz até agora, inclusive os fontes...Há sim, como vcs sabem eu sou "DOIDO" e tenho o assembler nas minhas entranhas....ops....Mas calma estou evoluindo para o C....

Eu estou criando uma rotina em ASM para manipular um DAC de 16 bits, ok no formato i2s, acho que será de grande valia para os amigos iniciantes, desejaria a ajuda de vocês para postar tudo num site....


Desejo também que todos participem desse projeto "digamos assim", será de grande valia para muitos! Porque a abrangencia como pode-se notar não é só musical, devido ao envolvimento de ondas de diversos formatos e o seu controle, as aplicações são as mais variadas possiveis...




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

Mensagempor msamsoniuk » 22 Jun 2009 18:03

fabim escreveu:
Marcelo Samsoniuk escreveu:o fabim jah tah stressado! :)

fabim escreveu:affe o foco esta se perdendo..........................
Confundindo pressão sonora com amplitude digital....................

Ai ai,,, xau, ja desenteressei...............


To não velho...

Faça o seguinte.

Pega o seu simulador de circuitos, coloque 5 fontes de trensão com valores diferentes, todos ligados a um ponto comum por resistores do mesmo valor.
antes de dar o start no simulador, some o valor de todas e divide pelo numero total.
De o start e compare os valores....


pois eh, dae acho que vc tah confundindo as coisas... o que estamos falando eh ondulatoria basica... e dae nao tem erro: as amplitudes se somam e funciona tanto com som no ar, quanto lasers na parede ou ondas na superficie do prato de sopa.

o problema eh que se tiver n canais de entrada de 16 bits, a amplitude aumenta n vezes, entao eh razoavel dividir o valor por n para obter um canal de saida 16 bits, nao eh ? eh questao de bom senso, usar um conceito basico para resolver um pequeno problema, mas nao acho que altera o foco, continuams falando em audio digital.

Vai descobrir que o sinal de audio nada mais é do que DV/DT...
Varias fontes de tensão que a cada DT++ tem um DV~.....
Se tem armonicos em frequencias muito altas, maior que o KSPS tu perde estas armonicas, tanto quanto as frequencias mais altas...


dae vc pode chamar o fourier... e eh nisso q eu estou me baseando na hora de defender um metodo ou outro.

se vc tiver na entrada n frequencias diferentes f1... fn com n amplitudes a1...an somadas e dividas por n, salvo arredondamentos nas contas, vc joga a saida em um analisador de espectro e obtem as n frequencias f1...fn com amplitudes b1...bn, em qq condicao. como as amplitudes a1...an sao proporcionais a b1...bn em funcao de um fator fixo, algo como [a1...an] = k*[b1...bn], vc pode dizer que nao tem distorcao (soh nao eh zero pq o processamento digital perde bits nas divisoes).

Sobre pressão...sonora.........
Aí depende muito do que você quer fazer, e como quer fazer..
O cara tem uma mesa de som, ele vai abilitar o compressor para atenuar antes do clip, por aí vai......


pois eh, vc pode ateh fazer automatico como sugeriram (processamento digital eh uma maravilha)... mas dae nao passa no teste do analisador de espectro, pq nao dah um k contante ali. se o foco do topico fosse um sistema de conferencia, ateh valia, mas acho que para sintetizar musica nao fica legal (enfim, cada um tem sua opiniao).

Não adianta perder o foco, ten-se que continuar no foco original.
Somar sons, manhas pra não dar overflow, testes de somas, etc..

fuiz
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor msamsoniuk » 22 Jun 2009 18:43

entao, o que vc falou eh exatamente o mesmo que estou falando, exceto que ao inves de atenuar nas entradas, eh melhor atenuar na saida: eh computacionalmente mais eficiente e propaga menos erros de arredondamento. tirando isso, os resultados seriam exatamente os mesmos (distorcao praticamente nula).

proex escreveu:Estão demorando muito pra concluir se faz soma antes do shit ou depois sendo que isso tudo é funçao embutida dentro do DSP .

Eu nao me preocuparia com overflow, underflow, overroom etc etc etc.

Muitos DSPs tem um recurso que pode ou não ser usado chamado Saturação.

Ou seja, se a soma ultrapassou a capacidade do acumulador, automaticamente a cpu normaliza o sinal para o maximo permitido, não tornando-o negativo como seria num processador comum.

Cara, saturar vai saturar até mesmo em circuito analógico.

No meu modo de ver, o macete nao esta ai.

Vejam um exemplo:

Eu uso o PCM1748, conversor D/A de 24 bits com 106 dB de faixa dinamica.

Esse bicho entrega até 3.1Vpp na saida.

Isso significa que quando a palavra de audio for 0xFFFFFF, a tensao na saida será 3,1V.

Cara, pra áudio esse sinal é alto pacas.

Amplificadores de potencia possuem, por padrão, uma sensiblidade de 1VRMS. Isso quer dizer que, para atingirem a maxima potencia, basta injetar 1Vrms na entrada.

Ora, se o A/D é capaz de entrgar até 3,1 Vpp, e a sensibilidade do amplificador é de 1Vrms, vejam que ja ultrapassamos facilmente ao limite do amplifcador.

Com certeza os cones dos falantes já viraram disco voador nessa hora.

No meu ponto de vista o macete é o seguinte:

Consideremos os 3,1V do D/A como sendo 0dB.

Grave as amostras sempre com o nivel máximo de -9dB.

Assim quando soma-las, se estiverem em fase, o resultado vai ser um nivel de -3dB ou seja, incapaz de saturar o D/A. Ainda vai sobrar uma folga de 3 dB pra brincar.

Se o acumulador do seu DSP é do tamanho da palavra de audio, nunca some varias amostras ao mesmo tempo, somem 2 amostras e dividam por 2, somem esse resultado com a proxima amostra e dividam por 2, e assim sucessivamente.

Mas é muito comum que DSPs tenham acumuladores de até 74 bits. Ai vc pode somar varias amostras simultaneamente e depois dividir tudo.

Assim, internamente o nivel do sinal ficará, no maximo, sempre em torno de -6dB, muito longe da máxima capacidade do D/A.

No final, o D/A entregando no máximo -6dB (1,55Vpp) siginifica que o amplificador de potencia estará trabalhando com metade de sua potencia.

Vejam a folga com que o sistema todo estará trabalhando. Vc terá ainda margem pra aumentar o volume geral do sistema sem correr o risco de saturar tudo.
.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor fabim » 22 Jun 2009 19:33

Imagem

thelo, compreendi totalmente o que você disse, e não estava debatendo com voiz missie.
Pelo contrario, parabens pelo seu conhecimento, eu nunca tinhe pensado nisso !!!

olha a imagem.

som é, um produto com varios componentes.
FFT pega o produto e desmonta os componentes....

hehe, bem olha o desenho...
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Djalma Toledo Rodrigues » 22 Jun 2009 21:02

Mas, não é tão simples assim Fabim.

Isso me remete a dupla Nyquist–Shannon
Constroem gráficos do Som original que depois de "picotado" por Nyquist é "recuperado" pelo Shannom
(cuja fórmula tão bonita se traduz na prática a um simples RC)

O Gráfico do sinal recuperado é (um pouco) parecido com o original.

Que m-a-r-a-v-i-l-h-a !

Opss. Mas, será que esse pessoal conhece mesmo o Som ?
Creio que não.
Pois, é impossível avaliar a distorção através de um gráfico ou através do Osciloscópio.
Quando vista percebe a miníma alteração o para o ouvido já esta insuportável.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor fabim » 22 Jun 2009 21:48

meo um sinal de audio, em um condutor eletrico..
é o dominio de tensão no tempo.
Á mais eu tenho 2 componentes 3khz e 5khz,
á sim, claro que tem, sinais somados..
Como coloquei no grafico, esqueça os DAC, imagine como se 4 resistores de 10K por exemplo em um ponto comun, e todas as fontes com mesma impedância também..

Se medir com o mortimetro só nos resistores para o terra, ou da forma que foi colocada com DAC >> /4 >>ADC, o resultado é o mesmo, mais como estamos falando em digital, é obvio que haverá perda de valor analogico..

Como eu disse antes.. DT/DV,,, dominio de tensão no tempo...... ou DI/DT tanto faz.. da na mesma porcaria, pois estamos falando de um DDP sob Z, sendo Z = R+j... á froida-se, ja entendeu né...

Como não é tão simples assim ? 2 + 2 = 4.. não é 4.25 nem 8.2...

Sim existem alguns pontos complexos, existem alguns menos complexos..

Mas se forem aplicadas as leis elementares de ohm.. ja era velho... não tem meio termo..

Abraços

Fabim
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor msamsoniuk » 22 Jun 2009 23:08

gerar as senoides e mixar eh praticamente o inverso de um fft... da mesma forma que o fft desmonta qq audio em seus varios componentes senoidais de frequencia e magnitude, vc monta qq audio mixando varias componentes senoidais de diferentes frequencias e magnitudes, como vc mostrou no desenho.

dah um zoio nas duas ultimas figuras: http://www.darklife.org

obvio que vc nao precisa ser tao fundamentalista para brincar com audio digital, vc pode partir direto para samples prontos de instrumentos e usar os algoritmos que postamos para varrer eles em qq frequencia, amplitude e combinar com qq numero de outros instrumentos.

o fato dos algoritmos digitais funcionarem bem com senoides mostra que eles podem trabalhar com bem pouca distorcao e isso eh o que importa em toda essa historia. o DSP trabalha com matematica discreta em um mundo ideal, o que ele vai simular soh depende do modelo que vc usa!

fabim escreveu:Imagem

thelo, compreendi totalmente o que você disse, e não estava debatendo com voiz missie.
Pelo contrario, parabens pelo seu conhecimento, eu nunca tinhe pensado nisso !!!

olha a imagem.

som é, um produto com varios componentes.
FFT pega o produto e desmonta os componentes....

hehe, bem olha o desenho...
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

AnteriorPróximo

Voltar para PIC

Quem está online

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

cron

x