Processamento de sinais em Python
Uma introdução com ênfase em aplicações em áudio

Danilo de Jesus da Silva Bellini (Audi...
●

c/ Pyth
o m on
AudioLazy
es
2e
mo
có 3
dig
DSP (Digital Signal Processing) para áudio
o
–

Análise
●

MIR (Music Inform...
Resultados cobertura de código
Oráculos
(Testes automatizados)

(NumPy, SciPy)

--------------- coverage: platform linux2,...
Parte 1
Como funciona um teclado
sintetizador?
Talk is cheap.
Show me the code.
(Linus Torvalds)

Foz do Iguaçu – PR – Pro...
“Hello world” em áudio
●

Tocar uma senóide
–

Console

from audiolazy import *
from audiolazy import *

(e.g. IPython)

r...
Notas/Alturas e MIDI Pitch
●

Pitch (notas/alturas)
–

D = Ré

–

F = Fá

–

G = Sol

–

A = Lá

–

B = Si

–

–

●

“Cb4”...
Controle e tipos de síntese
●

ControlStream

In [1]: data = ControlStream(42)
In [1]: data = ControlStream(42)

–

Proper...
Parte 2
Funcionamento do altofalante e
Representação do áudio

Foz do Iguaçu – PR – Processamento de sinais em Python
2013...
Container para áudio
●

Tempo real
–

Amostras (dados/elementos) inexistentes...
●
●

Ocorre em áudio e
em vídeos, mas
não...
Classe Stream
In [1]: data = Stream(range(7))
In [1]: data = Stream(range(7))
●

Iterável

In [2]: blks = data.blocks(size...
Parte 3
Efeito “wah”, knob guitarra, transições

Filtros digitais e a Transformada Z

Foz do Iguaçu – PR – Processamento d...
Filtros LTI
(Lineares e invariantes no tempo)
“Digital signal processing is mainly
based on linear time-invariant
systems....
Transformada Z
●

Definição:

●

Interpretação:

Atraso em k
amostras!

In [1]: from audiolazy import z, inf
In [1]: from ...
Objeto “z”
In [1]: from audiolazy import z, Stream, maverage
In [1]: from audiolazy import z, Stream, maverage
In [2]: M =...
Filtros prontos!
●

AudioLazy

Filtr
Coe os varia
ntes
parc ficien
no t
tes (
elas
e mp
fato
“a *
r
o
obje z ** -k” es “a”...
Plot (AudioLazy + MatPlotLib)!
●

DTFT - Caso particular da transformada Z
–

●

Método plot dos filtros
–

●

O valor de ...
Parte 4
Análise
MIR
(Music Information Retrieval)
Retrieval)
O que é “altura” / “pitch”?
Como um afinador de guitarra func...
Pitch – Shepard
●
●

Exemplo no GitHub
Cientista propõe dividir
o “pitch” em duas
dimensões:
–

Altura (pitch height)
●

–...
Série harmônica
●

F0, 2F0, 3F0, 4F0 …
–

100 Hz, 200 Hz, 300 Hz...

Inteiros?
Racionais?
Primos?
2+
oitava

Comb!

freqs ...
Coletando a altura
●

ZCR (Taxa de cruzamento no zero)

●

DFT (Transformada Discreta de Fourier)

●

AMDF (Average Magnit...
Autocorrelação (numpy.correlate)
Transcrição por envoltória dinâmica

Foz do Iguaçu – PR – Processamento de sinais em Pyth...
Decomposição cromática
from __future__ import division
from __future__ import division
from audiolazy import *
from audiol...
Cromagrama

Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Envoltória espectral
LPC - Predição Linear

Formantes
Pode ser
utilizado para
classificação
de vogais
from audiolazy impor...
Parte 5
“Interdisciplinaridade interna”

Cálculo numérico
Geração de imagens

Foz do Iguaçu – PR – Processamento de sinais...
Fibonacci
●

h[0] = 0

●

h[1] = 1

●

h[n] = h[n-1] + h[n-2]
–

●

Entrada [0, 1, 0, 0, 0, 0, ...] aplicado a esse filtro...
Polinômios
●

Baseados em dicionário

In [7]: (x + x ** 2 + x ** -.5)(4)
In [7]: (x + x ** 2 + x ** -.5)(4)
Out[7]: 20.5
O...
Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Foz do Iguaçu – PR – Processamento de sinais em Python
2013-10-16 – Danilo J. S. Bellini – @danilobellini
Licenças
●

Linguagem
–

●

Python (CPython) – PSFL

Processamento de Sinais
–
–

PyAudio (reprodução e gravação de áudio)...
Obrigado!
Perguntas?

Fork me on GitHub
https://github.com/danilobellini/audiolazy
Foz do Iguaçu – PR – Processamento de s...
Próximos SlideShares
Carregando em…5
×

(2013-10-16) [LatinoWare] Processamento de sinais em Python

1.085 visualizações

Publicada em

Slides da palestra apresentada na LatinoWare 2013. Segue abaixo a descrição da palestra:

Como funciona um afinador de guitarra? E efeitos de uma pedaleira digital (e.g. distorção, wah, flanger, compressor)? Um teclado sintetizador? Essas e outras aplicações para a área de processamento de sinais na atualidade fazem parte desta palestra, com explicações e exemplos práticos preparados. A apresentação serve de introdução à área de processamento de sinais, enfatizando suas aplicações em áudio e utilizando para isso apenas Software Livre, incluindo o PyAudio para gravação e reprodução de áudio, a AudioLazy para síntese e processamento de sinais, o MatPlotLib para exibição de gráficos, o NumPy para FFT e auxílio no processamento em bloco com vetores, e o SciPy para análise e projeto de filtros (subpacotes de otimização e processamento de sinais).

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.085
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
16
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

(2013-10-16) [LatinoWare] Processamento de sinais em Python

  1. 1. Processamento de sinais em Python Uma introdução com ênfase em aplicações em áudio Danilo de Jesus da Silva Bellini (AudioLazy Developer) danilo.bellini [at] gmail.com – Twitter: @danilobellini https://pypi.python.org/pypi/audiolazy Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  2. 2. ● c/ Pyth o m on AudioLazy es 2e mo có 3 dig DSP (Digital Signal Processing) para áudio o – Análise ● MIR (Music Information Retrieval) – – ● Síntese Processamento Expressividade de código – ● Documentação (Sphinx) http://pythonhosted.org/audiolazy Facilita prototipação, simulação Tempo real (latência de aproximadamente 35ms c/ o Jack) – Possibilita uso em aplicações finais Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini !
  3. 3. Resultados cobertura de código Oráculos (Testes automatizados) (NumPy, SciPy) --------------- coverage: platform linux2, python 2.7.3-final-0 ------------------------------ coverage: platform linux2, python 2.7.3-final-0 ---------------Name Stmts Miss Branch BrPart Cover Missing Name Stmts Miss Branch BrPart Cover Missing ----------------------------------------------------------------------------------------------------------------------Mock __init__ 44 1 18 4 92% 72 __init__ 44 1 18 4 92% 72 lazy_analysis 125 3 60 2 97% 211, 259-260 lazy_analysis 125 3 60 2 97% 211, 259-260 lazy_auditory 60 0 14 0 100% lazy_auditory 60 0 14 0 100% lazy_compat 42 5 6 1 88% 43, 67-68, 78-79 lazy_compat 42 5 6 1 88% 43, 67-68, 78-79 lazy_core 175 7 80 9 94% 124, 136-138, 346, 471, 478 lazy_core 175 7 80 9 94% 124, 136-138, 346, 471, 478 lazy_filters 521 176 247 115 62% 57, 64, 85, 95, [...] lazy_filters 521 176 247 115 62% 57, 64, 85, 95, [...] lazy_io 156 43 58 28 67% 89, 141-157, 161, [...] lazy_io 156 43 58 28 67% 89, 141-157, 161, [...] lazy_itertools 41 7 20 11 70% 39, 60-61, 66, 108-111 lazy_itertools 41 7 20 11 70% 39, 60-61, 66, 108-111 lazy_lpc 128 15 42 7 87% 121, 135-136, [...] lazy_lpc 128 15 42 7 87% 121, 135-136, [...] lazy_math 61 1 28 0 99% 133 lazy_math 61 1 28 0 99% 133 lazy_midi 54 5 26 3 90% 70, 111, 150, 156, 158 lazy_midi 54 5 26 3 90% 70, 111, 150, 156, 158 lazy_misc 110 9 62 10 89% 156-157, 194, [...] lazy_misc 110 9 62 10 89% 156-157, 194, [...] lazy_poly 191 2 126 3 98% 396-397 lazy_poly 191 2 126 3 98% 396-397 lazy_stream 175 2 76 4 98% 59, 738 lazy_stream 175 2 76 4 98% 59, 738 lazy_synth 251 32 124 40 81% 278-300, 467, 469, [...] lazy_synth 251 32 124 40 81% 278-300, 467, 469, [...] lazy_text 102 33 70 29 64% 132-147, 205-229, [...] lazy_text 102 33 70 29 64% 132-147, 205-229, [...] ----------------------------------------------------------------------------------------------------------------------TOTAL 2236 341 1057 266 82% TOTAL 2236 341 1057 266 82% ========================= 2310 passed in 22.36 seconds ========================= ========================= 2310 passed in 22.36 seconds ========================= Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  4. 4. Parte 1 Como funciona um teclado sintetizador? Talk is cheap. Show me the code. (Linus Torvalds) Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  5. 5. “Hello world” em áudio ● Tocar uma senóide – Console from audiolazy import * from audiolazy import * (e.g. IPython) rate = 44100 rate = 44100 s, Hz = sHz(rate) s, Hz = sHz(rate) Multith rea d! player = AudioIO() player = AudioIO() snd = sinusoid(440 * Hz).limit(2 * s) snd = sinusoid(440 * Hz).limit(2 * s) th = player.play(snd, rate=rate) # an AudioThread th = player.play(snd, rate=rate) # an AudioThread player.close() # Kill th (AudioIO arg isn't true) player.close() # Kill th (AudioIO arg isn't true) – Scripts ● Gerenciadores de contexto with AudioIO(True) with AudioIO(True) player.play(snd, player.play(snd, as player: # Wait threads as player: # Wait threads rate=rate) rate=rate) Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  6. 6. Notas/Alturas e MIDI Pitch ● Pitch (notas/alturas) – D = Ré – F = Fá – G = Sol – A = Lá – B = Si – – ● “Cb4” (dó bemol) é a mesma nota que B3 MIDI Pitch – Define 69 como A4 (lá central), deslocamento em semitons freq2str – Ignoram a alteração str2midi – Iniciam em dó midi2str – Oitavas – ● Funções para realizar conversões E = Mi – ● C = Dó – ● str2freq – midi2freq – freq2midi Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  7. 7. Controle e tipos de síntese ● ControlStream In [1]: data = ControlStream(42) In [1]: data = ControlStream(42) – Property “value” In [2]: data.take(5) In [2]: data.take(5) Out[2]: [42, 42, 42, 42, 42] Out[2]: [42, 42, 42, 42, 42] – Permite interatividade In [3]: data.value = -1 In [3]: data.value = -1 ● ● Tempo real Síntese In [4]: In [4]: Out[4]: Out[4]: – Aditiva (e.g. classe TableLookup) – data.take(5) data.take(5) [-1, -1, -1, -1, -1] [-1, -1, -1, -1, -1] Modulação ● Ring Modulation (Anel) – ● AM (Amplitude) – ● Senóide * (1 + Senóide) FM (Frequência ou fase) – – Senóide * Senóide Senóide(Senóide) Ex “ge em tch plo wx ”, tk s!!! Py in mu tho ter, sic n, 21 Subtrativa (e.g. modelo de Karplus-Strong) Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  8. 8. Parte 2 Funcionamento do altofalante e Representação do áudio Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  9. 9. Container para áudio ● Tempo real – Amostras (dados/elementos) inexistentes... ● ● Ocorre em áudio e em vídeos, mas não em imagens estáticas ...em tempo de compilação (dados a serem coletados) ...em tempo de execução (dados criados no futuro) – Duração possivelmente indefinida (endless) – Não deve ser necessário computar tudo para começar a apresentar o resultado ● ● Resultados parciais Para cada amostra de entrada, deve haver uma de saída – Minimizar lag (atraso) entre entrada e saída Laziness! Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  10. 10. Classe Stream In [1]: data = Stream(range(7)) In [1]: data = Stream(range(7)) ● Iterável In [2]: blks = data.blocks(size=3, hop=2) In [2]: blks = data.blocks(size=3, hop=2) ● Heterogêneo In [3]: [list(blk) for blk in blks] In [3]: [list(blk) for blk in blks] Out[3]: [[0, 1, 2], [2, 3, 4], [4, 5, 6]] Out[3]: [[0, 1, 2], [2, 3, 4], [4, 5, 6]] ● Lazy! (Avaliação tardia) ● Operadores (Elementwise/broadcast) ● Métodos (take, peek, limit, skip, map, filter, blocks) In In In In In In [1]: [1]: [2]: [2]: [3]: [3]: from audiolazy import Stream, inf from audiolazy import Stream, inf dados = Stream(5, 7, 1, 2, 5, 3, 2) # Periódico dados = Stream(5, 7, 1, 2, 5, 3, 2) # Periódico dados2 = Stream(0, 1) # Idem dados2 = Stream(0, 1) # Idem In [4]: In [4]: Out[4]: Out[4]: (dados (dados [5, 8, [5, 8, + dados2).take(15) + dados2).take(15) 1, 3, 5, 4, 2, 6, 7, 2, 2, 6, 3, 3, 5] 1, 3, 5, 4, 2, 6, 7, 2, 2, 6, 3, 3, 5] In [5]: In [5]: Out[5]: Out[5]: (_ * Stream(1 + 2j, -3j, 7).imag).map(int).take(inf) (_ * Stream(1 + 2j, -3j, 7).imag).map(int).take(inf) [2.0, 0.0, 14] [2.0, 0.0, 14] Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  11. 11. Parte 3 Efeito “wah”, knob guitarra, transições Filtros digitais e a Transformada Z Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  12. 12. Filtros LTI (Lineares e invariantes no tempo) “Digital signal processing is mainly based on linear time-invariant systems.” systems.” (Dutilleux, Dempwolf, Holters e Zölzer DAFx, segunda edição, capítulo 4, p. 103) Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  13. 13. Transformada Z ● Definição: ● Interpretação: Atraso em k amostras! In [1]: from audiolazy import z, inf In [1]: from audiolazy import z, inf In [2]: sig = [1, 2, 3, 4, 5, 6, 7] In [2]: sig = [1, 2, 3, 4, 5, 6, 7] In [3]: In [3]: Out[3]: Out[3]: (z ** (z ** [0.0, [0.0, -2)(sig).take(inf) -2)(sig).take(inf) 0.0, 1, 2, 3, 4, 5] 0.0, 1, 2, 3, 4, 5] In [4]: In [4]: Out[4]: Out[4]: (1 - z ** -2)(sig).take(inf) (1 - z ** -2)(sig).take(inf) [1.0, 2.0, 2, 2, 2, 2, 2] [1.0, 2.0, 2, 2, 2, 2, 2] Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  14. 14. Objeto “z” In [1]: from audiolazy import z, Stream, maverage In [1]: from audiolazy import z, Stream, maverage In [2]: M = 5 In [2]: M = 5 In [3]: media_movel_5 = (1 - z ** -M) / (M * (1 - z ** -1)) In [3]: media_movel_5 = (1 - z ** -M) / (M * (1 - z ** -1)) In [4]: acumulador = 1 / (1 - z ** -1) In [4]: acumulador = 1 / (1 - z ** -1) In [5]: In [5]: Out[5]: Out[5]: media_movel_5(Stream(5)).take(10) media_movel_5(Stream(5)).take(10) [1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0] [1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0] In [6]: acumulador(Stream(5)).take(10) In [6]: acumulador(Stream(5)).take(10) Out[6]: [5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0] Out[6]: [5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0] In [7]: maverage.recursive(4) In [7]: maverage.recursive(4) Out[7]: Out[7]: 0.25 - 0.25 * z^-4 0.25 - 0.25 * z^-4 ----------------------------------1 - z^-1 1 - z^-1 Filtros LTI, em geral: Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  15. 15. Filtros prontos! ● AudioLazy Filtr Coe os varia ntes parc ficien no t tes ( elas e mp fato “a * r o obje z ** -k” es “a” e ! tos S ) po m trea dem s m) er – Média móvel – Ressonadores – Comb – Passa-baixas – Passa-altas – ● Gammatone (Patterson-Holdsworth, audição) Scipy.signal – Butterworth – Chebyshev – JIT! Elíptico Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  16. 16. Plot (AudioLazy + MatPlotLib)! ● DTFT - Caso particular da transformada Z – ● Método plot dos filtros – ● O valor de z está na circunferência complexa unitária Resposta em frequência Método zplot – Estabilidade do filtro – X Pólos: “X” ● – Raízes do denominador X Zeros: “O” ● Raízes do numerador Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  17. 17. Parte 4 Análise MIR (Music Information Retrieval) Retrieval) O que é “altura” / “pitch”? Como um afinador de guitarra funciona? Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  18. 18. Pitch – Shepard ● ● Exemplo no GitHub Cientista propõe dividir o “pitch” em duas dimensões: – Altura (pitch height) ● – Croma (pitch chroma) ● ● ● Dimensão “linear” Dimensão “circular” Lembra Escher → “Hélice” Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  19. 19. Série harmônica ● F0, 2F0, 3F0, 4F0 … – 100 Hz, 200 Hz, 300 Hz... Inteiros? Racionais? Primos? 2+ oitava Comb! freqs = [str2freq(note) for note in "E2 G#2 B2".split()] # Mi maior freqs = [str2freq(note) for note in "E2 G#2 B2".split()] # Mi maior filt = ParallelFilter(comb.tau(freq_to_lag(freq * Hz), .1 * s) filt = ParallelFilter(comb.tau(freq_to_lag(freq * Hz), .1 * s) for freq in freqs) Foz do for freqPR –freqs) Iguaçu – in Processamento de sinais em Python filt.plot(samples=8192, rate=rate, min_freq=220*Hz, max_freq=880*Hz).show() filt.plot(samples=8192, rate=rate, min_freq=220*Hz, max_freq=880*Hz).show() 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  20. 20. Coletando a altura ● ZCR (Taxa de cruzamento no zero) ● DFT (Transformada Discreta de Fourier) ● AMDF (Average Magnitude Difference Function) Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  21. 21. Autocorrelação (numpy.correlate) Transcrição por envoltória dinâmica Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  22. 22. Decomposição cromática from __future__ import division from __future__ import division from audiolazy import * from audiolazy import * def cromafb(classes=12, rate): def cromafb(classes=12, rate): s, Hz = sHz(rate) s, Hz = sHz(rate) cg = gammatone_erb_constants(4)[0] cg = gammatone_erb_constants(4)[0] fb = 440 fb = 440 return [ return [ ParallelFilter( ParallelFilter( gammatone.sampled(f*Hz, cg*erb(f)) gammatone.sampled(f*Hz, cg*erb(f)) for f in octaves(fb * 2**(n/classes)) for f in octaves(fb * 2**(n/classes)) ) for n in xrange(classes) ) for n in xrange(classes) ] ] ● Filtros gammatone – ● Paralelo rate = 44100 rate = 44100 bank = cromafb(rate=rate) bank = cromafb(rate=rate) bank[0].plot(freq_scale="log", rate=rate) bank[0].plot(freq_scale="log", rate=rate) Oitavas In [1]: from audiolazy import octaves In [1]: from audiolazy import octaves In [2]: octaves(440) In [2]: octaves(440) Iguaçu – PR – Processamento de sinais em Python Foz do Out[2]: [27.5, 55.0, 110.0, 220.0, 440, 880, 1760, 3520, 7040, 14080] Out[2]: [27.5, 55.0, 110.0, 220.0, 440, 880, 1760, 3520, 7040, 14080] 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  23. 23. Cromagrama Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  24. 24. Envoltória espectral LPC - Predição Linear Formantes Pode ser utilizado para classificação de vogais from audiolazy import * from audiolazy import * rate = 22050 rate = 22050 s, Hz = sHz(rate) s, Hz = sHz(rate) size = 512 size = 512 table = sin_table.harmonize({1: 1, 2: 5, 3: 3, 4: 2, 6: 9, 8: 1}).normalize() table = sin_table.harmonize({1: 1, 2: 5, 3: 3, 4: 2, 6: 9, 8: 1}).normalize() data = table(str2freq("Bb3") data = table(str2freq("Bb3") filt = lpc(data, order=14) # filt = lpc(data, order=14) # G = 1e-2 # Ganho apenas para G = 1e-2 # Ganho apenas para * Hz).take(size) # Nota si bemol da 3a oitava * Hz).take(size) # Nota si bemol da 3a oitava Filtro de análise Filtro de análise alinhamento na visualização com a DFT alinhamento na visualização com a DFT # Filtro de síntese # Filtro de síntese do Iguaçu – PR – Processamento de sinais em Python Foz (G / filt).plot(blk=data, rate=rate, samples=1024, unwrap=False).show() (G / filt).plot(blk=data, rate=rate, samples=1024, @danilobellini 2013-10-16 – Danilo J. S. Bellini – unwrap=False).show()
  25. 25. Parte 5 “Interdisciplinaridade interna” Cálculo numérico Geração de imagens Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  26. 26. Fibonacci ● h[0] = 0 ● h[1] = 1 ● h[n] = h[n-1] + h[n-2] – ● Entrada [0, 1, 0, 0, 0, 0, ...] aplicado a esse filtro digital Função impulse() h [n]=h[n−1]+ h[ n−2]+ δ[ n−1] In [2]: (z ** -1 / (1 In [2]: (z ** -1 / (1 ...: ...: Out[2]: [0, 1, 1, 2, 3, Out[2]: [0, 1, 1, 2, 3, z ** -1 - z ** -2))(impulse(zero=0, z ** -1 - z ** -2))(impulse(zero=0, one=1), one=1), 5, 8, 13, 21, 34, 55, 89, 144, 233, 5, 8, 13, 21, 34, 55, 89, 144, 233, zero=0).take(17) zero=0).take(17) 377, 610, 987] 377, 610, 987] Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  27. 27. Polinômios ● Baseados em dicionário In [7]: (x + x ** 2 + x ** -.5)(4) In [7]: (x + x ** 2 + x ** -.5)(4) Out[7]: 20.5 Out[7]: 20.5 – Memória – Expoente negativo (Laurent) – Expoente fracionário (soma de potências) ● Objeto “x” ● Interpolação – Lagrange In [9]: In [9]: Out[9]: Out[9]: lagrange.poly([(0, 0), (1, 1)]) lagrange.poly([(0, 0), (1, 1)]) x x In [10]: lagrange.poly([(0, 0), (1, 1), (2, 2)]) In [10]: lagrange.poly([(0, 0), (1, 1), (2, 2)]) Out[10]: x Out[10]: x In [11]: lagrange.poly([(0, 0), (1, 1), (2, 4)]) In [11]: lagrange.poly([(0, 0), (1, 1), (2, 4)]) Out[11]: x^2 Out[11]: x^2 In [9]: lagrange.poly([(1, 3), (3, 14), (45, 0)]) In [9]: lagrange.poly([(1, 3), (3, 14), (45, 0)]) Out[9]: -2.89773 + 6.0303 * x - 0.132576 * x^2 Out[9]: -2.89773 + 6.0303 * x - 0.132576 * x^2 Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  28. 28. Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  29. 29. Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  30. 30. Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  31. 31. Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  32. 32. Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  33. 33. Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  34. 34. Licenças ● Linguagem – ● Python (CPython) – PSFL Processamento de Sinais – – PyAudio (reprodução e gravação de áudio) – MIT – MatPlotLib (visualização gráfica) – PSFL – NumPy (FFT, álgebra linear) – BSD 3-Clause – ● AudioLazy (análise, síntese e processamento) – GPLv3 SciPy (signal) – BSD 3-Clause GUI – – [Tcl/]Tk – BSD – ● wxPython/wxWidgets – wxWindows Tkinter – PSFL Outros – py.test (testes automatizados) – MIT – music21 (musicologia) – LGPLv3+ – Sphinx (documentação) – BSD Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini
  35. 35. Obrigado! Perguntas? Fork me on GitHub https://github.com/danilobellini/audiolazy Foz do Iguaçu – PR – Processamento de sinais em Python 2013-10-16 – Danilo J. S. Bellini – @danilobellini

×