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