MAC 337/5900 - Computação Musical

Aula 27 - 27/11/7

Palestra

Nome Completo: Prof. Marcelo Gomes de Queiroz

Instituição: DCC-IME-USP

Título: Teoria e Projeto de Filtros Digitais

Material: Patches Pd

Roteiro da aula sobre filtros:

- exemplos de filtro passa-baixa (y(n)=0.5*(x(n)+x(n-1)))
  e passa-alta (y(n)=0.5*(x(n)-x(n-1)))

- transformada z: X(z) = \sum_{n=-\infty}^{\infty} x(n)z^{-n}

- Se y(n)=a0*x(n)+a1*x(n-1)+...+aM*x(n-M)

  então Y(z) = (a0+a1*z^{-1}+...+aM*z^{-M})*X(z)

  de onde H(z) = Y(z)/X(z) = a0+a1*z^{-1}+...+aM*z^{-M}
  é a resposta em freqüência do filtro

- filtro com 2 zeros em R*e^{i*2*pi*f/SR} e R*e^{-i*2*pi*f/SR}:
  (obs: a freqüência angular associada à freqüência f em Hz
        é 2*pi*f/SR, onde SR é a taxa de amostragem)
  
  H(z) = (1-R*e^{i*2*pi*f/SR}z^{-1})*(1-R*e^{-i*2*pi*f/RS}z^{-1})
       = 1-2*R*cos(2*pi*f/SR)*z^{-1}+R^2*z^{-2}

  y(n) = x(n)-2*R*cos(2*pi*f/SR)*x(n-1)+R^2*x(n-2)

  (ver exemplo teste2Z.pd e subpatch filtro2Z.pd)

- Se y(n)=a0*x(n)+a1*x(n-1)+...+aM*x(n-M)-b1*y(n-1)-b2*y(n-2)-...-bNy(n-N)

  então (1+b1*z^{-1}+...+bM*z^{-M})Y(z) = (a0+a1*z^{-1}+...+aM*z^{-M})*X(z)

  de onde H(z) = Y(z) = a0+a1*z^{-1}+...+aM*z^{-M}
                 ----   --------------------------
                 X(z)    1+b1*z^{-1}+...+bM*z^{-M}

  é a resposta em freqüência do filtro

- filtro com 2 pólos em R*e^{i*2*pi*f/SR} e R*e^{-i*2*pi*f/SR}:

  H(z) = 1/((1-R*e^{i*2*pi*f/SR}z^{-1})*(1-R*e^{-i*2*pi*f/SR}z^{-1}))
       = 1/(1-2*R*cos(2*pi*f/SR)*z^{-1}+R^2*z^{-2})

  y(n) = x(n)+2*R*cos(2*pi*f/SR)*y(n-1)-R^2*y(n-2)

  (ver exemplo teste2P.pd e external filtro2P~.c)

- filtros com vários pólos e zeros podem ser criados diretamente
  a partir de H(z) (o que pode torná-los computacionalmente mais
  eficientes) ou simplesmente obtidos por composição de vários
  filtros simples, em série (respostas em freqüência multiplicadas)
  ou em paralelo (respostas em freqüência somadas).

  (ver exemplo teste2P8Z.pd)

- O método de Karplus-Strong utilizado para simular sons de cordas
  pinçadas parte do princípio da síntese subtrativa, filtrando
  sucessivamente um fragmento até o silêncio. Procura imitar as
  seguintes características de cordas pinçadas:

  (1) ataque ruidoso (o buffer é inicializado   com amostras aleatórias);
  (2) definição tonal após ataque (o   buffer tem tamanho fixo associado
      à freqüência do som desejado);
  (3) abafamento sucessivo dos agudos (através do filtro passa-
      baixa recirculante).

  Esquematicamente:

  buffer (tamanho M = SR/freq, inicializado com ruído)

  -----------        ---------------------
  |!@(*&%$+#|  --->  | 0.5*(x(n)+x(n-1)) | ---> y(n)
  -----------   |    ---------------------  |
                |                           |
                |         ----------        |
                <---------| z^{-M} |<--------
                          ----------

  (ver exemplo testeKS.pd e external KarplusStrong~.c)

- O método de síntese por formantes consiste em associar filtros
  passa-banda em paralelo, cujos pólos são definidos por regiões
  de formantes. No caso da síntese de vogais, existem tabelas
  para estes formantes (ver Moore, Elements of Computer Music,
  pg. 392 tabela 3-10). Estes filtros podem ser aplicados sobre
  sinais com espectros ricos, como ruídos, tons "cheios" (onda
  quadrada, triangular, dente-de-serra, etc.) ou músicas.

  (ver exemplo testeFORM.pd)


Próxima Aula
Página de MAC 337/5900
Página do Fabio
Página do DCC