processamento de áudio em tempo real em dispositivos ...ajb/projeto/defesa-ajb.pdf ·...

33
Introdu¸c˜ ao Metodologia Arduino GPU Android Conclus˜ ao Processamento de ´ audio em tempo real em dispositivos computacionais de alta disponibilidade e baixo custo Andr´ e J. Bianchi 21/10/2013 1 / 33

Upload: dinhhanh

Post on 16-Dec-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Introducao Metodologia Arduino GPU Android Conclusao

Processamento de audio em tempo real emdispositivos computacionais de alta disponibilidade

e baixo custo

Andre J. Bianchi

21/10/2013

1 / 33

Introducao Metodologia Arduino GPU Android Conclusao

1 Introducao

2 Metodologia

3 Arduino

4 GPU

5 Android

6 Conclusao

2 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Proposta de pesquisa

DSPADC DACx (n) y (n ) y (t )x (t )

f s = 1__T

f s = 1__T

Objetivo:

Avaliacao do desempenho . . .

. . . de diferentes dispositivos computacionais . . .

. . . para processamento de audio em tempo real.

3 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Metodologia desenvolvida

Passos preliminares:

Identificacao de modelos computacionais.

Escolha de dispositivos.

Escolha de algoritmos de processamento em tempo real.

Metricas e metodos para avaliacao de desempenho.

Experimentacao:

Entrada, saıda e agendamento.

Testes e resultados.

Analise.

4 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Identificacao de modelos computacionais de interesse

Criterios gerais:

Baixo custo e alta disponibilidade.

Licencas de uso.

Expressao computacional.

Criterios “musicais”:

Entrada e saıda de audio.

Sensores.

Mobilidade.

5 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Escolha de modelos computacionais e dispositivos

Microcontroladores: Arduino.

Processadores paralelos: Placas GPU.

Dispositivos moveis: Sistema operacional Android.

6 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Escolha de algoritmos de processamento em tempo real

Transformada Rapida de Fourier (FFT):

X (k) =

{Ek + e

−2πiN

kOk se k < N2

Ek−N2

+ e−2πiN

(k−N2

)Ok−N2

se k ≥ N2

Convolucao no domınio do tempo:

w = x ∗ h ⇒ wr =N−1∑m=0

xmhr−m ⇒ Wk = XkHk .

Sıntese aditiva:

y(n) =K∑

k=1

rk(n) sin

(2πfkn

R

), n ≥ 0.

Phase Vocoder: FFT + Sıntese aditiva.7 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Metricas e metodos para avaliacao de desempenho

Parametros determinantes da complexidade computacional:

Tamanho do bloco (perıodo em amostras).

Parametros especıficos de cada algoritmo.

Metricas de avaliacao:

Tempo de processamento de um bloco de amostras.

Instancia maxima viavel em tempo real.

8 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Arduino

Microcontrolador Atmel AVR ATmega328P:

CPU RISC, 16 MHz, 8 bits.

2 KB SRAM.

Portas digitais com ADC e PWM.

9 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Entrada e saıda de audio e agendamento (ATMega328P)

Caracterısticas gerais:

ADC de 8 e 10 bits, ate ≈ 80 KHz.

PWM com 8 ou 16 bits.

Agendamento por interrupcao.

Configuracoes dos testes:

Entrada e saıda de 8 bits.

Frequencia de operacao: 31250 Hz.

10 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Convolucao no Arduino

0

1

2

3

4

5

6

7

8

9

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Te

mp

o d

e s

inte

se

(m

s)

Ordem do filtro

Convolucao no dominio do tempo (mult/div)

0

1

2

3

4

5

6

7

8

9

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Te

mp

o d

e s

inte

se

(m

s)

Ordem do filtro

Convolucao no dominio do tempo (bit-shifting var.)

0

1

2

3

4

5

6

7

8

9

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Te

mp

o d

e s

inte

se

(m

s)

Ordem do filtro

Convolucao no dominio do tempo (bit-shifting const.)

bloco de 32 amostrasbloco de 64 amostras

bloco de 128 amostrasbloco de 256 amostras

11 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Sıntese aditiva no Arduino

0

1

2

3

4

5

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Tem

po d

e s

inte

se (

ms)

Numero de osciladores

Sintese Aditiva em Arduino (usando um loop)

0

1

2

3

4

5

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Tem

po d

e s

inte

se (

ms)

Numero de osciladores

Sintese Aditiva em Arduino (using inline code)

bloco de 32 amostrasbloco de 64 amostras

bloco de 128 amostras

12 / 33

Introducao Metodologia Arduino GPU Android Conclusao

FFT no Arduino (a 1953 Hz)

0

50

100

150

200

250

300

... 64 128 256 512

Tem

po d

e a

nalis

e (

ms)

Tamanho do bloco de amostras

FFT no Arduino (R=1953 Hz)

fft usando sin()fft com consulta a tabela

periodo teorico do ciclo DSP

13 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Processamento de audio em tempo real em Arduino

Pontos importantes a serem observados:

Configuracao de relogios e pre-escalonadores.

Escolha dos tipos (byte, unsigned long, int, float, etc).

Uso de lacos e condicionais.

Consulta a variaveis e vetores.

Restricao das instancias dos algoritmos.

14 / 33

Introducao Metodologia Arduino GPU Android Conclusao

GPU: Graphics Processing Unit

15 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Entrada, saıda e agendamento na GPU

INPUT

Pd GPU cores

INPUT

OUTPUT

Host

Tim

e

GPU

Host memory GPU memory

memcpy(dptr, hptr, n, hostToDevice)

Pd GPU cores

Host memory GPU memory

INPUT INPUT

Pd GPU cores

Host memory GPU memory

INPUT XXXXXX

run_kernel(dptr, n)

Pd GPU cores

Host memory GPU memory

INPUT OUTPUT

memcpy(hptr, dptr, n, deviceToHost)

Pd GPU cores

Host memory GPU memory

OUTPUTOUTPUT

Entrada, saıda e agendamento:

Pure Data.

Medicao dos tempos de:

Transferencia de memoria.

Execucao do programa.

Total de ida e volta.

16 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Modelos de placa e implementacoes

GF100GL GTX275 GTX400

CUDA cores 256 240 448

Memoria RAM (MB) 2000 896 1280

Banda de memoria (GB/s) 89.6 127.0 133.9

Implementacoes paralelas:

Convolucao.

FFT (da API).

Phase Vocoder (FFT + Sıntese Aditiva).

17 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Convolucao na GPU

2

4

6

8

10

... 0,37 0,74 1,48 2,97

Dura

cao (

s)

Periodo do bloco (s)

Tempo de convolucao - todas as placas

GTX275GTX470

GF100GLrestricao de tempo real

18 / 33

Introducao Metodologia Arduino GPU Android Conclusao

FFT na GPU

0

0.5

1

1.5

2

2.5

3

... 0,37 0,74 1,48 2,97

Du

raca

o (

s)

Periodo do bloco (s)

Tempo de roundtrip da FFT - GTX275

0

0.5

1

1.5

2

2.5

3

... 0,37 0,74 1,48 2,97

Du

raca

o (

s)

Periodo do bloco (s)

Tempo de roundtrip da FFT - GTX470

0

0.5

1

1.5

2

2.5

3

... 0,37 0,74 1,48 2,97

Du

raca

o (

s)

Periodo do bloco (s)

Tempo de roundtrip da FFT - GF100GL

hospedeiro para dispositivotempo de kernel

dispositivo para hospedeiroroundtrip

restricao de tempo real

19 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Sıntese aditiva do Phase Vocoder na GPU

5

10

15

20

25

30

... 0,37 0,74 1,48 2,97

Du

raca

o (

s)

Periodo do bloco (s)

Tempo de sintese do PV - GTX275

5

10

15

20

25

30

... 0,37 0,74 1,48 2,97

Du

raca

o (

s)

Periodo do bloco (s)

Tempo de sintese do PV - GTX470

5

10

15

20

25

30

... 0,37 0,74 1,48 2,97

Du

raca

o (

s)

Periodo do bloco (s)

Tempo de sintese do PV - GF100GL

1. interpolacao cubica2. interpolacao linear3. consulta truncada

4. funcao seno5. interpolacao de textura

sem calculorestricao de tempo real

20 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Processamento de audio em tempo real em GPU

Algumas conclusoes:

Modelos nao profissionais podem valer a pena.

Tempo de transferencia e da FFT sao similares.

Cuidado com o uso de operacoes da GPU.

21 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Processamento em tempo real em Android

Kernel do Linux.

Entrada de audio:microfone, chamada,arquivo, rede, etc.

Saıda de audio: 8 e 16bits.

Agendamento da API.

22 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Aplicativo para Android e testes

Cenario dos testes:

Chamado com instrucoes.

Envio dos resultados poremail.

35 aparelhos testados.

14 algoritmos em 2 fases.

23 / 33

Introducao Metodologia Arduino GPU Android Conclusao

FFT no Android (API 2)

0

20

40

60

80

100

120

140

160

180

512 1024 2048 4096 8192

Dura

tion (

ms)

Block size

Tempo de execucao da rotina DSP - Algoritmo FFT - API 2 (blocos maiores)

GT-I8150BXT320

LG-P698f (2)MK16i

GT-P1000LMB860

LG-P500h (1)GT-S5360L

LG-P698f (1)GT-I9000B

GT-S5360BBlade

LG-P500h (2)Lenovo A750

GT-S5830iGT-I8530

R800iDSP period

24 / 33

Introducao Metodologia Arduino GPU Android Conclusao

FFT no Android (API 4)

0

20

40

60

80

100

120

140

160

180

512 1024 2048 4096 8192

Dura

tion (

ms)

Block size

Tempo de execucao da rotina DSP - Algoritmo FFT - API 4 (blocos maiores)

MZ607Nexus 7 (1)GT-S7562GT-I8190LGT-I9000B

Nexus 4Galaxy Nexus

MB526Transformer TF101

GT-I9300 (2)

GT-I9300 (3)LG-P990

ST25aTransformer Prime TF201

Nexus 7 (2)GT-I9300 (1)

LT26iNB0026

DSP period

25 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Convolucao no Android (API 2)

0

50

100

150

200

250

GT-I8150B

XT320

LG-P698f (2)

MK16i

GT-P1000L

MB860

LG-P500h (1)

GT-S5360L

LG-P698f (1)

GT-I9000B

GT-S5360B

Blade

LG-P500h (2)

Lenovo A750

GT-S5830i

GT-I8530

R800i

Num

ero

de a

mostr

as

Valor medio do tamanho maximo de bloco para convolucao em tempo real - API 2

26 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Convolucao no Android (API 4)

0

50

100

150

200

250

MZ607

Nexus 7 (1)

GT-S7562

GT-I8190L

GT-I9000B

Nexus 4

Galaxy N

exus

MB526

Transformer TF101

GT-I9300 (2)

GT-I9300 (3)

LG-P990

ST25a

Transformer Prim

e TF201

Nexus 7 (2)

GT-I9300 (1)

LT26i

NB0026

Num

ero

de a

mostr

as

Valor medio do tamanho maximo de bloco para convolucao em tempo real - API 4

27 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Sıntese aditiva no Android (API 2)

0

20

40

60

80

100

120

140

GT-I8150B

XT320

LG-P698f (2)

MK16i

GT-P1000L

MB860

LG-P500h (1)

GT-S5360L

LG-P698f (1)

GT-I9000B

GT-S5360B

Blade

LG-P500h (2)

Lenovo A750

GT-S5830i

GT-I8530

R800i

Num

ero

de o

scila

dore

sValor medio do numero maximo de osciladores na Sintese Aditiva - API 2

Funcao sin() da APIconsulta truncada

consulta c/ interpolacao linearconsulta c/ interpolacao cubica

28 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Sıntese aditiva no Android (API 4)

0

20

40

60

80

100

120

140

MZ607

Nexus 7 (1)

GT-S7562

GT-I8190L

GT-I9000B

Nexus 4

Galaxy N

exus

MB526

Transformer TF101

GT-I9300 (2)

GT-I9300 (3)

LG-P990

ST25a

Transformer Prim

e TF201

Nexus 7 (2)

GT-I9300 (1)

LT26i

NB0026

Num

ero

de o

scila

dore

sValor medio do numero maximo de osciladores na Sintese Aditiva - API 4

Funcao sin() da APIconsulta truncada

consulta c/ interpolacao linearconsulta c/ interpolacao cubica

29 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Processamento de audio em tempo real em Android

Pontos importantes a serem observados:

Heterogeneidade de capacidade computacional.

Versao da API influencia o desempenho.

30 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Consideracoes finais

A metodologia apresentada pode ser usada para avaliacao dequalquer dispositivo computacional.

Foram estudados modelos com possibilidades e restricoesdistintas.

Foram evidenciadas as caracterısticas e o desempenhode cadaum para o processamento de audio em tempo real.

31 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Publicacoes e apresentacoes em congressos

2012:

Bianchi (2012). Processamento de audio em tempo real em sistemasAndroid. Terceiro Workshop em Musica Ubıqua.

Bianchi e Queiroz (2012a). Measuring the performance of realtime DSPusing pure data and gpu. Proceedings of the International ComputerMusic Conference 2012, pp. 124-127.

Bianchi e Queiroz (2012b). On the performance of real-time DSP onAndroid devices. Proceedings of the 9th Sound and Music ComputingConference, pp. 113-120.

2013:

Bianchi e Queiroz (2013). Real time digital audio processing usingArduino. Proceedings of the Sound and Music Computing Conference2013, pp. 538-545.

Carvalho Jr, Rosan, Bianchi e Queiroz (2013). FFT benchmark onAndroid devices: Java versus JNI. Proceedings of the 14th BrazilianSymposium on Computer Music. (a ser publicado)

32 / 33

Introducao Metodologia Arduino GPU Android Conclusao

Fim!

Obrigado pela atencao!

Contato: [email protected]

Grupo de Computacao Musical do IME/USP:http://compmus.ime.usp.br/

Esta apresentacao: http://www.ime.usp.br/~ajb/

33 / 33