Estudos de caso sobre processamento de ´ audio em tempo real em plataformas
computacionais de alta disponibilidade e baixo custo
Andr´e J. Bianchi
08/05/2013
Processamento de ´audio em tempo real Algoritmos
Arduino GPU Android
Processamento de ´audio em tempo real
Exemplo de processamento digital de ´ audio
FUNDAMENTALS OF DIGITAL SIGNAL PROCESSING 21
DAFX
ADC DAC
x(n) y(n) y(t)
x(t) fs = 1__
T fs = 1__
T
0.5
0 500
−0.05 0 0.05
x(t)
t in μs → −0.050 10 20 0
0.05
n → x(n)
0 10 20
−0.05 0 0.05
n → y(n)
0 500
−0.05 0 0.05
t in μs → y(t) T
Figure 1.11 Sampling and quantizing by ADC, digital audio effects and reconstruction by DAC.
fS=1/T (sampling rate). The sampling frequency reflects the number of samples per second in Hertz (Hz). According to the sampling theorem, it has to be chosen as twice the highest frequency fmax(signal bandwidth) contained in the analog signal, namelyfS>2·fmax. If we are forced to use a fixed sampling frequencyfS, we have to make sure that our input signal to be sampled has a bandwidth according tofmax=fS/2. If not, we have to reject higher frequencies by filtering with a lowpass filter which only passes all frequencies up tofmax. The digital signal is then passed to a DAFX box (digital system), which in this example performs a simple multiplication of each sample by 0.5 to deliver the output signaly(n)=0.5·x(n). This signaly(n)is then forwarded to a digital-to-analog converter DAC, which reconstructs the analog signaly(t ). The output signal y(t )has half the amplitude of the input signalx(t ).
Figure 1.12 shows some digital signals to demonstrate different graphical representations (see M-file 1.1). The upper part shows 8000 samples, the middle part the first 1000 samples and the lower part shows the first 100 samples out of a digital audio signal. Only if the number of samples inside a figure is sufficiently low, will the line with dot graphical representation be used for a digital signal.
M-file 1.1(figure1_03.m)
% Author: U. Z¨olzer
[x,FS,NBITS]=wavread(’ton2.wav’);
figure(1) subplot(3,1,1);
plot(0:7999,x(1:8000));ylabel(’x(n)’);
subplot(3,1,2);
plot(0:999,x(1:1000));ylabel(’x(n)’);
subplot(3,1,3);
stem(0:99,x(1:100),’.’);ylabel(’x(n)’);
xlabel(’n \rightarrow’);
Ciclo de processamento
I Entrada:
I (Convers˜ao Anal´ogico-Digital).
I Frequˆencia de amostragem e amplitude de espectro.
I Quantiza¸c˜ao e profundidade de bits.
I Sinal digital: x:N→ {0,1}b1.
I Processamento.
I Manipula¸c˜ao do sinal: an´alise, s´ıntese, recupera¸c˜ao de informa¸c˜ao, efeitos.
I Processamento em blocos, sobreposi¸c˜ao.
I Representa¸c˜oes: tempo e frequˆencia.
I Sa´ıda.
I Sinal digital: y:N→ {0,1}b2.
I Taxa de gera¸c˜ao de amostras e profundidade de bits.
I (Convers˜ao Digital-Anal´ogico).
Processamento em tempo real
Processamento em blocos:
I Per´ıodo do bloco: N amostras.
I Frequˆencia de amostragem: R Hz.
I Atraso m´ınimo: NR s.
I Fator de sobreposi¸c˜ao: M.
I Cada ciclo avan¸ca MN amostras ou MRN s.
Restri¸c˜oes de tempo real:
I O ciclo tem que ser executado periodicamente.
I O per´ıodo do ciclo tem que ser menor que tempo de computa¸c˜ao tem que ser menor que o per´ıodo do ciclo de processamento.
Contexto da pesquisa
Perguntas sobre processamento em tempo real:
I Quais plataformas podem ser utilizadas? Quais as restri¸c˜oes e possibilidades que cada uma delas possui?
I Como medir o desempenho de uma ferramenta para o processamento de ´audio em tempo real?
Proposta:
I Escolher plataformas de baixo custo e alta disponibilidade.
I Escolher uma s´erie de algoritmos de processamento de ´audio frequentemente utilizados.
I Investigar a implementa¸c˜ao e o desempenho dos algoritmos nas plataformas.
Escolha das Plataformas de processamento
Crit´erios de interesse para a ´area de computa¸c˜ao musical:
I Sensores.
I Mobilidade.
I Poder de processamento.
I Licen¸cas de uso.
I Express˜ao computacional.
Plataformas escolhidas:
I Arduino (microcontrolador).
I GPU (processamento paralelo).
I Android (sistemas m´oveis).
Algoritmos
Algoritmos representativos
Alguns algoritmos frequentemente utilizados em rotinas de manipula¸c˜ao de ´audio:
I Convolu¸c˜ao no dom´ınio do tempo.
I S´ıntese aditiva.
I FFT.
Convolu¸c˜ ao no dom´ınio no tempo (filtros FIR)
y[n] = 0
para k=0 at´e N, fa¸ca:
y[n] += b[k] * x[n-k]
S´ıntese aditiva
y[n] = 0
para k=1 at´e K, fa¸ca:
y[n] = r(k,n) * sin(f(k,n))
Transformada R´ apida de Fourier (FFT)
A FFT ´ e O (N log(N ))
Transformada Discreta de Fourier:
X(k) =
N−1
X
n=0
x(n)e−2πiN nk
=
N 2−1
X
m=0
x(2m)e−2πiN (2m)k
| {z }
Ek
+e−2πiN k
N 2−1
X
m=0
x(2m+ 1)e−2πiN (2m)k
| {z }
Ok
.
Transformada R´apida de Fourier:
X(k) =
(Ek +e−2πiN kOk sek< N2 Ek−N
2 +e−2πiN (k−N2)Ok−N
2 sek≥ N2
Perguntas sobre os algoritmos
I Quais parˆametros de cada algoritmo influenciam na complexidade?
I Qual ´e o tempo gasto para computar uma certa instˆancia de um algoritmo?
I Qual ´e a maior instˆancia comput´avel em tempo real?
I Quais as possibilidades e restri¸c˜oes de implementa¸c˜ao em cada plataforma?
Arduino
Arduino
O projeto Arduino
Caracter´ısticas principais:
I Estrutura minimal para interface com um microcontrolador.
I Baixo custo: 20-50 USD.
I Baixo consumo de energia.
I Licenciamento livre.
Microcontrolador Atmel AVR ATmega328P:
I CPU: unidade aritm´etica e registradores (16 MHz - 8 bits).
I Mem´orias: Flash (32 KB), SRAM (2 KB) e EEPROM (1 KB).
I Portas digitais de entrada (com ADC) e sa´ıda (com PWM).
Entrada de ´ audio: per´ıodo de amostragem
pr´e-escalonador Tconv (µs) T˜conv (µs) ˜fconv (≈KHz)
2 1,81 12,61 79,30
4 3,62 16,06 62,26
8 7,25 19,76 50,60
16 14,50 20,52 48,73
32 29,00 34,80 28,73
64 58,00 67,89 14,72
128 116,00 114,85 8,70
I Resolu¸c˜ao da fun¸c˜aomicros(): 4˜µs.
I R = 44.100˜Hz ⇒ 1/R≈22,67 µs.
I R = 31.250˜Hz ⇒ 1/R= 32,00 µs.
Entrada de ´ audio: ADC
Conversor anal´ogico-digital:
I Resolu¸c˜ao: 8 ou 10 bits.
I Tempo de convers˜ao: 13 a 260µs.
I Convers˜ao manual ou autom´atica.
Parˆametros escolhidos:
I Resolu¸c˜ao de 8 bits.
I Pr´e-escalonador igual a 8 (at´e 50 KHz).
Sa´ıda de ´ audio: Pulse Width Modulation (PWM)
0 1
0 1
Frequˆ encias de opera¸c˜ ao de um contador de 8 bits
pr´e-escalonador fincr (KHz) foverflow (Hz)
1 16.000 62.500
8 2.000 7.812
32 500 1.953
64 250 976
128 125 488
256 62,5 244
1024 15,625 61
Sa´ıda de ´ audio
PWM no ATmega328P:
I Modos de opera¸c˜ao: Faste Phase Correct.
I Pr´e-escalonador.
I 2 contadores de 8 bits e 1 de 16 bits.
I Interrup¸c˜ao poroverflow.
Parˆametros escolhidos:
I Fast PWM.
I Contador de 8 bits.
I Pr´e-escalonador igual a 1.
I Frequˆencia deoverflow: 16˜MHz / 1 / 28 = 62.500˜Hz.
I Taxa de gera¸c˜ao de amostras: 31.250˜Hz.
Convolu¸c˜ ao no Arduino (usando opera¸c˜ oes sobre bits)
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
Synth time (ms)
Order of the filter
Time-domain convolution on Arduino (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
Synth time (ms)
Order of the filter
Time-domain convolution on Arduino (variable pad)
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
Synth time (ms)
Order of the filter
Time-domain convolution on Arduino (constant pad) block size 32
rt period 32 block size 64 rt period 64 block size 128 rt period 128 block size 256 rt period 256
S´ıntese aditiva no Arduino: quantidade e tipos de opera¸c˜ ao utilizadas
0 1 2 3 4 5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Synth time (ms)
Number of oscilators
Operations in additive synth (R=31250/N=128)
mult/div
div var pad
rt period
S´ıntese aditiva no Arduino: uso de la¸cos
0 1 2 3 4 5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Synth time (ms)
Number of oscilators Additive Synthesis on Arduino (loop)
0 1 2 3 4 5
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Synth time (ms)
Number of oscilators Additive Synthesis on Arduino (inline)
block size 32 rt period 32 block size 64 rt period 64 block size 128 rt period 128
FFT no Arduino (a 1953 Hz)
0 50 100 150 200 250 300
... 64 128 256 512
Analysis time (ms)
Block size
FFT on Arduino (at 1953 Hz)
fft sin()
fft table rt period
Algumas conclus˜ oes sobre processamento de ´ audio em tempo real em Arduino
Detalhes de implementa¸c˜ao que fazem a diferen¸ca:
I Tipos utilizados (byte, unsigned long, int, float, etc) s˜ao fundamentais.
I Multiplica¸c˜ao/divis˜ao (de inteiros) demoram pelo menos o dobro que opera¸c˜oes sobre inteiros.
I A quantidade de la¸cos e condicionais faz diferen¸ca.
I Consulta a vari´aveis e vetores tamb´em faz diferen¸ca.
GPU
GPU: Graphics Processing Unit
Diferen¸cas gerais em rela¸c˜ ao ` a CPU
An´ alise de desempenho na GPU
Valores importantes:
I Tempo de transferˆencia de mem´oria (ida e volta).
I Tempo de execu¸c˜ao do programa.
I Tempo total (soma dos tempos acima).
Implementa¸c˜oes paralelas:
I FFT (da API).
I Phase Vocoder (FFT + S´ıntese Aditiva).
Placas utilizadas para testes
GF100GL GTX275 GTX400
CUDA cores 256 240 448
Mem´oria RAM (MB) 2000 896 1280
Banda de mem´oria (GB/s) 89.6 127.0 133.9
FFT na GPU
0 0.5 1 1.5 2 2.5 3
... 214 215 216 217
Duration (s)
Block size FFT roundtrip time - GTX275
0 0.5 1 1.5 2 2.5 3
... 214 215 216 217
Duration (s)
Block size FFT roundtrip time - GTX470
0 0.5 1 1.5 2 2.5 3
... 214 215 216 217
Duration (s)
Block size FFT roundtrip time - GF100GL
host to device kernel time device to host roundtrip rt period
FFT na GPU (zoom)
0 0.1 0.2 0.3 0.4 0.5 0.6
... 214 215 216 217
Duration (s)
Block size FFT roundtrip time - GTX275
0 0.1 0.2 0.3 0.4 0.5 0.6
... 214 215 216 217
Duration (s)
Block size FFT roundtrip time - GTX470
0 0.1 0.2 0.3 0.4 0.5 0.6
... 214 215 216 217
Duration (s)
Block size FFT roundtrip time - GF100GL
host to device kernel time device to host roundtrip rt period
Mais um algoritmo: Phase Vocoder
220 TIME-FREQUENCY PROCESSINGTransformation
Time Synthesis
n f
n
n
n1n2
Frequency
Analysis
Short-time Spectra
Figure 7.1 Digital audio effects based on analysis, transformation and synthesis (resynthesis).
Magnitude Phase Short-time Fourier transform
FFT
Windowing Time-domain
signal
Analysis StageSynthesis Stage
IFFT
Magnitude and Phase calculation
Overlap-add
Time-domain signal Time-frequency
Processing
Inverse short-time Fourier transform
Figure 7.2 Time-frequency processing based on the phase vocoder: analysis, transformation and synthesis.
1. An´alise:
I Janela deslizante de tamanho finito.
I FFTs consecutivas do sinalx(n).
I Espectro variante no tempo: X(n,k).
2. Transforma¸c˜ao: modifica¸c˜oes em |X(n,k)|e ϕ(X(n,k)).
3. S´ıntese: S´ıntese aditiva.
S´ıntese aditiva do Phase Vocoder na GPU
5 10 15 20 25 30
... 214 215 216 217
Duration (s)
Block size PV synth kernel time - GTX275
5 10 15 20 25 30
... 214 215 216 217
Duration (s)
Block size PV synth kernel time - GTX470
5 10 15 20 25 30
... 214 215 216 217
Duration (s)
Block size PV synth kernel time - GF100GL
1. cubic interp 2. linear interp 3. truncated 4. builtin sine 5. texture interp no calculation rt period
S´ıntese aditiva do Phase Vocoder na GPU (zoom)
1 2 3
214 215 216
Duration (s)
Block size PV synth kernel time - GTX275
1 2 3
214 215 216
Duration (s)
Block size PV synth kernel time - GTX470
1 2 3
214 215 216
Duration (s)
Block size PV synth kernel time - GF100GL
1. cubic interp 2. linear interp 3. truncated 4. builtin sine 5. texture interp no calculation rt period
Algumas conclus˜ oes sobre processamento de ´ audio em tempo real em GPU
I Tempo de transferˆencia de mem´oria ´e compar´avel ao da FFT.
I Diferen¸cas na implementa¸c˜ao fazem diferen¸ca:
I Consulta a tabela (truncada, ou com interpola¸c˜ao linear ou c´ubica).
I Consulta a tabela em mem´oria de textura.
I Fun¸c˜ao seno da API.
Android
Sistema operacional Android
O projeto Android
I Kernel do Linux.
I Drivers para muitos dispositivos.
I Aplicativos e API em Java (m´aquina virtual pr´opria).
I Conectividade e sensores.
I Licenciamento livre (com exce¸c˜ao de drivers).
Processamento em tempo real em Android
I Entrada de ´audio:
I Classe: AudioRecord.
I Microfones, ´audio da chamada (garante 1 canal, 16 bits).
I Processamento:
I M´etodo: scheduleAtFixedRate.
I Agendamento.
I Sa´ıda de ´audio:
I Classe: AudioTrack.
I 8 e 16 bits.
Aplica¸c˜ ao para Android e testes
Cen´ario dos testes:
I Chamado por email.
I Instru¸c˜oes para execu¸c˜ao do teste.
I Envio dos resultados por email.
I 11 aparelhos testados.
I Menor n´umero de ciclos de teste para blocos grandes.
Android: Loopback em diferentes aparelhos
0 2 4 6 8 10 12
64 128 256 512
Duration (ms)
Block size
Callback times for loopback on each device (1/2)
0 20 40 60 80 100 120 140 160
1024 2048 4096 8192
Block size
Callback times for loopback on each device (2/2) rt period
a853 v7 a853 v8 gti5500b gti9000 gti9100
gtp1000l mz604 r800i tf101 xoomx10i
Convolu¸c˜ ao no Android: Filtro IIR em diferentes aparelhos
0 2 4 6 8 10 12
64 128 256 512
Duration (ms)
Block size
Callback times for reverb on each device (1/2)
0 20 40 60 80 100 120 140 160
1024 2048 4096 8192
Block size
Callback times for reverb on each device (2/2) rt period
a853 v7 a853 v8 gti5500b gti9000 gti9100
gtp1000l mz604 r800i tf101 xoomx10i
Convolu¸c˜ ao no Android: FFT em diferentes aparelhos
0 2 4 6 8 10 12
64 128 256 512
Duration (ms)
Block size
Callback times for FFT on each device (1/2)
0 20 40 60 80 100 120 140 160
1024 2048 4096 8192
Block size
Callback times for FFT on each device (2/2) rt period
a853 v7 a853 v8 gti5500b gti9000 gti9100
gtp1000l mz604 r800i tf101 xoomx10i
Android: ordem m´ axima de um filtro
0 50 100 150 200 250 300 350 400
64 128 256 512
Maximum # of FIR coefficients
Block size Maximum filter size (1/2)
0 50 100 150 200 250 300 350 400
1024 2048 4096 8192
Block size Maximum filter size (2/2) a853 v7
a853 v8 gti5500b gti9000 gti9100 gtp1000l
mz604 r800i tf101 x10i xoom
Algumas conclus˜ oes sobre processamento de ´ audio em tempo real em Android
I O modelo de aparelho faz diferen¸ca significativa no desempenho.
I O sistema desenvolvido pode ser usado para avalia¸c˜ao do desempenho (em tempo real ou n˜ao).
Fim!
Obrigado pela aten¸c˜ao!
I Contato: ajb@ime.usp.br
I Grupo de Computa¸c˜ao Musical do IME/USP:
http://compmus.ime.usp.br/
I Esta apresenta¸c˜ao: http://www.ime.usp.br/~ajb/
Cr´ edito aos autores das imagens
I Convolu¸c˜ao no dom´ınio do tempo: Blanchardj -
http://en.wikipedia.org/wiki/File:FIR_Filter.svg I S´ıntese aditiva: Chrisjohnson -
http://en.wikipedia.org/wiki/File:Additive_synthesis.svg I FFT: Virens -
http://en.wikipedia.org/wiki/File:DIT-FFT-butterfly.png I Arduino: dom´ınio p´ublico.
I PWM: CyrilB -http://en.wikipedia.org/wiki/File:Pwm.svg I NVIDIA GPU:http://www.nvidia.com/
I Camadas do sistema operacional Android: Smieth -http:
//en.wikipedia.org/wiki/File:Android-System-Architecture.svg I Software de an´alise de desempenho no Android: dom´ınio p´ublico.