HudLac

14/08/2009

Osciladores

Uma ferramenta essencial para a síntese de som é o oscilador, que implementa ou simula um movimento ondulatório periódico, cuja freqüência pode ser controlada.

Há uma variedade de métodos para computar ondas senoidais digitalmente, o que possibilita a implementação de osciladores senoidais que diferem em critérios como velocidade, precisão e uso de memória.

Ondas complexas podem ser obtidas combinando-se vários osciladores senoidais, ou fornecendo-se a forma de onda pré-calculada a um oscilador de tabela de onda.

Formas de onda

Algumas das formas de onda mais usadas são apresentadas a seguir.

  1. Senoidal: Determinada pela função seno (ou cosseno);

    f(x) = cos(x)
    
  2. Dente-de-serra: Um período dessa forma de onda consiste simplesmente de uma rampa ascendente (que então salta abruptamente para o ponto inicial, na passagem para o próximo ciclo).

    Pode-ser obtida com:

    f(x) = x - floor(x)
    

    qué o mesmo que:

    f(x) = mod(x, 1.0)
    

    Pode ser aproximada utilizando-se harmônicos com amplitude inversa ao seu índice (número do harmônico):

    f(x) = cos(x) + cos(2x)/2 + cos(3x)/3 ...
    
  3. Quadrada: Alterna regularmente entre dois valores.
    Pode ser obtida, por exemplo, tomando-se o sinal (+, – ou 0) da saída de um oscilador senoidal:

    f(x) = sgn(sin(x))
    

    ou com o teste:

    mod(x, 1.0) >= 0.5
    

    Nesse caso, se o valor 0.5 for substituído por outro número entre 0 e 1, obtém-se um trem de pulsos ou onda retangular, dos quais a onda quadrada é um caso particular.

    A onda quadrada pode ser aproximada de maneira similar à onda dente-de-serra, mas usando-se somente harmônicos ímpares:

    f(x) = cos(x) + cos(3x)/3 + cos(5x)/5 ...
    
  4. Triangular: Formada por uma rampa ascendente seguida de uma rampa descendente.

    f(x) = abs( x - round(x) )
    

    Pode ser aproximada usando-se harmônicos ímpares, com amplitude inversa ao quadrado do número do harmônico, invertendo-se as fases (sinal) de cada componente com relação ao anterior:

    f(x) = cos(x) + cos(-3x)/9 + cos(5x)/25 + cos(-7x)/49 ...
    

    Usando-se função seno, pode-se inverter as amplitudes (ao invés da fases):

    f(x) = sin(x) - sin(3x)/9 + sin(5x)/25 - sin(7x)/49 ...
    

Como visto acima, as ondas triangular, quadrada e dente-de-serra (ideais) possuem infinitos harmônicos. Devido à limitação de banda determinada pelo Teorema da Amostragem, na forma digital o número de harmônicos deve ser restrito (conforme a freqüência fundamental) quando se quer evitar aliasing.

Tabelas de forma de onda
Para a síntese de sons periódicos complexos, pode-se evitar (re)calcular a função de onda para cada amostra: afinal, uma vez calculado um período da onda, basta repeti-lo ao longo da duração do som. Esse é o princípio básico da síntese por tabela de onda (table-lookup oscilators). Dada uma tabela contendo um período da onda, o oscilador simplesmente repete a tabela na freqüência desejada.

Osciladores com interpolação
O oscilador de tabela deverá decidir entre dois valores adjacentes, quando precisar de algum ponto da onda que inexista na tabela. Para reduzir a distorção causada por esse arredondamento, deve-se utilizar tabelas suficientemente grandes, com alta resolução. A qualidade será claramente superior com o uso de osciladores capazes de interpolar entre dois pontos da tabela, ou seja, calcular valores intermediários (inexistentes na tabela). Contudo, esses osciladores precisam realizar o cálculo de interpolação a cada amostra, o que, dependendo do caso, pode ser menos eficiente (e preciso) do que o cálculo direto da onda.

Filtros digitais

Filed under: Áudio digital — Tags: — ? @ 13:36

Alguns tipos de filtros:

Passa-altas: remove freqüências baixas
Passa-baixas: remove freqüências altas
Passa-banda (ou passa-faixa): permite a passagem apenas de uma faixa de freqüências
Rejeita-banda (ou rejeita-faixa): bloqueia freqüências dentro de uma faixa
Passa-tudo: mantém intactas as amplitudes de toda as freqüências, mas altera suas fases

Equalizador

Resposta em freqüência: espectro do filtro (domínio da freqüência)
Resposta ao impulso: efeito do filtro sobre um impulso (domínio do tempo)

06/08/2009

Ruído

Ruído é caracterizado pela natureza ou aparência aleatória e não periódica de um sinal. Ruído também é entendido como um componente indesejado que interfere no sinal.

Podem ser produzidos eletronicamente vários tipos de ruído.

Ruído branco

A forma mais simples de ruído produzida eletronicamente consiste apenas de uma sucessão de valores aleatórios (numa distribuição uniforme), que resulta no chamado ruído branco. O ruído branco ideal contém todas as freqüências simultaneamente e com igual potência em todas as faixas de freqüência. Obviamente, o ruído branco sintetizado digitalmente não pode conter freqüências superiores à freqüência de Nyquist.

Os valores aleatórios das amostras naturalmente “saltam” de maneira abrupta, o que mostra a presença das freqüências altas.

# Gera 16000 números aleatórios:
x = rand(16000,1);

# Toca a 16 kHz:
sound(x, 16000);
# (Experimente também outras
# taxas de amostragem, como:
# 8000, 44100 e 48000.)

# Plota 100 amostras:
plot(x(1:100),'*-');

Ruído Browniano

Há um outro tipo de ruído fácil de se produzir digitalmente, cujas freqüências altas são mais suaves em comparação com o ruído branco. O ruído browniano caracteriza-se por um espectro em que a amplitude é inversamente proporcional ao quadrado da freqüência, sendo por isso também chamado ruído 1/f^2.

O ruído Browniano pode ser produzido através de uma caminhada randômica: cada nova amostra aleatória “move-se” numa pequena distância em relação à amostra anterior. Se os valores no ruído branco dão (possivelmente grandes) “saltos” de qualquer ponto a qualquer outro, no ruído Browniano os valores dão pequenos “passos” a partir do ponto atual.

# Gera ruído Browniano:
r = zeros(16000,1);
maxpasso = .1;
for i = [2 : 16000]
   anterior = r(i-1);
   passo = maxpasso * (rand-0.5);
   novo = anterior + passo;
   if(novo>1 || novo<0)
       novo = anterior - passo;
   endif
   r(i) = novo;
endfor

# Toca a 16kHz:
sound(r, 16000);
# (Experimente também outras
# taxas de amostragem, como:
# 8000, 44100 e 48000.)

# Plota 100 amostras:
plot(r(1:100),'*-');

Interpolação

Outros tipos de ruídos podem ser obtidos pela “suavização” da onda, reduzindo-se o peso das freqüências altas. Uma faixa de ruído com freqüências baixas pode ser produzida gerando-se os números aleatórios numa taxa baixa (ao invés de um novo valor por amostra), e preenchendo-se as amostras intermediárias com uma progressão suave até o novo valor aleatório. Em outras palavras, utilizando-se interpolação entre os valores aleatórios.

# Gera 10 valores aleatórios:
Y = rand(10,1);
X = 1:10;

# Interpola por um fator de 3,
# para obter 30 valores:
X2 = 1:(9/29):10;
Y2 = interp1(X,Y,X2,'cubic');

# Plota valores:
plot(X,Y, 'b@;Original:;' , \
X2,Y2,'r*-;Interpolado:;' );

Ruído Rosa

O ruído rosa apresenta espectro em que a amplitude é inversamente proporcional à freqüência (1/f). Geralmente é produzido através de filtragem de ruído branco. Não há método matemático simples para obter ruído rosa, porém
há métodos para aproximações.

Um certo tipo de ruído 1/f pode ser produzido por um método determinístico, através da seguinte recorrência, cujo resultado caótico alterna trechos “quietos” e “agitados”:

# Prealoca vetor e inicializa primeiro ponto:
r = zeros(16000,1);
r(1) = rand();

# Calcula cada ponto seguinte a partir do anterior:
for i=2:16000
    anterior = r(i-1);
    r(i) = mod ( anterior + anterior*anterior , 1.0 );
endfor

# Toca a 16kHz:
sound(r, 16000);
# (Experimente também outras
# taxas de amostragem, como:
# 8000, 44100 e 48000.)

# Plota 2500 amostras:
plot(r(1:2500),'*-');

Interessantes efeitos podem ser conseguidos gerando-se o ruído acima a uma taxa de amostragem baixa e interpolando-se os valores obtidos. Ele pode ser utilizado então, por exemplo, como uma envoltória de freqüência.

Espectro

Além da representação de um som digital no domínio do tempo, há outra forma de representação muito útil: no domínio das freqüências. É o chamado espectro.

A figura abaixo mostra duas representações de um mesmo sinal composto por freqüências de 2, 6 e 20 Hz, sendo que o componente de 20 Hz tem metade da amplitude dos outros. Essas informações são facilmente visualizadas no espectro (parte superior da figura). A onda complexa é mostrada no domínio do tempo, na parte inferior da figura.

Análise de Fourier

Jean-Baptiste Joseph Fourier demonstrou que qualquer função periódica pode ser representada como um somatório de ondas senoidais harmônicas, com amplitudes e fases particulares.

Através da transformada de Fourier, pode-se analisar um sinal (no domínio do tempo) em seus componentes de freqüência. Cada componente é um vetor representado como um número complexo: o comprimento do vetor (distância em relação ao ponto (0,0), ou valor absoluto ou módulo) é a amplitude, e seu ângulo de inclinação em relação ao eixo horizontal é a fase.

Espectro de amplitude e espectro de potência

A amplitude de cada componente senoidal é o valor absoluto do número complexo, calculado através do Teorema de Pitágoras:

amp = sqrt(real(x)^2 + imag(x)^2)

Se a operação de raiz quadrada (sqrt) for omitida, obtemos a potência, que nada mais é do que o quadrado da amplitude:

pot = real(x)^2 + imag(x)^2

Espectrograma

Freqüentemente é útil visualizar a evolução do espectro ao longo do tempo, ou seja, ver como as freqüências e amplitudes variam no decorrer do tempo. A essa forma de visualização chamamos espectrograma.

O sinal é dividido em curtos trechos (“janelas”), cujas transformadas de Fourier são apresentadas lado a lado (seqüencialmente) num gráfico. O eixo horizontal é o tempo, o eixo vertical é a freqüência; as amplitudes são representada por cores ou tons de cinza.

Janelas de análise

A transformada de Fourier é definida somente para sons periódicos, o que não é o caso das porções arbitrárias de um som usadas para gerar um espectrograma. Presumindo-se que essa porção do sinal fosse um período completo de onda, a passagem do final de um ciclo para o início de outro provavelmente causaria uma descontinuidade inexistente no sinal. Em conseqüência, o resultado da análise de Fourier, embora exato, não corresponde ao que é intuitivamente “esperado” ou útil.

Para reduzir esse inconveniente, uma técnica comum é multiplicar o trecho do sinal por uma janela de análise apropriada, que cria uma espécie de “fade-in” e “fade-out” no trecho a ser analizado. O início e o final do pseudo-ciclo seriam próximos (ou iguais) a zero, evitando-se a descontinuidade que poderia ocorrer ao se repetir periodicamente essa porção do sinal (o final de um ciclo “emenda-se” melhor com o início de outro ciclo).

Para esse fim (janelamento), costumam ser usadas as janelas de Hamming e de Hann.

Software

Alguns programas que exibem espectros e/ou espectrogramas de sons são: Audacity, Praat, jaaa, snd e Sonic Visualizer.

27/06/2009

Ondas periódicas

Filed under: Áudio digital — Tags:, , — ? @ 18:55

Ondas sonoras são representadas graficamente em duas dimensões: o tempo (eixo horizontal, x) e amplitude instantânea (eixo vertical, y).

Ondas periódicas são as que repetem um padrão fixo (a forma de onda) ao longo do tempo. A extensão temporal do padrão é chamada período da onda.

Se uma onda se repete duas vezes a cada segundo, sua freqüência é igual a 2 Hertz, e seu período é igual a 1/2 s (ou 500 ms).

Ondas senoidais

O movimento oscilatório mais simples é o da onda senoidal, representada matematicamente pela função seno.

Uma onda periódica possui três características essenciais: freqüência (inverso do período), amplitude e fase.
Freqüência, amplitude e fase

Sons complexos

Sons complexos são constituídos pela sobreposição (somatório) de ondas senoidais.

Na figura abaixo, uma onda complexa (em azul) é resultante da combinação das ondas A (em vermelho) e B (em verde).

Onda complexa

Parciais: harmônicos e inarmônicos

As freqüências componentes de uma sinal complexo são chamadas parciais. Os parciais podem são harmônicos quando suas freqüências são múltiplos inteiros de uma freqüência, que é chamada freqüência fundamental. Caso contrário, os parciais são inarmônicos.

Por exemplo, um som composto por senóides de freqüências {110.1, 220.2, 330.3, 550.5, 880.8 Hz} é harmônico, pois é composto somente por freqüências múltiplas de 110.1 Hz, que é a fundamental. Já um som composto pelas freqüências {111, 121, 333.333, 749, 881 Hz} é inarmônico.

Série harmônica

Série harmônica é o conjunto de todas as freqüências que são harmônicas de uma fundamental.

SH(f) = f, 2f, 3f, 4f...

Ondas periódicas são sempre constituídas exclusivamente por componentes harmônicos, cada um com amplitude e fase específicas.

26/06/2009

Representação digital do som

Filed under: Áudio digital — Tags:, , , , , — ? @ 21:50
  1. Digitalização de som
    A amostragem é um processo de discretização temporal do sinal analógico contínuo. Num sinal digitalizado, cada amostra é representada usando-se um valor em um conjunto finito de valores discretos; é o processo de quantização.

    A digitalização é realizada por um equipamento chamado conversor analógico-digital (ADC), e possui basicamente três etapas: (1) o sinal passa por um filtro que remove freqüências que não podem ser representadas; (2) após a filtragem, o sinal é amostrado; (3) por fim, as amostras são quantizadas e codificadas em sistema binário. O processo inverso, que reproduz o sinal, é realizado por um conversor digital-analógico (DAC).

    Os dois principais atributos da representação digital de um sinal são a taxa de amostragem e o formato das amostras.

    • Taxa de amostragem
      A amostragem (discretização temporal) é realizada tomando-se periodicamente amostras dos valores instantâneos do sinal analógico. A taxa de amostragem é a freqüência com que são tomadas as amostras.

      A taxa de amostragem padrão do CD de áudio é de 44.100 Hz. As fitas DAT utilizam taxa de amostragem de 48 kHz.

    • Formato da amostra
      Em um sinal digital, amostras são quantizadas e armazenadas usando-se um determinado número de bits para representar cada amostra. O número de bits determina o número de valores possíveis de ser representados. Cada amostra precisa ser “arredondada” para um valor próximo disponível. Os erros de aproximação causam uma deformação do sinal em relação ao original (analógico), o ruído de quantização. A relação sinal/ruído pode ser computada a partir no número de bits.

      Normalmente, convenciona-se que os valores permitidos na representação da amplitude instantânea de som digital situam-se no âmbito de -1.0 a 1.0. Valores que extrapolem esse âmbito são normalmente sujeitos a clipping (ou saturação), isto é: valores maiores que 1.0 são substituídos por 1.0, e valores menores que -1.0 são substituídos por -1.0, resultando no efeito de distorção do sinal. Para evitar saturação, é preciso garantir (seja na gravação ou no processamento) que a amplitude do sinal não vá ultrapassar a amplitude máxima permitida.

      CDs de áudio utilizam amostras de 16 bits, o que permite representar 65.536 valores diferentes de amplitude instantânea.

  2. Teorema da amostragem de Nyquist[/Shannon]
    Segundo o Teorema de Nyquist, a freqüência de amostragem de um sinal analógico, para que possa posteriormente ser perfeitamente reconstituído, deve ser igual ou maior a duas vezes a maior freqüência do espectro desse sinal. A tentativa de representar freqüências superiores à freqüência de Nyquist faz com que essas freqüências sejam defectivamente mapeadas para regiões inferiores do espectro, deturpando o sinal (aliasing).

    Portanto, usando-se a taxa de amostragem dos CDs, 44.100 Hz, não é possível representar freqüências maiores que 22.050 Hz.

O exemplo a seguir ilustra o processo de digitalização. Do sinal original (linha verde) tomam-se amostras (bolinhas vermelhas) igualmente espaçadas no tempo (eixo horizontal). Os valores dessas amostras (eixo vertical, amplitudes instantâneas), são quantizadas em valores de -1 a 1, separados por intervalos de 0.25 (quadradinhos azuis).

Amostragem e quantização de um sinal

Lista de tópicos de áudio digital

Filed under: Áudio digital — ? @ 21:07
TÓPICOS SOBRE ÁUDIO DIGITAL
Hudson Lacerda (2009)

Representação digital do som
- Digitalização de som
    - Taxa de amostragem
    - Formato da amostra
- Teorema da amostragem de Nyquist

Ondas periódicas
- Ondas senoidais
- Sons complexos

Espectro
- Análise de Fourier
- Espectro de amplitude e espectro de potência
- Espectrograma
    - Janelas de análise

Ruído
- Ruído branco
- Interpolação

Filtros digitais
    - Alguns tipos de filtros (passa-alta, passa-baixa, passa-banda)
    - Resposta de impulso (IIR, FIR)

Osciladores
    - Formas de onda
    - Table-lookup
    - Interpolação
    - Amplitude
        - Envoltória de amplitude
            - ADSR
        - Modulação de amplitude
        - Tremolo
    - Freqüência
        - Portamento
        - Modulação de freqüência
        - Vibrato (periódico + randômico)

Síntese aditiva
    - Órgão
    - Sinos
Análise e ressíntese
Algoritmo de Karplus-Strong (cordas pinçadas)
Modulação de freqüência
    - Funções de Bessel
Modulação de amplitude
Modulação em anel
Bandas de ruído
Modelagem não-linear de onda (waveshaping)

Reverberação
Linhas de atraso
Ressonância
Filtros em pente (comb filters)
Chorus, echo, flanger e outros efeitos

MIDI
- Representação de alturas
    - Conversão altura  freqüência
    - Afinações e temperamentos
- Eventos (noteon, noteoff, etc.)
- Eventos/sinais de controle

Interação em tempo real
- Uso de eventos como "gatilhos"
- Identificação de alturas
- Identificação de ataques

Blog no WordPress.com.