You are on page 1of 49

Processamento digital de sinais em tempo real utilizando Arduino

Andr e Jucovsky Bianchi


ajb@ime.usp.br
Departamento de Ci encia da Computa c ao Instituto de Matem atica e Estat stica Universidade de S ao Paulo

9 de outubro de 2012

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

Arduino

Arduino
Caracter sticas do projeto

Estrutura minimal para interface com um microcontrolador. Processing (MIT 2001) + Wiring (Ivrea 2003) Arduino (Ivrea 2005). Geralmente usado como interface para controle. Baixo custo: 20-50 USD. Licenciamento livre:
Projetos de hardware: CC BY-SA 2.5. Software: GPL (IDE) e LGPL (bibliotecas C/C++). Documenta c ao: CC BY-SA 3.0.

Comunidade. Mobilidade. Expansibilidade.

Microcontroladores Atmel AVR (ATmega328P)

CPU: unidade aritm etica e registradores (16 MHz - 8 bits). Interrup c oes. Mem orias: Flash (32 KB), SRAM (2 KB) e EEPROM (1 KB). Rel ogios de sistema (diversas fontes, pr e-escalonadores). Gerenciamento de energia. Portas digitais de entrada e sa da. Contadores (com PWM). Interface serial. Convers ao anal ogico-digital. Boot-loader e autoprograma c ao.

Processamento Digital de Sinais de Audio em tempo real


Restri c ao de tempo m aximo para o c alculo do resultado: Per odo do bloco de processamento: N amostras. Frequ encia de amostragem: R Hz. Per odo do ciclo DSP: TDSP =
N R

s.

Perguntas: Qual e o n umero m aximo de opera c oes que se pode realizar em tempo real? Quais detalhes de implementa c ao fazem diferen ca? Qual e a qualidade do sinal de audio resultante?

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

Conversor anal ogico-digital (ADC)

Caracter sticas do ADC no ATmega328P: Amostragem:


1. Sample and hold. 2. Aproxima c ao sucessiva.

Resolu c ao: 8 ou 10 bits. Tempo de convers ao: 13 a 260 s. Frequ encia pr opria / redu c ao de ru do. Convers ao manual ou autom atica.

Conversor anal ogico-digital (ADC)


Medi c ao do tempo de convers ao, usando diferentes valores de pr e-escalonador (frequ encia principal: 16 MHz):
pr e-escalonador fADC (KHz) TADC (s) conv (s) T f conv (Hz)

2 4 8 16 32 64 128 Obs:

8.000 4.000 2.000 1.000 500 250 125

0,125 0,25 0,50 1 2 3 8

12,61 16,06 19,76 20,52 34,80 67,89 114,85

79.302 62.266 50.607 48.732 28.735 14.729 8.707

Resolu c ao da fun c ao micros(): 4 s. Per odo de convers ao: 14, 5 TADC . R = 44.100 Hz Tamostra 22, 67 s. R = 31.250 Hz Tamostra = 32, 00 s.

Conversor anal ogico-digital (ADC)

Par ametros escolhidos: Convers ao alinhada ` a esquerda (8 bits). Pr e-escalonador igual a 8.

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

Modula c ao por largura de pulso (PWM)

Modula c ao por largura de pulso (PWM)

Modula c ao por largura de pulso (PWM)

Modula c ao por largura de pulso (PWM)

Caracter sticas de PWM no ATmega328P: 6 canais de sa da. Modos de opera c ao: Fast e Phase Correct. Pr e-escalonador. 2 contadores de 8 bits e 1 de 16 bits. Interrup c ao por transbordamento.

Modula c ao por largura de pulso (PWM)

Frequ encias de opera c ao de um contador de 8 bits:


pr e-escalonador fincr (KHz) foverow (Hz)

1 8 32 64 128 256 1024

16.000 2.000 500 250 125 62,5 15,625

62.500 7.812 1.953 976 488 244 61

Modula c ao por largura de pulso (PWM)

Par ametros escolhidos: Fast PWM. Contador de 8 bits. Pr e-escalonador igual a 1. Frequ encia de overow: 16 MHz / 1 / 28 = 62.500 Hz. Taxa de gera c ao de amostras: 31.250 Hz.

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

Acoplamento de entrada e sa da
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

// 1. leitura da entrada : ADC x [ ind ] = ADCH ; // 2. escrita na saida : PWM OCR2A = y [( ind - MIN_DELAY )&( BUFFER_SIZE -1)]; // 3. sinalizacao de um novo bloco de amostras if (( ind & ( BLOCK_SIZE - 1)) == 0) { rind = ( ind - BLOCK_SIZE ) & ( BUFFER_SIZE -1); dsp_block = true ; } // 4. incremento do indice de leitura / escrita ind ++; ind &= BUFFER_SIZE - 1; // 5. inicia uma nova conversao ADC sbi ( ADCSRA , ADSC );

Implementa c ao

Detalhes importantes para implementar o sistema: ADC:


Valor do pr e-escalonador. Alinhamento do resultado (resolu c ao). Valor de refer encia. Pino de entrada.

PWM:
Modo Fast PWM. Valor do pr e-escalonador. Pino de sa da.

Compila c ao: avr-gcc, avr-g++. Monitoramento serial: minicom.

Mem oria

Limites da Mem oria: 2 Kb de SRAM para dados. Uma tabela com 512 bytes ocupa Buer m aximo de 2.000 amostras.
1 4

da mem oria!

Desempenho para processamento em tempo real

Perguntas: Qual e n umero m aximo de opera c oes comput aveis em tempo real? Quais detalhes de implementa c ao fazem diferen ca? Qual e a qualidade do audio resultante?

Implementa c oes: S ntese aditiva. Convolu c ao no dom nio do tempo. FFT.

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

S ntese aditiva

S ntese aditiva
C odigo em alto n vel:
1 2 3 4 5 6 7 8

for ( n = 0; n < N ; n ++) { angle = 2.0 * M_PI * t ; y [ n ] = 0.0; for ( k = 0; k < numFreqs ; k ++) y [ n ] += r [ k ]* sin ( f [ k ] * angle ); t += 1.0 / SR ; }

Implementa c ao da linha 6:
1 2

ind [ k ] = ( ind [ k ]+ f [ k ]) & ( SINETABLE_SIZE -1); y [ n &( BUFFER_SIZE -1)] += sine [ ind [ k ]] >> pad ;

S ntese aditiva
Tipo e n umero de opera co es fazem a diferen ca

Type of operations in sinesum (bs: 128, sr: 31250) 5 Synth time (ms) 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Number of oscilators 2 mults 1 mult var pad

S ntese aditiva
Resultados para blocos de diferentes tamanhos

Additive Synthesis on Arduino (inline) 5 Synth time (ms) 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Number of oscilators bl. size 32 bl. size 64 bl. size 128

S ntese aditiva
Resultados para blocos de diferentes tamanhos

Additive Synthesis on Arduino (loop) 5 Synth time (ms) 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Number of oscilators bl. size 32 bl. size 64 bl. size 128

S ntese aditiva
Resultados para diferentes taxas de amostragem

Sampling rate in sinesum (bs: 128, op: 1) 10 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 Number of oscilators 31.250 Hz 7 8

Synth time (ms)

15.625 Hz

S ntese aditiva
Resumo dos resultados

N umero de osciladores m aximo em cada cen ario (R = 31.250 Hz): block size 32 64 128 2op 2 2 2 1op 4 4 4 pad+for 8 8 8 pad 14 14 15

S ntese aditiva
Resumo dos resultados

N umero de osciladores m aximo em cada cen ario (R = 31.250 Hz): block size 32 64 128 2op 2 2 2 1op 4 4 4 pad+for 8 8 8 pad 14 14 15

Exemplo: soma de harm onicos de 200 Hz.

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

Convolu c ao no dom nio do tempo

Convolu c ao no dom nio do tempo


Qual o tamanho m aximo de um ltro comput avel em tempo real?

C odigo em alto n vel:


1 2

for ( k = 0; k < N ; k ++) y [ n ] += b [ k ]* x [n - k ];

Implementa c ao:
1 2 3 4 5 6 7 8 9

for ( int n = 0; n < N ; n ++) { int yn = 0 , xtmp ; for ( int i = 0; i < order ; i ++) { xtmp = 127 - TMOD (x , n -i , BUFFER_SIZE ); yn += xtmp * 10 / 100; } LIMIT ( yn ); /* limita a + - 127 */ TMOD (y , n , BUFFER_SIZE ) = 127 + yn ; }

Convolu c ao no dom nio do tempo


Resultados para blocos de diferentes tamanhos

Time-domain convolution on Arduino (constant pad) 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Order of the filter bl. size 32 bl. size 64 bl. size 128 bl. size 256

Synth time (ms)

Convolu c ao no dom nio do tempo


Resultados para blocos de diferentes tamanhos

Time-domain convolution on Arduino (variable pad) 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 Order of the filter bl. size 32 bl. size 64 bl. size 128 bl. size 256

Synth time (ms)

Convolu c ao no dom nio do tempo


Resultados para blocos de diferentes tamanhos

Time-domain convolution on Arduino (mult) 9 8 7 6 5 4 3 2 1 0 0 1 bl. size 32 bl. size 64 2 3 Order of the filter 4 5

Synth time (ms)

bl. size 128 bl. size 256

Convolu c ao no dom nio do tempo


Resultados para blocos de diferentes tamanhos

Ordem m axima do ltro FIR em cada cen ario (R = 31.250 Hz):


block size multiplica c ao pad vari avel pad constante

32 64 128 256

1 1 1 1

7 7 7 7

13 13 14 14

Convolu c ao no dom nio do tempo


Exemplo: moving average

Moving Average Frequency Response 1

Amplitude 0 0 order 2 order 4 1 Frequency order 8 order 16 2 3

Estrutura da apresenta c ao

Introdu c ao DSP em Arduino Entrada de audio: ADC Sa da de audio: PWM Processamento An alise de desempenho S ntese Aditiva Convolu c ao no dom nio do tempo FFT Conclus oes

Fast Fourier Transform

used to convert the discrete signal (discrete in time) in the time domain to its counterpart (discrete in frequency) in the frequency domain. DFT can be computed efficiently in practice using a Fast Fourier Transform (FFT) algorithm, which is generally N/log(N)-1 times faster than DFT, where N is called DFT or FFT size, which is the number of data points used in the computation. To achieve maximum efficiency of computation in FFT, N is generally constrained to an integer power of two, e.g. 1024, 2048, 4096, 8192, etc..
x(t) ADC DFT/FFT |X(f)|

x(t)

t 1) continuous signal in time domain

t0

tN-1 2) N points in time domain

fN/2 f0=0 3) N points in frequency domain containing both negative and positive frequency parts

-fN/2

|X(f)|

f fN/2 f0=0 4) N/2+1 points in amplitude/power spectrum

The above figure illustrates the aforementioned process. An N-point time record [x(t0), x(t1), , x(tN-1)] will generate N points [X(-fN/2), X(f0), , X(fN/2)] in the frequency domain containing both negative and positive frequency parts. The positive and negative frequency parts can be combined to produce N/2+1 points [X(f0), X(f1), X(fN/2)] at real frequencies in the amplitude/power spectrum. These points are located at frequencies: 0, f

Fast Fourier Transform

A transformada discreta de Fourier (DFT) de um vetor de N pontos e:


N 1

Xk =
n=0

xn e i 2k N ,

k = 1, . . . , N 1.

Implementa c ao ing enua da DFT: O (N 2 ). Implementa c oes de FFT para diferentes valores de N: O (N log(N )).

Fast Fourier Transform

Fast Fourier Transform

C odigo em alt ssimo n vel:


1

four1 (x , N , 1); /* O ( N * log ( N )) */

Qual e o tamanho m aximo de uma FFT comput avel em tempo real?

Fast Fourier Transform


Resultados

FFT on Arduino 120 Analysis time (ms) 100 80 60 40 20 0 32 64 128 Block size fft time 256

Fast Fourier Transform


Resultados

Determina c ao de frequ encia m axima: M edia de 428,15 s por amostra. Frequ encia m axima 2.335 Hz. Pr e-escalonador PWM de 32 R = 1.953 Hz.

Fast Fourier Transform


Resultados

FFT on Arduino 300 Analysis time (ms) 250 200 150 100 50 0 3264 128 fft time 256 Block size dsp cycle 512

Conclus oes

Detalhes de implementa c ao que fazem a diferen ca: Tipos utilizados (byte, unsigned long, int, oat, etc) s ao fundamentais. Multiplica c ao/divis ao (de inteiros) demoram pelo menos o dobro que opera c oes sobre inteiros. A quantidade de la cos e condicionais faz diferen ca. Consulta a vari aveis e vetores tamb em faz diferen ca.

Obrigado pela aten c ao!

Atribui c ao de autoria das guras utilizadas: Figura PWM: Zurecs (zureks@gmail.com). Figura S ntese Aditiva: Chrisjonson. Figura FFT: Virens.

Dados de contato: Meu email: ajb@ime.usp.br Esta apresenta c ao: http://www.ime.usp.br/~ajb/ CM no IME: http://compmus.ime.usp.br/

You might also like