Ajuda com sine wave

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor barboza » 20 Jun 2009 22:22

Vonnilmam escreveu:
Tipo: canal A= 0010111010101011
canal B= 1111111110000000

soma tudo = 10010111000101011 "resultou em uma soma de 17bits"
shift esquerda 0010111000101011



Oi Vonnilmam,

relendo seu post percebi que ao invés de efetuar o shift, vc fez um AND do bit MSB.

Outro caso é que o que Marcelo mencionou foi uma divisão após a soma, no caso a media dos operadores e neste caso o shift é a direita.

Se a quantidade de canais for 2^N, você pode usar esta operação mesmo em microcontroladores, mas a variável que receberá a soma deverá suportar para não ter overflow.

Código: Selecionar todos
AND
0010111010101011
 010111010101011

SHIFT a direita
0010111010101011
0001011101010101


Se não for 2^N, dependendo do numero é possível efetuar algumas seqüencias de shift (esquerda e/ou direita) para efetuar a conta (multiplicação/divisão) ao invés de chamar funções de operadores não suportados pelo hardware do microntrolador.

O exemplo da divisão por 3, poderiamos ter algo como:

3 = 6/2 = 12/4 = 24/8 = 48/16

Neste caso precisamos multiplicar a soma por 48 e dividir por 16.

Multiplicar por 48 é o mesmo que multiplicar por 16 e somar com mesmo numero multiplicado por 32. Exemplo:
S = soma;

Código: Selecionar todos
(S*16)+(S*32)=S*48

S = (S<<4) + (S<<5);



Agora para ter o numero divido por 3, dividimos por 16;

Código: Selecionar todos
S >>=  4;


Código: Selecionar todos
S /= 3;
//pode ser resolvido por
S = (S<<4) + (S<<5);
S >>=  4;
Editado pela última vez por barboza em 20 Jun 2009 23:00, em um total de 2 vezes.
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 » 20 Jun 2009 22:36

proex escreveu:
32767 = 0111.1111.1111.1111 +
32767 = 0111.1111.1111.1111

Temos:
65545 = 0.1111.1111.1111.1110




32767 = 0111.1111.1111.1111 +
32767 = 0111.1111.1111.1111

Temos:
65534 = 1111.1111.1111.1110


proex escreveu:
Seu calculo com shift e posterior Adiçao:
16383 = 0011.1111.1111.1111
16383 = 0011.1111.1111.1111

e somando, temos:

32766 = 0111.1111.1111.1110

Meu calculo com OR:

32767 = 0111.1111.1111.1111 OR
32767 = 0111.1111.1111.1111

Temos:
32767 = 0111.1111.1111.1111




O problema do OR é quando os níveis das entradas não são iguais. Ai tem que ser soma mesmo e divisão (pode ser com shift) mesmo pois senão o erro fica relevante em relação aos sinais.

7 = 111
2 = 010

OR:

7 = 111

SOMA:
9 = 1001

SHIFT/divisão
4 = 0100

(2+7) / 2 = 4,5 = 4
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 Djalma Toledo Rodrigues » 21 Jun 2009 12:47

Marcelo
Se tivermos 3 frequências diferentes com Amplitude de + 10 , +3, +2
em um determinado instante, a mistura delas não pode ser igual a 5

isso representaria uma severa distorção.

Se ocorre overflow , o que seria equivalente a Saturação em sistema Analógico o mais indicado seria a redução de amplitude (não instantânea) de todas na mesma proporção.

Não é assim que o operador de som faz na mesa de audio ?
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Vonnilmam » 21 Jun 2009 14:51

Parabens a todos, esse tópico esta esquentando...

Como disse o proex, as amostras tem conteudo harmonico diferentes um do outro (imagine que são ondas "complexas" tiradas amostras de timbres do mundo analogico e armazenadas na forma digital numa memória).

Pelo que pude notar a lógica que o marcelo expôs parece ser a mais correta, sendo o fator : SOMA TODAS AS ENTRADAS E DIVIDE PELO NUMERO DE ENTRADAS, assim o resultado numca será maior (não haverá overflon) no buffer...

Agora temos que por isso em pratica (como foi eu o culpado de abrir esse tópico, tenho como compromisso testar no hardware essas idéias, ok) assim vou faze-las agora...até terça postarei os resultados (se alguem de vocês tiverem um site para expor os testes seria muito bom, assim poderimos expor os testes como fez o marcelo).

Foi levantada uma outra hipotese, que achei interessante: se somamos as amostras (vamos chamar de amostras, considerando que o sinal pode ser desde uma simples senoide até uma forma de onda complexa qualquer) o volume também aumentaria (teóricamente), e também temos uma terceira hipotese que achei muito importante, o marcelo levantou a informação em relação a "FASE" dos sinais, realmente se dois sinais tiverem a mesma fase poderia haver o cancelamento do sinal (teoricamente, visto que na pratica há sim uma dinimuição brusca do sinal ou melhor dizendo no popular: é como se o sinal fosse "esmagado" sofre-se um aniquilamento)
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 » 21 Jun 2009 14:59

processamento de sinais eh uma questao de feh! :)

o que funciona com dois canais, funciona para n canais... entao vamos pegar 1 ciclo completo de uma senoide de 5Hz com taxa de amostragem de 100Hz:

0
10125
19258
26505
31157
32758
31151
26494
19243
10108
-17
-10141
-19273
-26519
-31169
-32768
-31159
-26500
-19247
-10110
16

e tambem uma senoide de 10Hz com mesma taxa de amostragem:

0
19259
31161
31159
19254
-6
-19264
-31164
-31160
-19254
6
19263
31161
31155
19248
-12
-19268
-31164
-31156
-19247
14

agora temos que concordar em alguma coisa: se elas fossem emitidas por equipamentos diferentes e independentes no mesmo meio, como seriam recebidas por um receptor unico ? a resposta que sabemos eh que as ondas sonoras no ar se somam. e quando elas estiverem em fase construtiva, a intensidade poderia ser 2x a intensidade normal, enquanto que em fase destrutiva a intensidade seria zero. aplicando isso temos o resultado esperando:

0
29384
50419
57664
50411
32752
11887
-4670
-11917
-9146
-11
9122
11888
4636
-11921
-32780
-50427
-57664
-50403
-29357
30

porem a intensidade esta muito alta para o nosso sistema de processamento (16 bits), entao temos que adequar o resultado. fazendo as contas, eh facil verificar que o pior caso possivel seriam:

32767 + 32767 = 65534

sendo que o resultado tem que ser um numero de 17 bits, visto que estamos trabalhando com sinal (podia ser -65534). entao nao resta solucao a nao ser fazer o shift dos valores:

0
14692
25209
28832
25205
16376
5943
-2335
-5959
-4573
-6
4561
5944
2318
-5961
-16390
-25214
-28832
-25202
-14679
15

e temos o resultado adequado para ser tratado em nosso sistema 16 bits.

tratar os canais na entrada nao eh necessariamente interessante pq eh uma pratica classica de programacao: vc sempre divide depois de fazer a contarada para perder menos.

como no caso do (10+2+3)/3 = 5, o que vale eh o resultado dinamico: se vc passar o resultado em um analisador de espectro, tem que estarem presentes as frequencias e a magnitude delas sera proporcional aos sinais de entrada (10, 2 e 3).

sobre a possibilidade de controler a amplitude dinamicamente... existe sim:

y = x1 + x2 - x1*x2

eu postei uma terceira figura no http://www.darklife.org com a saida dessa formula comparando com a mixagem de soma e shift. o nivel de saida daih se mantem sempre alto. para ver se o negocio realmente funcionava, gerei 5Hz com 50% de amplitude e 25Hz com 100%, com casos delas sozinhas e mixadas. coloquei a saida real esperada (com overflow) e a saida processada.

no caso da soma e shift, a amplitude de todo mundo esta proporcional, isto eh, o pico soh ocorre quando os dois sons tocam juntos. se vc passar em um analisador de espectro, vc abre os tons de 5 e 25Hz corretamente.

no caso da soma que dah o resultado desejado, o sinal de 5 e 25Hz estao corretos quando estao sozinhos. entao quando eles se misturam, as amplitudes se alteram de modo a se adequar dinamicamente. se passar no analisador de espectro, eu acho que recupera tambem os tons de 5 e 25Hz, porem quando eles estao misturados a magnitude deve ser menor, pq ocorre uma especie de compressao nestes pontos.

note q esse ultimo mecanismo de mixagem dinamica efetivamente cria alguma distorcao no audio e eh mais interessante para conferencia via telefone, por exemplo. para audio de qualidade, eu continuo achando que a mixagem nao dinamica eh melhor.

Djalma Toledo Rodrigues escreveu:Marcelo
Se tivermos 3 frequências diferentes com Amplitude de + 10 , +3, +2
em um determinado instante, a mistura delas não pode ser igual a 5

isso representaria uma severa distorção.

Se ocorre overflow , o que seria equivalente a Saturação em sistema Analógico o mais indicado seria a redução de amplitude (não instantânea) de todas na mesma proporção.

Não é assim que o operador de som faz na mesa de audio ?
.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor barboza » 21 Jun 2009 15:09

Aqui tem um aplicativo que facilita a visualização dos gráficos.

http://www.cefetba.br/fisica/NFL/fge2/b ... mento.html
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 Djalma Toledo Rodrigues » 21 Jun 2009 15:21

Vonnilmam escreveu:... Pelo que pude notar a lógica que o marcelo expôs parece ser a mais correta, sendo o fator : SOMA TODAS AS ENTRADAS E DIVIDE PELO NUMERO DE ENTRADAS, assim o resultado numca será maior (não haverá overflon) no buffer...

Assim você preserva o Buffer e sacrifica a fidelidade do Som.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 21 Jun 2009 15:52

Barbosa
Antes de existir contadores eletrônicos de frequência se media a frequência através de um instrumento que possui um VFO e um Oscilador a Cristal cujas harmonicas servia como referência para o VFO. Esse instrumentos tinham um livro com tabelas do Venier para todas as frequências de HF.

O Procedimento então éra assim:
Ajustava o VFO para o Batimento Zero com a harmonica do Cristal mais pròxima da frequência a ser medida isto é, calibrava o VFO.

Fazia o Batimento Zero entre a Sinal a ser medido e o VFO do instrumento.

Consultava a Tabela do Venier para obter a frequência.

O que pretendo com isso é demonstrar que o Batimento Zero pode (e deve) ser feito com frequências iguais.
Sempre haverá desvio de fase entre elas.
.
Editado pela última vez por Djalma Toledo Rodrigues em 21 Jun 2009 17:42, em um total de 2 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor barboza » 21 Jun 2009 15:54

Djalma Toledo Rodrigues escreveu:Barbosa
Antes de existir contadores eletrônicos de frequência se media a frequência através de um instrumento que possui um VFO e um Oscilador a Cristal cujas harmonicas servia como referência para o VFO. Esse instrumentos tinham um livro com tabelas do Venier para todas as frequências de HF.

O Procedimento então éra assim:
Ajustava o VFO para o Batimento Zero com a harmonica do Cristal mais pròxima da freqência a ser medida.

Fazia o Batimento Zero entre a Sinal a ser medido e o VFO do instrumento.

Consultava a Tabela do Venier para obter a frequência.

O que pretendo com isso é demonstrar que o Batimento Zero pode (e deve) ser feito com frequências iguais.
Sempre havera diferença de fase entre elas.
.


O Link foi só para usar o aplicativo para gerar as formas de onda para o assunto do tópico, nem li o conteúdo sobre batimento.
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 msamsoniuk » 21 Jun 2009 15:55

e vc tem alguma ideia melhor ? :)

eu acho que eh ponto comum que os sinais tem que ser somados. mas dae como lidar com o overflow ?

colocar um DAC maior nao ajudaria, pq se vc colocar um DAC de 24 bits, vou querer usufluir disso e vou pegar as amostras de um ADC de 24 bits... entao mixar sem prever o overflow nao eh opcao, ele tem q ser tratado. a primeira solucao proposta de atenuar a saida de forma fixa preserva a forma de onda integralmente, tanto em termos de frequencia quanto magnitudes relativas, mas se perde a magnitude absoluta.

dependendo da aplicacao, pode nao ser o melhor caso, entao existe uma segunda proposta que permite mixar 2 canais com uma especie de compressao dinamica na saida. imagino que as frequencias sao preservadas, mas de cara eh possivel afirmar que as magnitudes relativas vao para o espaco: conforme a atividade nos outros canais aumenta, o som dos outros canais vai sendo afogado.

eu diria que a distorcao no segundo caso eh muito maior que no primeiro, pq as magnitudes relativas ficam mudando dinamicamente. para conferencia no telefone eh uma boa, mas para alta fidelidade acho que eh mancada.

Djalma Toledo Rodrigues escreveu:
Vonnilmam escreveu:... Pelo que pude notar a lógica que o marcelo expôs parece ser a mais correta, sendo o fator : SOMA TODAS AS ENTRADAS E DIVIDE PELO NUMERO DE ENTRADAS, assim o resultado numca será maior (não haverá overflon) no buffer...

Assim você preserva o Buffer e sacrifica a fidelidade do Som.
.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor Djalma Toledo Rodrigues » 21 Jun 2009 16:15

Djalma Toledo Rodrigues escreveu:... Se ocorre overflow , o que seria equivalente a Saturação em sistema Analógico o mais indicado seria a redução de amplitude (não instantânea) de todas na mesma proporção.

Não é assim que o operador de som faz na mesa de audio ?

Mas, é aí que o sistema digital se ferra. rs

A gama de amplitude do Som de uma Orquestra pode
chegar a 90 dB.
90 dB equivale a uma variação de 10 elevado a 9ª = 1 000 000 000
Para cobrir isso um ADC teria que ter 30 bits
(e não cogitei do ruido)

Mesmo para o Sistema Analógico isso representa uma gama bem extensa
mas, que pode se distribuir abaixo e acima de Zero dB
Menos mal.
.
Editado pela última vez por Djalma Toledo Rodrigues em 21 Jun 2009 17:36, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor fabim » 21 Jun 2009 17:31

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

Ai ai,,, xau, ja desenteressei...............
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 » 21 Jun 2009 17:59

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...............
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor fabim » 22 Jun 2009 07:52

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....

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...

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......

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
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 proex » 22 Jun 2009 08:38

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.
.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

AnteriorPróximo

Voltar para PIC

Quem está online

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

cron

x