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)