Professional Documents
Culture Documents
Orientador
Prof. Dr. Ricardo Pezzuol Jacobi
Coorientador
Prof. Dr. Pedro de Azevedo Berger
Braslia
2013
Endereo:
Universidade de Braslia
Campus Universitrio Darcy Ribeiro Asa Norte
CEP 70910-900
BrasliaDF Brasil
Universidade de Braslia
Instituto de Cincias Exatas
Departamento de Cincia da Computao
Dedicatria
Dedico este trabalho a todos os interessados nas reas de codificao de udio e nas
tcnicas de acelerao de solues computacionais que utilizam a abordagem de coprojeto
entre hardware e software.
Agradecimentos
Agradeo a todas as conscincias amigas intra e extrafsicas que contriburam com
este trabalho. Aos meus pais, Carlos Alberto e Marinz, e aos meus irmos, Thas e
Andr, pelo apoio e incentivo recebido. minha esposa Graa Dantas pelo inestimvel
amor e companheirismo. Ao amigo Moacir Maurcio Dantas, companheiro de engenharia,
pelo exemplo de vida. Ao meu orientador Prof. Dr. Ricardo Jacobi pela orientao
esclarecedora e oportunidades oferecidas. Ao meu co-orientador, Prof. Dr. Pedro Berger
pelos oportunos esclarecimentos sobre a codificao de udio. Aos demais professores do
programa de mestrado do CIC na UnB e a todos os alunos colegas de laboratrio por
ajudarem a tornar o ambiente sempre agradvel de se trabalhar. 3
ii
Abstract
Audio Coding is present today in many electronic devices. It can be found in radio, tv,
computers, portable audio players and mobile phones. In 2007 the Brazilian Government
defined the brazilian Digital TV System standard (SBTVD) and adopted the AAC Advanced Audio Coding as the audio codec.
In this work we use the co-design of hardware and software approach to implement a
high performance and low energy solution on an FPGA, able to decode up to 6 channels of
audio in real-time. The solution architecture and details are presented along with performance and quality tests. Finally, hardware usage and performance results are presented
and compared to other solutions found in literature.
Keywords: MPEG-4, AAC, FPGA, Co-Design, Audio, Digital Signal Processing
iii
Resumo
A Codificao de udio est presente hoje nos mais diversos aparelhos eletrnicos desde
o rdio, a televiso, o computador, os tocadores de msica portteis e nos celulares. Em
2007, o governo do Brasil definiu o padro do Sistema Brasileiro de TV Digital (SBTVD)
que adotou o AAC Advanced Audio Coding para codificao de udio.
Neste trabalho, utilizamos a abordagem de coprojeto combinando software e hardware
para implementar uma soluo de alto desempenho e baixo consumo de energia em um
FPGA, capaz de decodificar at 6 canais de udio em tempo real. Apresentamos os
detalhes da soluo bem como os testes de desempenho e qualidade. Por fim, apresentamos
os resultados de utilizao de hardware e performance juntamente com uma comparao
com as demais solues encontradas na literatura.
Palavras-chave: MPEG-4, AAC, FPGA, Coprojeto, udio, Processamento de Sinais
Digitais
iv
Sumrio
1 Introduo
1.1 Motivao e Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Organizao do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Fundamentao Terica
2.1 Codificao de udio . . . . . . . . . . . . . . . . . . . .
2.1.1 Sistema Auditivo . . . . . . . . . . . . . . . . . .
2.1.2 Caractersticas do Som e o Limiar de Audio . .
2.1.3 Bandas Crticas . . . . . . . . . . . . . . . . . . .
2.1.4 Mascaramento do Som . . . . . . . . . . . . . . .
2.1.5 Psicoacstica e Codificao Perceptual . . . . . .
2.1.6 Codificao de udio no Sistema Brasileiro de TV
2.2 Advanced Audio Coding (AAC) - MPEG-4 . . . . . . . .
2.2.1 LATM/LOAS e MP4 File Format . . . . . . . . .
2.2.2 Bitstream Payload Deformater (Parser) . . . . . .
2.2.3 Decodificador sem Perdas (Noiseless Decoder ) . .
2.2.4 Quantizao Inversa (Inverse Quantization) . . .
2.2.5 Re-escalonador (Rescaling) . . . . . . . . . . . . .
2.2.6 Processamento Espectral . . . . . . . . . . . . . .
2.2.7 Banco de Filtros (Filterbank ) e Block Switching .
2.3 Coprojeto . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 Reviso de literatura . . . . . . . . . . . . . . . . . . . .
3 Desenvolvimento do AAC
3.1 Cdigo de Referncia em C . . . . . . . . . . . . . . . . .
3.2 Configurao da Plataforma utilizada no desenvolvimento
3.3 Profiling do cdigo . . . . . . . . . . . . . . . . . . . . .
3.4 Definio do Projeto de Hardware . . . . . . . . . . . . .
3.5 Decodificador de Entropia . . . . . . . . . . . . . . . . .
3.5.1 Decodificador dos Fatores de Escala - DFE . . . .
3.5.2 Decodificador dos Dados Espectrais - DDE . . . .
3.5.3 Quantizao Inversa . . . . . . . . . . . . . . . .
3.5.4 Re-escalonador . . . . . . . . . . . . . . . . . . .
3.5.5 Integrao do Decodificador de Entropia . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Digital
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
2
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
7
7
9
11
12
13
14
15
17
18
18
18
21
26
27
28
.
.
.
.
.
.
.
.
.
.
32
32
34
36
38
38
38
39
40
40
41
3.6
3.7
Stream Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Banco de Filtros Inverso . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.1 Pr-Processamento da IMDCT . . . . . . . . . . . . . . . . .
3.7.2 iFFT - Inverse Fast Fourier Transform . . . . . . . . . . . . .
3.7.3 Ps-Processamento da IMDCT . . . . . . . . . . . . . . . . .
3.7.4 Integrao da IMDCT . . . . . . . . . . . . . . . . . . . . . .
3.7.5 Janelamento, Sobreposio e Adio (Windowing, Overlap and
3.8 Avaliao da soluo de coprojeto . . . . . . . . . . . . . . . . . . . .
3.9 Memria Compartilhada . . . . . . . . . . . . . . . . . . . . . . . . .
3.9.1 ICS RAM - Individual Channel Stream . . . . . . . . . . . . .
3.9.2 Memria de Coeficientes Espectrais . . . . . . . . . . . . . . .
3.10 Ferramentas Espectrais . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10.1 IS - Intensity Stereo . . . . . . . . . . . . . . . . . . . . . . .
3.10.2 MS - Mid/Side Stereo . . . . . . . . . . . . . . . . . . . . . .
3.10.3 TNS - Temporal Noise Shaping . . . . . . . . . . . . . . . . .
3.10.4 PNS - Perceptual Noise Substitution . . . . . . . . . . . . . .
3.10.5 Integrao das Ferramentas . . . . . . . . . . . . . . . . . . .
3.11 Buffer de Sada e Tocador de udio . . . . . . . . . . . . . . . . . . .
3.12 LATM/LOAS and MP4 Decoders . . . . . . . . . . . . . . . . . . . .
4 Resultados
4.1 Performance . . . . .
4.2 Qualidade . . . . . .
4.3 Consumo de Energia
4.4 Comparaes . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
Add )
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
42
45
46
48
53
56
56
62
64
65
67
68
68
73
74
75
76
78
79
.
.
.
.
80
82
83
85
85
.
.
.
.
.
.
.
.
88
Referncias
91
vi
Lista de Figuras
1.1
2.1
2.2
2.3
2.4
6
8
8
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
vii
.
.
.
.
.
.
10
10
11
11
14
15
16
17
20
21
22
24
26
33
35
41
43
44
44
. 47
. 48
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
3.18
3.19
3.20
3.21
3.22
3.23
3.24
3.25
4.1
4.2
4.3
4.4
viii
. 50
. 51
. 53
. 54
.
.
.
.
.
.
.
.
.
56
57
58
59
60
61
65
65
67
.
.
.
.
70
73
77
78
. 81
. 82
. 84
. 84
Lista de Tabelas
2.1
2.2
2.3
2.4
2.5
2.6
3.1
3.2
3.18
3.19
4.1
4.2
4.3
4.4
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
3.17
ix
. .
em
. .
. .
. . . . . .
Software
. . . . . .
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
12
13
16
27
31
82
83
83
85
4.5
4.6
Captulo 1
Introduo
Com a adoo cada vez mais expressiva de dispositivos mveis em nosso cotidiano, a
cada dia aumentam as necessidades de projetos de circuitos integrados mais sofisticados.
Dispositivos multimdia com capacidades de decodificar udio e video como os telefones
celulares e tablets atingiram o mercado de massa e necessitam cada vez mais de maior
poder de processamento para expandir sua gama de aplicaes, tamanho reduzido para
maior portabilidade e maior eficincia energtica para aumentar sua autonomia. Porm,
considerando-se as restries de desempenho e consumo de energia dos processadores
embarcados atuais, verifica-se a necessidade do desenvolvimento de arquiteturas mais
eficientes para atingir tais objetivos. Uma das abordagens consiste na combinao de
hardware dedicado para funes especficas com software rodando em processadores de
propsito geral, ambos funcionando de maneira integrada.
Como parte da modernizao do sistema de telecomunicaes no Brasil em 2006 foi
estabelecido o novo padro de televiso digital, normatizado em 2007 pela Norma Brasileira ABNT NBR 15602. Este novo padro, chamado de Sistema Brasileiro de TV
Digital (SBTVD) foi baseado no sistema japons, o Integrated Services Digital Broadcasting Terrestrial (ISDB-T), porm com padres diferentes de codificao de udio e vdeo
em que adotou-se o MPEG-4. Neste caso, utiliza o codificador H.264 para vdeo e o codificador AAC para udio. Especificamente no caso do udio, so exigidas, no mnimo,
a decodificao de udio mono, stereo e multicanal (5.0 e 5.1) do padro AAC-LC (Low
complexity).
Dentre as diversas reas de otimizao de processamento, este trabalho se foca no
processamento de udio digital. Mais especificamente, optou-se por trabalhar com o
Advanced Audio Coding (AAC) que um padro de codificao/decodificao de udio
digital com perdas. Padronizado pela ISO e pela IEC em 1997, o AAC faz parte das
especificaes MPEG-2 e MPEG-4 e foi concebido para ser o sucessor do padro MP3
(MPEG-1 Layer 3). De 1997 a 2009 o padro foi aprimorado, sendo hoje utilizado na
maior parte dos tocadores de msica portteis, telefones celulares, computadores e TVs
Digitais. Suas principais vantagens em relao ao MP3 so o suporte para frequncias
at 96kHz ao invs de 48kHz, suporte para at 48 canais ao invs de 6 e uma qualidade
superior mesma taxa de bits.
1.1
Motivao e Objetivo
1.2
Metodologia
Ajustes do
Algoritmo em C
Cdigo de
Referncia
ISO
Verificao do
Algoritmo
No
Qualidade
Requerida ok?
Sim
Estudo de
Restries para
Ponto-Fixo em
MATLAB
Perfilamento do
Cdigo
Adaptao dos
Mdulos em
Software para o
processador Nios II
Desenvolvimento
dos Mdulos em
Hardware
Anlise de
Desempenho e
Qualidade
No atendidos
Requisitos de
qualidade e
desempenho
Atendidos
Prottipo
Funcional
em FPGA
1.3
Organizao do Trabalho
Em seguida, no Captulo 3, apresentamos todo o processo de desenvolvimento da arquitetura do decodificador AAC-LC seguido do Captulo 4 onde so apresentados os resultados
finais e as comparaes com arquiteturas com propsito equivalente encontradas na literatura. Finalmente, no Captulo 5 so apresentadas as concluses e sugestes de trabalhos
futuros.
Captulo 2
Fundamentao Terica
2.1
Codificao de udio
A codificao ou compresso de udio tem o objetivo de reduzir o tamanho da representao digital do udio para uma maior eficincia tanto no armazenamento quanto na
transmisso do sinal. Com este intuito, os algoritmos de codificao procuram reduzir ao
mximo o tamanho em bits do sinal, preservando a qualidade do som ao ponto em que
quando reproduzido novamente no haja diferena perceptvel em relao ao som original.
Existem dois grandes grupos de algoritmos de codificao/decodificao (Codec) de
udio. O primeiro o grupo dos algoritmos sem perdas em que o udio digital passa por
processos genricos de compactao de dados e quando descompactado, todo o contedo
digital original recuperado. Geralmente, nestes casos a taxa de compresso fica em torno
de 50% a 60% do tamanho original. O segundo o grupo dos algoritmos com perdas
em que, alm da compresso padro sem perdas, utilizam-se modelos psicoacsticos que
procuram eliminar a parte inaudvel do som com a utilizao de tcnicas de representao
otimizada do udio que possam manter a qualidade o mais prxima possvel da original.
Neste caso, as taxas de compresso variam com a qualidade requerida e tipicamente ficam
entre 5% e 20% do tamanho original do arquivo. Algoritmos do segundo grupo so os
mais utilizados em equipamentos de larga escala em que a qualidade mxima de som no
obrigatria. A Tabela 2.1 apresenta uma lista dos principais tipos de representao de
udio digital utilizados atualmente.
Tabela 2.1: Tipos de Representao Digital de udio e Codecs
Representao Digital
sem Compresso
Codificadores
Sem Perda
Codificadores
Com Perda
Taxa de
Compresso
0%
50% a 60%
5% a 20%
Exemplos
FLAC,
Apple Lossless,
WMA Lossless,
MPEG-4 ALS,
RealAudio Lossless
2.1.1
Sistema Auditivo
O ouvido humano composto de trs partes distintas, o ouvido externo, o ouvido mdio
e o ouvido interno. O som que ouvimos chega primeiro ao ouvido externo, sendo captado
pelo pavilho auditivo (orelha) e conduzido at o tmpano atravs do canal auditivo. A
presso gerada pela onda de som faz o tmpano vibrar e por sua vez, este amplifica e
transmite a vibrao atravs dos ossculos (martelo, bigorna e estribo) do ouvido mdio
at a cclea, rgo responsvel pela audio no ouvido interno. A cclea um conjunto de
trs canais em formato de espiral preenchidos por lquidos. No canal mdio, fica o rgo
de Corti que o rgo receptor da audio. Este rgo composto por milhares de clulas
ciliadas e estimulado pelo movimento das membranas basilar e tectorial. O movimento
destas membranas estimuladas pelas vibraes sonoras so transformadas em ondas de
compresso que por sua vez ativam o rgo de Corti, responsvel por sua transformao
em impulsos nervosos que so enviados ao crebro atravs do nervo auditivo.
A Figura 2.1 mostra a Anatomia do ouvido humano.
2.1.2
2.1.3
Bandas Crticas
Figura 2.2: Curvas de contorno de igual percepo da audio humana (Ref. (14))
determinada frequncia e a frequncia que estimula este local chamada de a melhor
frequncia ou a frequncia caracterstica.
O que ocorre na prtica uma transformada de frequncia para um local, o que pode
ser observado na Figura 2.3 onde a resposta da membrana basilar a um estmulo com
trs tons mapeada. Com este resultado, do ponto de vista do processamento de sinais,
pode-se considerar a cclea como um banco de filtros passa-faixa sobrepostos. Alm disso,
as respostas magnitude so assimtricas, no lineares e as larguras de banda dos filtros
da cclea so no uniformes, sendo mais largas com o aumento da frequncia.
ouvinte jovem com audio dentro dos limites normais mostram que a banda crtica tende
a se manter constante em 100 Hz para frequncias centrais de at 500 Hz, Acima disto,
vai aumentando e tende a se manter em aproximadamente 20% do valor da frequncia
central. A funo pode ser aproximada pela Equao 2.3.
"
2 #0,69
f
BWc (f ) = 25 + 75 1 + 1, 4
(Hz)
(2.3)
1000
A Equao 2.4 comumente utilizada para converter a escala de Hertz para Barks,
onde cada Bark corresponde a uma banda crtica.
"
2 #
f
(Bark)
(2.4)
Zb (f ) = 13 arctan(0, 00076f ) + 35 arctan
7500
Alm do modelo aproximado pela equao 2.5, existem outros modelos empricos como
o equivalent rectangular bandwidth (ERB). Este modelo expresso pela equao e mostra
que para frequncias abaixo de 500 Hz, as larguras de banda so ainda menores do que
100 Hz.
f
+ 1)
(2.5)
ERB(f ) = 24, 7 (4, 37
1000
2.1.4
Mascaramento do Som
O terceiro tipo NMN o mais difcil de ser caracterizado, mas experimentos apontam uma razo de aproximadamente 26 dB entre um rudo e outro para que ocorra o
mascaramento.
A Figura 2.4 exemplifica os dois primeiros casos de mascaramento simultneo.
Figura 2.5: Efeito de espalhamento do mascaramento observado para um tom (Ref. (29))
10
2.1.5
Parameters
Timefrequency
analysis
Quantization
and encoding
Entropy
(lossless)
coding
Psychoacoustic
analysis
MUX
To
channel
Bit-allocation
Masking
thresholds
Side
information
11
2.1.6
A partir da norma ABNT NBR 15602 (1) o governo Brasileiro definiu o Advanced
Audio Coding (AAC) como padro de codificao de udio para o Sistema Brasileiro de
TV Digital (SBTVD). Em sua Parte 2 (15602-2) a norma define que o udio codificado
deve seguir os padres da norma ISO/IEC 14496-3 (20) com as configuraes mnimas
apresentadas na Tabela 2.2.
Tabela 2.2: Configuraes de udio da norma ABNT NBR 15602-2 (1)
Parmetro
Restrio
Frequncia de amostragem
do sinal de udio
Quantizao
Mecanismos de transporte
permitidos
Nmero de canais (One Seg)
Nmero de canais (Full Seg)
16 ou 20 bits
LATM/LOAS (conforme ISO/IEC 14496-3)
Mono (1.0), 2 canais (estreo ou 2.0)
Mono (1.0), 2 canais (estreo ou 2.0),
ou multicanal (5.1)
Low complexity AAC: nvel 2 (LC-AAC@L2) para dois canais
Low complexity AAC: nvel 4 (LC-AAC@L4) para multicanal
High Efficiency (HE): nvel 2 (HE-AAC v1@L2) para dois canais
High Efficiency (HE): nvel 4 (HE-AAC v1@L4) para multicanal
1024 amostras para AAC e 2048 quando utilizada a tcnica SBR
(Spectral band replication).
12
Tabela 2.3: Configurao de canais - MPEG-4 pela Norma ABNT NER 15602 (1)
Modo
Monoaural
(1/0)
Estreo (2/0)
3/0
Nm.
de
Canais
1
<SCE1><TERM>
Elemento
padro
para mapeamento de
auto-falantesb
SCE1 = C
CPE1 = L e R
SCE1 = C, CPE1 = L e
R
3/1
4
<SCE1><CPE1><SCE2>
SCE1 = C, CPE1 = L e
<TERM>
R, SCE1 = MS
Multicanal 5.0
5
<SCE1><CPE1><CPE2>
SCE1 = C, CPE1 = L e
(3/2)
<TERM>
R, CPE2 = LS e RS
Multicanal 5.1
6
<SCE1><CPE1><CPE2>
SCE1 = C, CPE1 = L
(3/2 + LFE)
<LFE><TERM>
e R, CPE2 = LS e RS,
LFE = LFE
a Abreviaturas dos elementos sintticos: SCE = Single Channel Element,
CPE = Channel Pair Element, LFE = Low Frequency Channel Element, TERM = terminator
b Abreviaturas relacionadas ao arranjo de alto-falantes: L alto-falante frontal esquerdo /
R alto-falante frontal direito / C alto-falante frontal central / LFE nfase de baixa
frequncia / LS alto-falante surround traseiro esquerdo / RS alto-falante surround
traseiro direito / MS alto-falante surround monaural.
2.2
2
3
<CPE1><TERM>
<SCE1><CPE1><TERM>
Em 1998 o Moving Picture Experts Group normatizou o MPEG-4 que um padro para
codificao de dados digitais de udio e vdeo. O MPEG-4 incorpora diversas solues
definidas nos padres anteriores MPEG-1 e MPEG-2 e inclui novas funcionalidades e
padres de codificao de udio e vdeo.
Especificamente relacionado codificao de udio, o MPEG-4 define padres para
codificao de voz e de som em geral com ou sem perdas. Em nosso caso, estamos
interessados nas definies de General audio coding tools que define os codificadores com
perdas e de alta qualidade incluindo o AAC. Neste caso, o padro AAC vindo do MPEG2, aprimorado e ganha mais ferramentas aumentando sua eficincia na qualidade e na
compresso dos dados, porm, ainda mantendo compatibilidade com o padro anterior.
O Advanced Audio Coding (AAC) foi concebido para ser o sucessor do padro MP3
(MPEG-1 Layer 3). Desde 1997 vem sendo aprimorado, e hoje utilizado na maior parte
dos tocadores de msica portteis, telefones celulares, computadores e TVs Digitais. Suas
principais vantagens em relao ao MP3 so o suporte para frequncias de at 96kHz ao
invs de 48kHz, suporte para at 48 canais ao invs de 6 e uma qualidade superior
mesma taxa de bits.
Entre os perfis do Codificador AAC temos:
1. AAC - Low Complexity (LC): Utiliza Banco de Filtros baseado em MDCT com janelas de 256 (curta) ou 2048 (longa) amostras, 4 tipos diferentes de formas de janela
(Long, Short, Long-Start, Long-Stop), modelo sofisticado de mascaramento baseado
em modelo psicoacstico de alta qualidade, quantizao e codificao do padro
13
AAC com o algoritmo Huffman para codificao de entropia. Alem disso, possui
suportes para ferramentas de processamento espectral como o Coupling, Intensity
Stereo (IS), Mid/Side Coding (M/S), Temporal Noise Shaping (TNS) e Perceptual
Noise Substitution (PNS).
2. High Efficiency (HE) - AAC verso 1: inclui todas as tcnicas do AAC-LC e adiciona
a tcnica Spectral band replication (SBR) para sons com baixas taxas de bits.
3. High Efficiency (HE) - AAC verso 2: inclui as ferramentas do HE-AAC v1 e
adiciona a funo Parametric Stereo (PS), tambm para melhoria na qualidade de
sons com baixas taxas de bits.
A Figura 2.8 apresenta a relao entre os diferentes perfis do AAC.
2.2.1
Decodificao sem
perdas (Huffman)
Bitstream
(Audio
Codificado)
Quantizao Inversa
Re-escalonamento
Processamento Espectral
PNS
M/S
IS
TNS
Banco de Filtros
Inverso
Sinal de udio
Decodificado
Controle de Ganho
Dados
Controle
2.2.2
15
Cdigo
000
001
010
011
100
101
110
111
Descrio
Single Channel Element
Channel Pair Element
Coupling Channel Element
Low Frequency Enhancement Channel
Data Stream Element
Program Config Element
Fill Element
End Element
Cada um dos elementos sintticos possui estrutura distinta exigindo um caminho prprio de decodificao. Descrevemos abaixo resumidamente a funo e as especificidades
de cada um deles.
1. SCE e LFE: Estes elementos so utilizados para armazenar dados de um nico
canal sendo o LFE especfico para coeficientes espectrais de baixa frequncia.
SCE ou LFE
Elem_ID
(3 bits)
Element
Instance Tag
(4 bits)
ICS
Global
Gain
(8 bits)
ICS Info
(11 ou 15 bits)
Section
Data
Scale
Factor Data
Dados
Opcionais
Spectral
Data
(varivel)
(varivel)
(varivel)
(varivel)
Figura 2.10: Diagrama dos Elementos Sintticos SCE e LFE com detalhamento do ICS
Sua estrutura interna pode ser observada na Figura 2.10. Nela podemos observar
que alm do ID de 3 bits temos tambm o Element Instance Tag com 4 bits de
largura que o identificador nico do canal. Em seguida, temos o Individual Channel
Stream (ICS), estrutura de tamanho varivel onde ficam armazenados os parmetros
de decodificao do canal como o Global Gain, que representa o valor do primeiro
fator de escala, a estrutura ICS INFO, informando o modo como esto organizadas
as janelas, o Section Data informando as tabelas Huffman usadas em cada trecho,
o Scale Factor Data, os fatores de escala codificados com o algoritmo Huffman,
os dados opcionais para o processamento espectral e finalmente o Spectral Data,
contendo os coeficientes espectrais tambm codificados com o algoritmo Huffman.
16
2. CPE: Este elemento armazena dados de dois canais (stereo) podendo oferecer maior
compactao quando ambos os canais possuem a mesma parametrizao, ICS Info,
que no caso transmitida uma s vez. Esta opo sinalizada pelo valor 1 em
Common Window (Janela comum). Neste caso, um recurso adicional de processamento espectral, o Mid/Side Coding pode tambm ser utilizado e sinalizado pelo
campo MS mask present. Em caso positivo, seus parmetros so encontrados em
seguida em MS used. So ao todo dois elementos ICS, um para cada canal, que podem ou no conter os parmetros de ICS Info caso o codificador no tenha utilizado
janela comum.
CPE
Elem
ID
Element
Instance Tag
Common
Window
(3 bits)
(4 bits)
(1 bit)
ICS Info
(11 ou 15 bits)
MS Mask
Present
MS
Used
Individual Channel
Stream (ICS)
Individual Channel
Stream (ICS)
(1 bit)
(varivel)
(tamanho varivel)
(tamanho varivel)
2.2.3
Esta etapa consiste em recuperar tanto os valores dos Fatores de Escala quanto os dos
Coeficientes Espectrais. Todos estes dados no caso do AAC so codificados pelo algoritmo
Huffman que utiliza a probabilidade de ocorrncia dos valores de entrada para determinar
cdigos de tamanho varivel para representar os dados. Quanto maior a ocorrncia do
dado, menor ser o tamanho de sua representao em bits.
No caso do AAC, tabelas pr-determinadas so utilizadas. Isto diminui a eficincia de
compresso do algoritmo que normalmente cria a tabela de cdigos durante a compactao, porm evita a necessidade de transmitir as tabelas juntamente com os dados de
udio, o que resulta em um ganho final.
Para a codificao dos fatores de escala, o padro AAC determina uma nica tabela
fixa. Estes so utilizados pelo codificador para diminuir a representao em bits das
frequncias codificadas. As frequncias so separadas por faixas ou bandas cujas larguras
17
2.2.4
2.2.5
(2.6)
Re-escalonador (Rescaling )
2.2.6
(2.7)
Processamento Espectral
18
Shaping. A utilizao destas ferramentas por parte do codificador AAC opcional, porm
requerida de acordo com a norma ABNT NBR 15602 (1).
PNS - Perceptual Noise Substitution
A ferramenta Perceptual Noise Substitution (PNS) explora a caracterstica dos rudos
aleatrios de poder simular os coeficientes de trechos de subbandas ruidosas. Neste caso, o
codificador identifica os trechos de sinal reconhecidos como rudo para cada uma das bandas dos fatores de escala e os agrupa em diferentes categorias. Os coeficientes espectrais
destas categorias so omitidos do processo de codificao e em troca, um flag informando
a substituio por rudo habilitado e transmitido juntamente com o valor total da energia total dos mesmos para cada banda. Desse modo, diminui-se a complexidade da etapa
de decodificao evitando o processamento destes coeficientes no codificador sem perdas.
O processo de decodificao neste caso realizado a partir de um gerador de nmeros
pseudo-aleatrios que calcula coeficientes na quantidade equivalente referida banda de
fatores de escala. Em seguida, a energia equivalente destes novos coeficientes calculada
e a partir dela gerado um valor de ganho a ser aplicado a cada coeficiente. Finalmente,
os valores dos coeficientes j com o ganho so inseridos nas posies correspondentes no
vetor de coeficientes espectrais.
Joint Stereo Coding
O Joint Stereo Coding ou codificao estreo conjunta utiliza um conjunto de tcnicas
que se baseiam nas semelhanas entre os canais esquerdo e direito, nos casos de som
estreo, para diminuir o tamanho da representao de bits do udio. Esta semelhana
pode ser observada no no domnio do tempo mas sim no domnio da frequncia e pode
ser acentuada dependendo da resoluo temporal do banco de filtros.
No caso do MPEG-4 AAC, duas tcnicas so utilizadas, o Mid/Side Stereo (MS) e o
Intensity Stereo (IS).
M/S Mid-Side Stereo
O Mid/Side Stereo explora o fato de que quando um par de canais tem suas frequncias
muito prximas, a diferena entre os valores de seus coeficientes espectrais ser mnima.
Neste caso, a tcnica consiste em transformar a soma dos canais esquerdo e direito em
um s canal central (Mid) e a diferena entre eles em um outro canal (Side). Esta uma
tcnica de compactao sem perda de informaes.
m=L+R
s=LR
(2.8)
19
A (z )
e (k )
TNS
e (k )/ X (k )
Figura 2.12: Esquema do TNS para controle dos efeitos de pr-eco ((Ref. (29))
20
0.8
0.8
0.6
0.6
0.4
0.4
0.2
0.2
Amplitude
Amplitude
0
0.2
0
0.2
0.4
0.4
0.6
0.6
0.8
0.8
200
400
600
800
Sample (n)
200
400
600
800
Sample (n)
Figura 2.13: Exemplo de onda sonora ressaltando a diferena entre a codificao com
TNS (esquerda) e sem TNS (direita). (Ref. (29))
2.2.7
21
N
1
X
x(n)hk (n), 0 k
n=0
N/21
x(n) =
X
k=0
N
1
2
(2.10)
N
X(k)hk (n) + X (k)hk n +
2
P
(2.11)
Conforme ressaltado por Spanias (29), a sobreposio de 50% da janela anterior com
50% da janela atual utilizada neste processo, praticamente eliminando os artefatos
oriundos da mudana entre os blocos. Este procedimento completo pode ser observado
no diagrama da Figura 2.14.
Janela k
N/2
Janela k + 1
N/2
Janela k + 2
N/2
Janela k + 3
N/2
N
N
N
MDCT
N/2
MDCT
N/2
MDCT
N/2
(a)
N/2
IMDCT
N/2
IMDCT
N/2
IMDCT
N
+
N
+
N/2
N/2
Janela k + 1
Janela k + 2
(b)
Figura 2.14: Diagrama do Processamento das Janelas do Banco de Filtros. Em (a) temos
a etapa de codificao convertendo N amostras em grupos de N/2 coeficientes espectrais.
Em (b) temos a etapa de decodificao convertendo os N/2 coeficientes espectrais em N
amostras e aplicando o procedimento de sobreposio e adio (Overlap and Add ). (Ref.
(29))
22
n+
, 0n<
(2.12)
wsen_esq (n) = sen
N
2
2
wsen_esq (n) = sen
1
N
n<N
n+
,
2
2
(2.13)
I0
W 0 (n, ) =
nN/4
N/4
2
#
para 0 n
I0 []
I0 [x] =
X
k=0
23
"
x k
2
k!
(2.15)
N
2
(2.16)
#2
(2.17)
Uma comparao entre ambas as funes Senoidal e KBD pode ser vista na Figura 2.15.
Figura 2.15: Funes Senoidal em KBD para janelas longas (Ref. (38)).
O Banco de Filtros do AAC aplica 4 formas de janelas: Only Long Sequence, Eight
Short Sequence, Long Start Sequence e Long Stop Sequence. Os dois ltimos formatos so
usados para fazer a transio entre as janelas longas e curtas. A utilizao de cada um
destes formatos controlada pelo parmetro window sequence. Tanto o formato da janela
atual quanto da janela anterior so usados pelo decodificador para efetuar a transio
entre elas. Alm disso, conforme citado anteriormente, a funo aplicada a cada parte da
janela depende da funo da janela anterior, ou seja, do valor do window shape atual e
anterior.
No caso das janelas longas no formato Only Long Sequence temos 2.18:
wshape_anterior,N =1024 (n),
para 0 n < 1024
w(n) =
(2.18)
wshape_atual,N =1024 (n),
para 1024 n < 2048
apresentada pela Equao 2.21. Note que a funo da janela anterior s afeta a primeira
das oito janelas curtas (8 * 256 = 2048).
wshape_anterior,N =256 (n),
para 0 n < 128
w0 (n) =
(2.19)
wshape_atual,N =256 (n),
para 128 n < 256
w1 a 7 (n) =
0,
0,n448 w0 (n 448),
x
w (n 1344),
7,n1344 7
0,
(2.20)
para 1 j < 8
e 128j + 448 n < 128j + 576
para 1472 n < 1600
para 1600 n < 2048
(2.21)
No caso das janelas de transio Long Start Sequence e Long Stop Sequence temos as
Equaes 2.22 e 2.23 respectivamente.
1,
para 1024 n < 1472
w(n) =
(2.22)
wshape_atual,N =256 (n),
para 1472 n < 1600
0,
para 1600 n < 2048
Zi,n
0,
para
para
para
para
0 n < 448
448 n < 576
576 n < 1024
1024 n < 2048
(2.23)
25
0.9
0.8
0.8
0.7
0.7
0.6
0.6
w(n)
w(n)
0.9
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0
0
256
512
768
1024
n
(a)
1280
1536
1792
0
0
2048
1
0.9
0.8
0.8
0.7
0.7
0.6
0.6
768
1024
n
(b)
1280
1536
1792
2048
w(n)
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1
0.1
0
0
512
w(n)
0.9
256
256
512
768
1024
n
(c)
1280
1536
1792
0
0
2048
256
512
768
1024
n
(d)
1280
1536
1792
2048
Figura 2.16: Representao das quatro formas de janela do Banco de Filtros (a) Eight
Short Sequence, (b) Only Long Sequence, (c) Long Start Sequence, (d) Long Stop Sequence.
2.3
Coprojeto
Algoritmo em
software
Coprojeto
HW/SW
Algoritmo em
hardware
Consumo de
Energia
Alto
Esforo de
Implementao
Baixo
Flexibilidade da
Soluo
Alto
Mdio
Mdio
Mdio
Baixo
Alto
Baixo
2.4
FPGA
De acordo com a metodologia adotada, a validao do projeto passa por uma etapa
de prototipao em arquiteturas reconfigurveis. No caso, escolhemos a tecnologia FPGA
(Field-programmable gate array) em que possvel programar um circuito lgico e depurar
sua arquitetura at alcanarmos o desempenho e a rea adequados. Neste caso, o FPGA
pode ser utilizado tanto como tecnologia fim para a implementao do circuito desejado
como meio para a validao do projeto a ser futuramente fabricado em um SoC (Systemon-a-Chip).
Os FPGAs so circuitos integrados compostos por clulas lgicas que podem ser programadas para executar funes lgicas, armazenar dados e efetuar roteamento de sinais
para outras clulas lgicas. Sua programao realizada atravs de linguagens de descrio de hardware HDL (Hardware Description Language) sendo as mais comuns o VHDL
(VHSIC Hardware Description Language) e Verilog.
Atualmente esto presentes no mercado diversos fabricantes de FPGA incluindo Achronix Semiconductor, Actel, Altera, AMI Semiconductor, Atmel, Cypress Semiconductor,
Lattice Semiconductor, QuickLogic, e Xilinx. Cada fabricante oferece dispositivos com
diversos tamanhos em termos do nmero total de portas lgicas, memrias embarcadas e
elementos de processamento DSP embutidos.
27
Em relao aos processadores embarcados podemos observar exemplos dos dois maiores
fabricantes tendo a Altera com o Nios II que um Soft Processor ou softcore (processador
configurveis que utiliza os elementos lgicos do FPGA) e a Xilinx com o Soft Processor
MicroBlaze. Tambm esto disponveis processadores hardcore como o ARM na famlia
Cyclone V da Altera, o que torna solues de coprojeto mais eficientes.
Apesar de historicamente os FPGAs oferecerem um nmero limitado de clulas lgicas,
baixa frequncia e maior consumo de energia comparado s solues em hardware dedicado
(ASIC), temos anncios recentes como o Virtex-7 da Xilinx (36) com at 2.000.000 de
clulas lgicas fabricado com tecnologia de 20nm e o Stratix 10 da Altera (6) com 4.000.000
de clulas lgicas fabricado com tecnologia de 14nm podendo alcanar frequncia de at 1
GHz e capaz de reduzir em at 70% o consumo de energia em comparao com dispositivos
anteriores. Estas caractersticas, tornam estes dispositivos cada vez mais atrativos para
uso em larga escala.
2.5
Reviso de literatura
real a 3,3 MHz utilizando uma rea de 3x3mm2 com consumo de 158 mW na tecnologia
TSMC de 0,25 m. O nmero total de Logic Gates de 82,2k porm, a quantidade de
memria utilizada no reportada. Em 2009 (32), uma nova proposta de low-power foi
feita na qual se utilizam 102k Logic Gates em que possvel decodificar um udio de dois
canais a 1,3MHz que consome apenas 2,45mW. Desta vez, a tecnologia UMC 0,18 m
utilizada ocupando a mesma rea de 3x3mm2 .
Uma outra soluo especfica para o decodificador AAC-LC para dois canais utilizando
a abordagem de coprojeto apresentada por Liu e Tsai (23) na qual a plataforma base
composta por um processador ARM (ARM920T) em silcio acoplado a um FPGA Xilinx
(VertexE XCV2000E FG 680). Durante o desenvolvimento observou-se a necessidade de
175 MHz para atingir os requisitos de tempo real para dois canais na soluo em software.
O mdulo crtico escolhido para implementao em hardware foi o Banco de Filtros,
cuja comunicao foi feita por meio de um barramento AMBA. Neste caso, alcanou-se a
decodificao em tempo real com o processador a 41 MHz e o mdulo em hardware a 22,8
MHz. Em 2008 (35), a mesma equipe apresentou uma nova soluo de coprojeto para os
padres AAC, AC3 e MP3 utilizando novamente o ARM acoplado a um Banco de Filtros
em hardware. Desta vez, alcana-se a decodificao em tempo real a 5 MHz.
Ainda utilizando o coprojeto, temos a abordagem de Zhou et al. (37) implementada
em um SoC que incorpora um processador OpenRISC acoplado a um Banco de Filtros
reconfigurvel baseado no CORDIC (Coordinate Rotation Digital Computer ) capaz de ser
utilizado para os padres AAC, MP3, WMA, AC3 e Vorbis. Neste caso, so necessrios
44,3 k Logic Gates e um total de 78 kB de memria. A decodificao de udio AAC em
tempo real para um alta qualidade de 256 kpbs ocorre a aproximadamente 16 MHz.
Em Tao et al. (31) uma soluo de coprojeto proposta para decodificar o AACLC de dois canais em conjunto com o MP3. Neste caso, tanto a decodificao Huffman
quanto a IMDCT so implementadas em hardware. A implementao realizada em
FPGA na plataforma XUP VIIP da Xilinx com um processador PowerPC embarcado. A
decodificao em tempo real s alcanada, neste caso, com o processador a 300 MHz
para um udio de dois canais a 118 kbps.
O trabalho de Renner (27) apresenta uma arquitetura simplificada em FPGA para o
Decodificador AAC-LC de dois canais. Neste caso, temos uma soluo toda em hardware
porm, a mesma no contempla nenhuma das ferramentas de processamento espectral ou
mesmo a decodificao dos protocolos LATM/LOAS ou MP4. No total so utilizados
26.549 elementos Lgicos com 248.704 bits de memria sendo capaz de decodificar um
udio de dois canais a 128 kbps em tempo real com o relgio a 4 MHz.
A Tabela 2.6 apresenta um resumo das solues citadas buscando colocar em perspectiva as diferentes abordagens com suas semelhanas e diferenas. Como podemos observar,
temos uma soluo em software, trs solues puramente em hardware sendo duas delas
em ASIC e uma em FPGA. Alm disso, temos trs solues que utilizam a tcnica de
coprojeto de hardware e software, uma delas implementa um hardware dedicado em silcio
e duas utilizam processadores VLSI combinados com mdulos em hardware desenvolvidos
em FPGA.
30
Desempenho
do Processador
Freq. do Processador
Freq. do Hardware
N. de Canais
Tx.
Amost.
udio
Bitrate
Power
LE (FPGA) /
LG (ASIC)
Processador
Tecnologia
Decodificador
Implementado
Arquitetura da
Soluo
Referncia
3,3 MHz
2
44,1 kHz
128 kbps*
158 mW
82,2 k LG
133 MHz
-
6
48 kHz
432 kbps
300 mW
Processador
de
Propsito
Geral
RISC NEC
V380
158 MIPS
ASIC
(TSMC
0,25m)
31
128 kbps*
2,45 mW
102 k LG
2
44,1 kHz
1,3 MHz
ASIC
(UMC
0,18m)
MPEG-2
AAC-LC
HardwarePuro
Tsai e Liu
(32)
128 kbps*
N/A
26549 LE
(248704
bits de
memria)
2
48 kHz
4 MHz
FPGA
(Cyclone II
Altera)
MPEG-2
AAC-LC
HardwarePuro
Renner
(27)
128 kbps*
N/A
6266 Slices
2
44,1 kHz
22,8 MHz
VLSI /
FPGA
(Xilinx
VertexE)
ARM
(ARM920T)
60 a 200
MIPS
41 MHz
MPEG-2
AAC-LC
Coprojeto
HW/SW
Liu and
Tsai (23)
128 kbps*
N/A
44,3 k LG
+ 16 k
RAM + 4 k
ROM
2
44,1 kHz
10,6 MHz
OpenRisc
1200
250 MIPS
@ 250MHz
10,6 MHz
MPEG-2
AAC-LC /
MP3
VLSI
Coprojeto
HW/SW
Zhou et
al. (37)
118 kbps
N/A
N/A
2
48 kHz
N/A
300 MHz
N/A
PowerPC
MPEG-2
AAC-LC /
MP3
FPGA
(Xilinx
XUP V2P
Coprojeto
HW/SW
Captulo 3
Desenvolvimento do AAC
3.1
Cdigo de Referncia em C
Stereo
(dB)
Mono
(dB)
79,09
79,28
79,38
79,42
79,48
79,52
79,54
79,00
79,33
78,87
78,91
80,22
80,36
79,13
32
Arquivo
Original
(PCM)
Arquivo
Codificado
(RAW)
Codificador ISO
Decodificador
ISO
Decodificador
UnB
Arquivo
Decodificado
ISO (PCM)
Arquivo
Decodificado
UnB (PCM)
Comparador
Resultados
SNR
Decodificador UnB
Nero AAC Dec
FAAD2
iTunes
33
Tempo de
Decodificao
(seg)
46,23
16,20
25,39
19,80
3.2
Aps ter o cdigo validado, a etapa seguinte foi a de preparao do ambiente para
os testes de perfilamento. Seguindo a filosofia do coprojeto, faz-se necessrio definir uma
arquitetura e uma plataforma alvo para realizar o perfilamento do cdigo j que cada
FPGA e processador possuem caractersticas diferentes e consequentemente apresentam
desempenhos diferentes em cada etapa do algoritmo.
Para o FPGA, escolhemos a famlia Cyclone II do fabricante Altera com a placa
DE2-70 desenvolvida pela Terasic. Este kit de desenvolvimento oferece fcil acesso a
botes, LEDs, LCD, switches e sada de udio com conversor D/A adequada para a sada
do decodificador. Alm disso, o FPGA oferece 70 mil elementos lgicos que oferecem
tamanho suficiente para testes com arquiteturas variadas.
Em relao ao processador, a primeira escolha foi baseada em uma arquitetura aberta.
Neste caso, utilizou-se o Plasma que uma implementao aberta do MIPS disponvel
no OpenCores. Porm, apesar de faz-lo funcionar adequadamente na plataforma alvo, o
compilador disponvel no suportava o uso de bibliotecas e, portando, no seria possvel
seu uso, sendo necessrio criar uma tool chain para compilar o projeto como um todo.
Visando o incio mais rpido dos testes, optou-se pela escolha do processador NIOS II
que um softcore disponibilizado juntamente com as ferramentas do prprio fabricante
(Altera) e que oferece uma IDE pronta para desenvolvimento e testes integrada com o
FPGA.
Neste caso, criou-se um projeto utilizando-se o ambiente SOPC Builder (System on a
Programmable Chip Builder), ferramenta integrada ao Quartus II que permite a definio
de uma arquitetura com processador e perifricos conectados por meio do barramento
Avalon da Altera. Em sua configurao inicial, utilizamos a verso do processador com
maior desempenho disponvel (Nios II/f) incluindo multiplicadores em hardware e unidade
de ponto flutuante. Alem disso, utilizou-se a frequncia de 100MHz que a mxima
pode ser alcanada com esta arquitetura nesta placa de desenvolvimento. A configurao
detalhada apresentada na Tabela 3.3 e a configurao da arquitetura no ambiente SOPC
Builder apresentada na Figura 3.2.
Tabela 3.3: Detalhes da Configurao da Arquitetura Inicial do Processador, Memrias
Item
Processador
Tipo
Nios II/f
Memria
Memria
Mem. Flash
SSRAM
SDRAM
Flash
Observaes
Floating Point Hardware
Hardware Multiply (Embedded Multipliers)
Hardware Divide (Embedded Multipliers)
Instruction Cache - 4KB
Data Cache - 4KB
Memria principal (2MB)
Memrias auxiliares (2x32MB)
Armazenamento do Bitstream a ser decodificado (8MB).
Para que o cdigo original funcionasse no processador dentro do FPGA, foram necessrias adaptaes nas funes de entrada e sada como a leitura do arquivo de entrada
34
Elementos
Lgicos
Clulas
Lgicas
(Comb.)
Clulas
Lgicas
(Regs.)
Memria
(Bits)
Multiplicadores
Dedicados
(9x9-bit)
Processador +
Floating Point
Unit
+ Barramento
13301
11283
7562
175676
11
35
3.3
Profiling do cdigo
Razo para
Tempo Real
Tempo
Mximo (ms)
Razo para
Tempo Real
566,89
553,29
534,34
498,62
464,59
9,45
9,20
8,90
8,30
7,75
226,05
216,63
202,08
183,26
172,36
10,85
10,40
9,70
8,80
8,25
Tempo (s)
28,00
146,87
Parser
Decodificao de Entropia (Huffman +
Quantizao Inversa + Re-escalonamento)
Ferramentas Espectrais*
IS
MS
TNS
PNS
Banco de Filtros
Total
*A linha de Ferramentas Espectrais representa
Razo (%)
5,03 %
13,19 %
19,02
3,42 %
4,64
0,84 %
4,12
0,74 %
10,12
1,82 %
0,16
0,03 %
436,31
78,37 %
630,19
100 %
a soma de IS, MS, TNS e PNS.
Observa-se que, pela natureza do decodificador de entropia, seu tempo total de decodificao para cada raw data block pode variar e, portanto, procuramos considerar os
casos em que houvessem poucos elementos sintticos FIL onde se preenche o bloco com
dados vazios. Para o Banco de Filtros observa-se que o tempo de processamento varia
37
com o tipo de janela sendo o caso da janela curta aproximadamente 70% do tempo de
processamento da janela longa principalmente devido ao menor nmero de estgios da
FFT (6 ao invs de 9). Nos trechos de udio selecionados pouco mais da metade das
janelas so no formato longo.
3.4
3.5
Decodificador de Entropia
3.5.1
bitstream. A operao consiste na realizao de dois laos sendo o externo definido pelo
nmero de grupos de janelas g de 0 a num window groups e o lao interno regido pelo
valor sf b que vai de 0 ao valor mximo de bandas de fatores de escala (max sfb). Alm
destes, outros valores decodificados anteriormente pelo parser, o valor do Ganho Global
(Global Gain) e o vetor com o nmero do codebook a ser utilizado para cada banda de
fator de escala (sfb_cb) so utilizados. Estes dois laos so controlados por uma mquina
de estados que varre o vetor sfb_cb. Aqui existem 3 casos possveis para o valor de sfb_cb:
1. ZERO_HCB (0): neste caso o valor do Fator de Escala nesta posio composta de
g e sf b;
2. INTENSITY_HCB (14) ou INTENSITY_HCB2 (15): neste caso o valor do Fator
de Escala se refere posio de referncia para uso da ferramenta espectal Intensity
Stereo. Aqui se decodifica o valor a partir do bitstream utilizando a tabela Huffman.
3. Demais valores: aqui se decodifica o valor do Fator de Escala a partir da Tabela
Huffman.
A decodificao efetuada com acesso tabela Huffman realizada por uma segunda
mquina de estados onde o bitstream lido, 1 bit por vez, e o valor deste bit juntamente
com um offset que inicia em zero, so utilizados para acessar a tabela. O Offset define a
linha enquanto o valor do bit (0 ou 1) define a coluna a ser acessada. O valor encontrado
na posio acessada retornado para incrementar o valor do offset, um novo acesso
tabela realizado com a nova posio do offset at que se encontre uma posio com
valor igual a 0. Neste caso, o valor da coluna 0 da linha correspondente ao offset
retornado e utilizado para o clculo do Fator de Escala.
O valor do fator de escala com largura de 9 bits ento armazenado na memria ICS
para ser utilizado mais frente tanto pelo Re-escalonador quanto pelo processamento
espectral.
3.5.2
acordo com as entradas de cada bit at encontrar um valor vlido ou um erro. Neste caso,
retornado um valor idx a partir do qual so calculados 2 ou 4 valores de coeficientes
espectrais quantizados. Em seguida, se avana para a prxima posio dentro da seo.
3.5.3
Quantizao Inversa
A implementao da Quantizao inversa foi realizada integrada sada do decodificador de Dados Espectrais. Com o intuito de obter uma soluo de rpido processamento
para implementar a equao 2.6 que envolve uma potncia complexa a ser calculada em
poucos ciclos, observa-se o fato de que, sendo os coeficientes quantizados com largura de
13 bits, temos um total de 8192 possveis valores. Porm, ao invs de implementar uma
tabela com 8191 valores, optou-se por usar uma tabela menor e o recurso de interpolao
para reduzir o tamanho do hardware. Para isso, tomou-se como referncia os trabalhos
de Hee, Sunwoo a Moon (15) e Tsai et al. (33).
Nesta abordagem, os valores de 0 a 8191 so divididos em 3 faixas (0 a 255, 256 a
2057 e 2048 a 8191). Os valores da primeira faixa so obtidos diretamente por meio de
uma tabela com 256 valores de 16 bits de largura, representando as entradas de x4/3 .
Neste caso, x4/3 = f (x), onde f (x) representa o valor da tabela pr-calculada de x4/3
para o ndice x entre 0 a 255. As duas faixas seguintes so obtidas por aproximao por
meio das Equaes 3.2 e 3.3. Para executar os clculos de aproximao, so usados um
multiplicador, dois somadores e operaes de shift para as divises.
x
x
x
x
+1 f
rem
+f
16, para 256 x < 2048 (3.2)
x4/3 2 f
8
8
8
8
x
x
x
x
x4/3 2 f
+1 f
rem
+f
16, para 2048 x < 8192 (3.3)
64
64
64
64
A sada da quantizao so os coeficientes representados por 24 bits, sendo 1 para
sinal, 18 de parte inteira e 6 de parte fracionria.
3.5.4
Re-escalonador
40
(3.4)
O valor final dos coeficientes espectrais representado com 32 bits sendo 1 de sinal,
25 de parte inteira e 6 de parte fracionria.
3.5.5
Decodificador
de Fatores
de Escala
RAM
(Fatores de
Escala)
avs_address
avs_write
avs_writedata
avs_read
avs_readdata
Interface
Avalon
Interface
com o
Bitstream
Buffer
bit_request
bit_ready
bit_in
Decodificador
de Dados
Espectrais
RAM
ICS
Quantizao
Inversa
RAM
(Coeficientes
Espectrais)
Reescalonador
Controle
Dados
Elementos
Lgicos
Memria
(bits)
94
380
4318
1625
394
6417
0
16576
3.6
4608
0
0
0
32768
53952
Multiplicadores
Dedicados
(9x9-bit)
0
0
8
4
3
15
Stream Buffer
A leitura do bitstream realizada pelo decodificador 1 bit por vez no caso do decodificador de entropia e de 1 a 16 bits por vez para o caso do parser. Considerando
que a entrada de dados pode vir da leitura de um arquivo em disco, em memria ou de
uma transmisso direta, estes dados normalmente viro agrupados em um ou mais bytes
tornando necessrio um mecanismo para leitura com maior granularidade.
A primeira verso do Stream Buffer foi feita direcionada especificamente para o Decodificador de Entropia permitindo apenas a leitura de 1 bit por vez diretamente em
hardware. Depois, observamos que o parser sendo executado pelo processador tambm
poderia se beneficiar deste mdulo j que o processador gasta alguns ciclos para poder
realizar as operaes de shift e concatenao e mascaramento para obter a quantidade
requerida de bits.
A verso mais simples de 1 bit foi criada baseada em um buffer circular contendo ao
todo 64 bits separados em dois registradores de 32 bits. Neste caso, optou-se pelos 32
42
bits para aproveitar a largura de palavras do barramento Avalon que transmite em uma
s comunicao o mximo de bits possvel. O mdulo controlado por duas mquinas
de estado, uma para atender s solicitaes de leitura dos bits e realizar a operao de
deslocamento e a outra para realizar a recarga dos registradores. A existncia dos dois
registradores garante que a operao de leitura no ser interrompida j que a recarga
realizada em paralelo.
A segunda verso inclui a possibilidade de leitura de qualquer valor entre 1 e 16 bits
e foi implementada com o mesmo princpio dos dois registradores de 32 bits, porm com
adaptaes. Neste caso trs mquinas de estado atuam em conjunto. A primeira controla
as requisies de leitura do buffer, a segunda controla o procedimento de recarga do buffer
enquanto uma terceira atua como intermediria para sincronizar os sinais de buffer vazio
e buffer recarregado.
A Figura 3.4 apresenta a arquitetura do Stream Buffer enquanto as Figuras 3.5 e 3.6
apresentam os diagramas com o funcionamento das duas principais mquinas de estado.
Note que os 16 bits iniciais do registrador 1 so replicados ao final para que a leitura
de bits acima de 48 possam ser realizadas com at 16 bits de largura j contando com a
prxima recarga do registrador 1.
Stream Buffer
avs_address
avs_write
avs_writedata
Controle
Demux
Interface
Avalon
Reg 1
Reg 2
3132
63 64
80
avs_read
avs_readdata
Mux
bits_out
(16 bits)
bits_out_ready bits_request
(5 bits)
(1 bit)
buffer_1_vazio =
buffer_2_vazio =
buffer_2_vazio =
buffer_1_vazio =
'1'
'1'
'1'
'1'
&
ponteiro < 16 ou,
& 15 < ponteiro < 32 ou,
& 31 < ponteiro < 48 ou,
& 47 < ponteiro < 64
s0
bit_request = 0
s1
ponteiro > 63
bit_request 0
s3b
s3a
s2
buffer_1_vazio = '0'
buffer_2_vazio = '0'
s1b
s1a
byte_avaliable = '0'
s2
current_reg = '1'
byte_avaliable = '0' &,
buffer_2_vazio = '0'
current_reg = '0'
= '0' &,
{byte_avaliable
buffer_2_vazio = '0'
}
s3a
s3b
44
3.7
Elementos
Lgicos
112
509
Memria
(bits)
0
0
Multiplicadores
Dedicados (9x9-bit)
-
O Banco de Filtros Inverso foi o segundo mdulo em hardware a ser desenvolvido nesta
arquitetura. Conforme apresentado na seo 2.2.7, o Banco de Filtros Inverso composto
pela IMDCT, seguida da aplicao das funes de Janelamento e da sobreposio e adio
com parte da janela anterior (Overlap and Add ). Este o mdulo que contm as funes
mais crticas de todo o AAC em termos de utilizao de memria e processamento. Conforme visto no procedimento de Profiling na seo 3.3, seu processamento responsvel
por aproximadamente 78% do uso do processador.
Conforme determinado pela norma ABNT NBR 15602-2 (1), o AAC deve decodificar
tanto janelas curtas com N=256 amostras quanto janelas longas com N=2048 amostras.
No caso do Banco de Filtros Inverso, o processamento feito individualmente para cada
canal onde a entrada fixa com 1024 coeficientes espectrais e um flag indicando o tamanho
da janela informa se uma janela longa onde os N/2=1024 coeficientes so decodificados de maneira contnua ou se temos oito janelas curtas, contendo 8 grupos de N/2=128
coeficientes espectrais. Alm desta informao, recebem-se tambm os parmetros window_shape informando o tipo de funo utilizada no Janelamento e window_sequence
que indica a forma da sequncia a ser usada para o Janelamento.
45
Conforme visto na Reviso de Literatura e discutido por Li (22) e Lai (21), existem
diversas maneiras de implementar o algoritmo da IMDCT. Existem mtodos que utilizam
uma arquitetura recursiva e que so propcios para situaes nas quais se tm poucos
recursos de hardware e em que o requisito de velocidade de processamento baixo, conforme pode ser visto em (25, 8). Por outro lado, h mtodos de implementao baseados
em um ncleo de FFT que oferece no s um desempenho computacional rpido quanto
maior preciso, conforme pode ser visto em (13, 11, 24). Seguindo nossas necessidades
de decodificao em tempo real, optamos pela implementao com o uso da FFT que, no
caso baseada no algoritmo Radix-2.
A implementao do Banco de Filtros composta por quatro grandes mdulos. Os
primeiros trs so a implementao da IMDCT que dividida na primeira etapa de
Pr-processamento, na segunda etapa onde se utiliza uma iFFT ou uma FFT inversa
e na terceira etapa de Ps-processamento. O ltimo mdulo implementa em conjunto as
funes de Janelamento, Sobreposio e Adio (Windowing, Overlap and Add ).
A seguir descrevemos a implementao de cada um destes mdulos.
3.7.1
Pr-Processamento da IMDCT
2k
+ 4N
N
) , para 0 k < N
4
(3.6)
pelos chamados fatores Twiddle de ej ( N + 4N ) , uma soma e uma subtrao para obter os
vetores Real e Imaginrio. No algoritmo n2 e n4 so os valores da entrada N = 2048 ou
256 dividido por 2 e 4 respectivamente, X o vetor de entrada, Re e Im so a os vetores
Real e Imaginrio de sada. Os fatores Twiddle esto armazenados em 2 tabelas de seno
e cosseno.
Algoritmo 3.1: Algoritmo do Pr-processamento da IMDCT
for (k = 0; k < n4; k++) {
Im[k] = (X[2k] * twiddle[0][k]) + (X[n2-1-2k] * twiddle[1][k]);
Re[k] = (X[n2 - 1 - 2k] * twiddle[0][k]) - (X[2k] * twiddle[1][k]);
}
46
Pr - IMDCT
X[0]
tw0[0]
Im[0]
tw1[0]
X[1]
tw0[3]
Re[3]
- tw1[3]
tw0[1]
X[2]
Im[1]
tw1[1]
X[3]
tw0[2]
- tw1[2]
tw1[2]
X[4]
- tw1[1]
tw0[1]
X[5]
tw1[3]
tw0[3]
X[6]
tw0[2]
Re[2]
Im[2]
Re[1]
Im[3]
- tw1[0]
X[7]
tw0[0]
Re[0]
start
k = N/4
s0
done
s1
3.7.2
Tabela 3.9: Exemplo dos valores dos sinais do Pr-processamento para janelas longas
Estados
Sinais
de
controle
k_aux
k
x_addr
Valor
Inicial
0
0
0
x1_addr
x2_addr
twd_addr
Re_Im_addr
Entradas
0
1023
0
0
start
s0
s1
s0
s1
...
done
0
0
1023
(x2_addr)
0
1023
0
0
0
1
2
(x1_addr)
2
1021
1
1
0
1
1021
(x2_addr)
2
1021
1
1
0
2
1
2
...
...
511
511
1019
...
4
1019
2
2
4
1019
2
2
...
...
...
...
x(0)
(x(2k))
x(1)
(x(2k))
x(0)
(x(2k))
twd_0(k)
twd_1(k)
x(1021)
x(2)
...
x(1)
x(1)
...
twd_0(k)
twd_1(k)
x(1023)
(x(n2-1-2k))
x(0)
(x(2k))
twd_0(k)
twd_1(k)
...
...
...
...
...
...
Re(0)
Im(0)
...
...
x
x_tmp
twd_0
twd_1
Saidas
Re
Im
1022
1
511
511
Re(511)
Im(511)
Operaes
com Dados
s0
k_aux <= k
k<=k+1
twd_addr<=k+1
x1_addr<=(k+1)&0
x2_addr<=not(x1_addr)&1
m1<=xtwd_0
m2<=xtwd_1
m3<=x_tmptwd_0
m4<=x_tmptwd_1
s1
Im <= m1 + m4
Re <= m3 - m2
Tabela 3.11: Tabela com o nmero de bits para operaes de ponto-fixo do Prprocessamento da IMDCT
Dado
Entradas (Coef_Spec_in)
Twiddles
Sadas (Re e Im)
Sinal
1
1
Parte Inteira
25
1
15
Parte Fracionria
6
31
16
potncia de 2. A Equao 3.7 representa o clculo da FFT onde, dada uma sequncia
x(n), calcula-se X(k). As equaes 3.8 a 3.9 apresentam a fatorao de 3.7 mostrando o
princpio do algoritmo Radix-2.
X(k) =
N
1
X
x(n) e(i
2nk
N
(3.7)
n=0
N/21
N/21
X(k) =
x(2n) e
(i
2(2n)k
N
)+
x(2n + 1) e(i
N/21
X(k) =
(3.8)
n=0
n=0
2(2n+1)k
N
N/21
x(2n) e
(i 2nk
N/2 )
(i 2nk
N )
+e
n=0
2nk
(3.9)
n=0
X(k) = DF T N [[x(0), x(2), ..., x(N 2)]] + WNk DF T N [[x(1), x(3), ..., x(N 1)]] (3.10)
2
Nestas Equaes possvel observar a separao dos coeficientes mpares (lado direito
das somas) dos pares (lado esquerdo das somas), transformando as N entradas em dois
grupos de N/2 entradas, operao esta que aplicada recursivamente at atingir a unidade
mnima de clculo que uma Borboleta (Butterfly). A Borboleta que consiste em 2
multiplicaes e duas somas de nmeros complexos conforme a Figura 3.9. Nela, so
2nk
utilizados os fatores Twiddle que so representados na Equao 3.9 por e(i N ) e 3.10
por WNk . As Equaes 3.11 e 3.12 apresentam a operao da borboleta.
X0 = x0 + WNk x1
(3.11)
X1 = x0 WNk x1
(3.12)
x0
X0
k
x1
WN
-1
X1
X(0)
x(0)
x(4)
WN0
WN0
x(2)
x(6)
X(1)
-1
WN0
WN2
-1
-1
x(1)
x(5)
WN0
X(3)
WN0
WN1
-1
WN0
x(3)
x(7)
X(2)
-1
WN0
WN2
-1
WN2
-1
-1
WN3
-1
-1
-1
-1
X(4)
X(5)
X(6)
X(7)
51
Configurao
Ver.1
Ver.2
Ver.3
3820
727
8
1536
29,44 us
80,8 MHz
3 Laos de
tamanho
varivel
Memria
Single Ch.
1948
765
32
1984
26 us
76,9 MHz
2 Laos de
tamanho
fixo
Memria
Single Ch.
1958
760
32
1984
22,3 us
76,9 MHz
2 Laos de
tamanho
fixo
Memria
Single Ch.
Pipeline de
5 ciclos
3 dias
Tempo de Implementao
Ver.4
2126
592
64
1984
13,5 us
76,4 MHz
2 Laos de
tamanho
fixo
Memria
Dual Ch.
Pipeline de
3 ciclos
RTL
Verilog
1306
385
32
2048
16,6 us
167,87 MHz
1 Lao de
tamanho
varivel
Memria
Single
Channel
16 dias
Com o intuito de realizar o menor nmero de ciclos possvel, observamos que temos
duas reas de memria, onde se pode ler ou gravar 2 dados por ciclo de clock. Como
necessrio ler 4 dados e escrever outros 4 dados, o tempo mnimo neste algoritmo inplace
para a execuo da borboleta de 4 ciclos.
Como as multiplicaes so realizadas somente para os valores Re(j) e Im(j), podem
ser executadas j no estado s0, em seguida, realizamos a soma e subtrao dos resultados
da multiplicao em s1 e recuperamos os valores de Re(i) e Im(i) da memria. Em
s2 realizamos a somas e subtraes finais gerando as 4 sadas que so ento gravadas
novamente na memria em s3 e s0.
Alm da Borboleta, outras duas mquinas de estado so utilizadas para controlar os
laos de bit reverse e o lao principal da FFT. Na operao de bit reverse, as posies dos
vetores de entrada so reordenadas invertendo suas posies na memria pelo endereo
de bits invertido conforme pode ser visto na Figura 3.11. Neste caso, por exemplo, o
endereo 0001 vira 1000 enquanto 0110 se mantm.
O lao principal implementado em uma mquina com 4 estados que operam sincronicamente e em paralelo borboleta. Neste caso, os ndices de cada iterao da fft so
calculados e incrementados. No total, so realizadas log2 (N )N/2 operaes de borboleta,
52
s0
enable_loop = '0'
s0
s4
s1
s1
done
s2
s3
s2
s3
k = fft_size
3.7.3
Sinal
1
-
Parte Inteira
15
1
Parte Fracionria
16
31
Ps-Processamento da IMDCT
O Ps-processamento a etapa final da IMDCT onde os vetores Re e Im sero novamente transformados nos 2048 coeficientes espectrais. Este processamento realizado em
duas etapas. A primeira delas tem processamento semelhante ao da primeira etapa da
IMDCT, o Pr-processamento. Neste caso, o clculo representado pela Equao 3.13,
onde Y a sada intermediria e X a entrada dos vetores Real e Imaginrio.
Y (k) = X(k) ej (
2k
+ 4N
N
53
) , para 0 k < N
4
(3.13)
k = N/4
s0
done
s1
realizada conforme apresentado nas Equaes 3.14 a 3.21, onde X o vetor composto
pelos valores Reais e Imaginrios (Re e Im) e Y a sada.
N
N
+ k , para 0 k <
(3.14)
Y (2k) = Im X
8
8
N
N
k 1 , para 0 k <
(3.15)
Y (2k) = Re X
8
8
N
N
Y
+ 2k = Re [X(k)] , para 0 k <
4
8
N
N
N
Y
+ 2k + 1 = Im X
k 1 , para 0 k <
4
4
8
N
N
N
+ 2k = Re X
+ k , para 0 k <
Y
2
8
8
N
N
N
Y
+ 2k + 1 = Im X
k 1 , para 0 k <
2
8
8
(3.16)
(3.17)
3N
N
Y
+ 2k = Im [X(k)] , para 0 k <
4
8
3N
N
N
Y
+ 2k + 1 = Re X
k 1 , para 0 k <
4
4
8
(3.18)
(3.19)
(3.20)
(3.21)
Sinal
1
1
1
55
Parte Inteira
15
1
15
25
Parte Fracionria
16
31
16
6
k = N/8
s0
s2
s4
s6
s1
s3
s5
s7
s1_wait
s3_wait
s5_wait
s7_wait
done
3.7.4
Integrao da IMDCT
3.7.5
Entrada 1024
Coeficientes Espectrais
(Domnio da Frequncia)
Prprocess.
bit_reverse
X X
X X
IMDCT
FFT-Twiddle
ROM
Re/Im
RAM
(32kb)
X X
X X
Ps-process. Twiddle
X X X X
ROM
iFFT
Mux
iFFT
IMDCT
Twiddle
ROM
Mux
Pr-process.
X X X X
Entrada 1024
Coeficientes Espectrais
(Domnio da Frequncia)
FFTTwiddle
ROM
Twiddle
ROM
Re/Im
RAM
(32kb)
Psprocess.
Sada 2048
Amostras de udio
(Domnio do Tempo)
Sada 2048
Amostras de udio
(Domnio do Tempo)
(a)
(b)
Short_Init_0
buffer_cheio = 1
Short_Init_1
s0
wnd_seq "10"
wnd_seq = "10"
Short_Init_2
Long_S1
Short_S1
done_imdct = 1
Long_S2
Short_S2
wnd_seq = "00"
Only_Long_S3
wnd_seq = "01"
Short_S3
Long_Start_S3
Short
Incrementa
wnd_seq = "11"
Long_Stop_S3
Short_S4
Short_S5
Short_S6
Long_S4
s_done
Janelamento e Sobreposio
(Janelas Longas)
Mux
addr
Only_Long_Sequence
(addr 1024) "000"
(addr 1023) "001"
wnd_seq
"000"
"100"
"011"
"111"
Mux
Long_Start_Sequence
(addr 1023)
(1024 addr 1471)
(1472 addr 1599)
(1600 addr 2047)
Mux
addr
mux_ctrl[2:0]
"111"
"010"
"100"
"001"
Mux
addr
Long_Stop_Sequence
(addr 447)
(448 addr 575)
(576 addr 1023)
(1024 addr 2047)
table_long_kbd[addr]
Mux
table_long_sine[addr]
spec_out[addr]
"111"
prev_wnd_shape
Mux
"000"
table_long_sine[addr_inv]
table_long_kbd[addr_inv]
Mux
wnd_shape
"001"
overlap_buffer[addr]
table_short_kbd[addr_short]
"010"
Mux
table_short_sine[addr_short]
Mux
prev_wnd_shape
X
time_out[addr]
table_short_sine[addr_short_inv]
table_short_kbd[addr_short_inv]
Mux
wnd_shape
overlap_buffer[addr-1024]
"011"
"100"
addr[7]
not addr[7]
Mux
(addr 127)
(128 addr 959)
(960 addr 1087)
(1088 addr 2047)
"00"
"01"
"10"
"11"
Mux
Eight_Short_Sequence
addr
mux_ctrl_[1:0] & addr_aux
"001"
table_short_kbd[addr_short]
Mux
table_short_sine[addr_short]
Mux
prev_wnd_shape
"000"
"001"
spec_out[addr]
short_overlap_buffer[short_addr]
table_short_kbd[addr_short]
"010"
Mux
table_short_sine[addr_short]
Mux
wnd_shape
spec_out_tmp[addr]
table_short_sine[addr_short_inv]
table_short_kbd[addr_short_inv]
Mux
wnd_shape
"011"
"11X"
Entrada 1024
Coeficientes Espectrais
(Domnio da Frequncia)
window_sequence
wnd_shape
previous_wnd_shape
ics_num
Banco de Filtros
Inverso
Controle
X X
IMDCT
X X
Filter Coef.
ROM (72kb)
Windowing
+ Overlap +
Add
Overlap buffer
RAM (64kb)
Short Buffer
RAM (4kb)
Sada de udio
Decodificada
61
Sinal
1
1
1
Parte Inteira
25
1
15
15
Parte Fracionria
6
31
-
Elementos
Lgicos
Memria
(bits)
1192
400
91
503
427
368
2981
0
0
0
0
0
32768
16384
32768
126976
15872
32768
2048
264216
Filterbank_TOP (Windowing,
Overlap and Add)
IMDCT_TOP
Pr-processamento
iFFT
Ps-processamento
Memria ROM Twidles Pr/Ps
Memria ROM Twiddles iFFT
Memria RAM - Real/Imag
Memria ROM - Coefs Jan. Long
Memria ROM - Coefs Jan. Short
Memria RAM - Overlap Buffer
Memria RAM - Overlap Buffer Short
4 Multiplicadores Compartilhados
Total
3.8
Multiplicadores
Dedicados
(9x9-bit)
32
32
Tabela 3.17: Performance de cada Etapa do Decodificador com o Decodificador de Entropia e o Banco de Filtros Inverso em hardware
Mdulos
Tempo (s)
Razo (%)
Parser (Bitstream)
27,99
43,15 %
Decodificao de Entropia (Huff7,08
10,91 %
man + Quantizao Inversa +
Re-escalonamento)
Ferramentas Espectrais*
19,02
29,31 %
IS
4,64
7,14 %
MS
4,12
6,34 %
TNS
10,12
15,59 %
PNS
0,16
0,24 %
Banco de Filtros
10,79
16,63 %
Total
64,89
100 %
*A linha de Ferramentas Espectrais representa a soma de IS, MS, TNS e PNS.
Hardware dedicado, em que necessrio que os dados sejam enviados e retornados
a cada etapa de processamento. Alm disso, o processador ao trabalhar em pontoflutuante enquanto o hardware trabalha em ponto-fixo faz com que um processo de
converso seja necessrio. No caso do Decodificador de Entropia, os parmetros de
decodificao recuperados pelo parser so enviados ao mdulo para processamento
local e o mesmo ter que retornar um vetor de Fatores de Escala mais os Coeficientes
Espectrais para utilizao das Ferramentas Espectrais. Para o processamento do
Banco de Filtros Inverso, so novamente transmitidos os Coeficientes Espectrais e
finalmente retornadas as Amostras de udio para serem normatizadas e executadas
por um tocador embutido no mdulo do parser no processador onde so transmitidos
novamente ao Tocador de udio da placa em hardware.
2. O segundo ponto de atraso a existncia de uma memria nica no sistema que
inviabiliza que tarefas de decodificao sejam executadas em paralelo por mdulos
distintos.
3. O terceiro ponto a melhoria na eficincia de leitura do bitstream pelo parser,
anteriormente comentada na seo 3.6, j que o mesmo foi implementado a princpio
somente para o Decodificador de Entropia com sada para um nico bit por leitura.
Tendo em vista estes problemas identificados, a proposta de soluo descrita a seguir
inclui:
1. A implementao em hardware das Ferramentas Espectrais, o que evitar que a
sada do Decodificador de Entropia tenha de retornar pelo barramento e que a sada
das prprias Ferramentas Espectrais possar ir diretamente para o Banco de Filtros
Inverso;
2. A implementao de uma rea de memria dedicada aos coeficientes espectrais para
viabilizar a comunicao descrita no item anterior;
63
3.9
Memria Compartilhada
64
Decodificador de
Entropia
ICS
RAM
Ferramentas
Espectrais
PNS
Parser
Coeficientes
Espectrais
RAM
M/S
IS
Audio
Codificado
TNS
Banco Inverso de
Filtros
Sada de udio
Decodificada
Controle
Dados
Controlador
Avalon
BUS
Interface
Avalon
Sinais de Controle
Fluxo de dados
RAM
ICS1 + ICS2 + ES
[4096] * [16 bits]
RAM
Coeficientes Espectrais
[2x1024] * [32 bits]
MUX1
MUX2
Banco
Inverso de
Filtros
3.9.1
Vetor Bidimensional
Vetor Tridimensional
Total
Tipo de Varivel
unsigned short int
unsigned char
int [8]
unsigned char [40]
unsigned char [8]
unsigned short int [52]
int [8][4]
signed short[8][51]
unsigned short int [8][52]
unsigned char[8][128]
unsigned char[8][52]
short int [8][4][32]
Quantidade
2
21
2
1
2
1
4
1
1
1
3
1
40
endereado por 6 bits (64 endereos) geraria uma rea no aproveitada de 12 endereos no utilizados. Portanto, foram inseridas variveis neste intervalo, aproveitando
o espao total da memria
A Figura 3.21 apresenta um trecho de exemplo da configurao final da memria
ICS. Observa-se que todos os vetores bidimensionais e tridimensionais foram armazenados
utilizando toda a largura de bits de cada endereo da memria.
Nome da Varivel
sect_sfb_offset[0][52]
(10 downto 0)
52
11
51
element_instance_tag
(5 downto 1)
52
52
common_window
(0)
52
52
window_sequence
(1 downto 0)
53
53
(2)
53
53
(8 downto 3)
53
53
(15 downto 9)
53
53
predictor_data_present
(0)
54
54
predictor_reset
(1)
54
54
(6 downto 2)
54
54
40
55
59
(0)
60
60
num_windows
(3 downto 0)
61
61
num_window_groups
(7 downto 4)
61
61
window_shape
max_sfb
scale_factor_grouping
predictor_reset_group_number
prediction_used[40]
ltp_data_present
window_group_length[8]
sect_sfb_offset[1][52]
62
63
(10 downto 0)
52
11
64
115
(5 downto 0)
116
116
(10 downto 0)
11
117
117
global_gain
(7 downto 0)
118
118
num_sec[8]
(5 downto 0)
119
122
pulse_data_present
(0)
123
123
tns_data_present
(1)
123
123
gain_control_data_present
(2)
123
123
sr_index
(3)
123
123
(1 downto 0)
124
124
(0)
125
125
32
126
127
52
11
128
179
tns.coef_compress[8][4]
32
180
181
length_of_reordered_spectral_data
14
182
182
num_swb
swb_offset_max
tns.n_filt[8]
tns.coef_res[8]
tns.direction[8][4]
(10 downto 0)
sect_sfb_offset[2][52]
3.9.2
Em cada bloco de udio (raw data block ) temos 1024 amostras de coeficientes espectrais por canal. As Ferramentas Espectrais PNS e TNS so aplicadas a cada canal
individualmente, enquanto o IS e MS, que usam o Joint Stereo para recuperar os dados,
necessitam dos coeficientes de ambos os canais estreo. Portanto, a estrutura da memria de coeficientes espectrais exige o armazenamento total de 2048 amostras de 32 bits.
Alm disso, esta memria deve permitir acesso escrita para o Decodificador de Entropia,
acesso leitura/escrita para as 4 Ferramentas Espectrais e acesso leitura para o Banco
Inverso de Filtros, etapa final do decodificador.
67
3.10
Ferramentas Espectrais
3.10.1
IS - Intensity Stereo
68
scale =
1
2sf /4
(3.23)
69
Incio
Incio
Recupera
Variveis
Simples
Lao Externo 1
Lao Externo 2
Recupera
Variveis Que
mudam com o
valor do ndice
do Lao 1
Lao Externo 3
No
is_intensity
Recupera
Variveis Que
mudam com o
valor do ndice
do Lao 2
Sim
Lao Interno
Aguarda
Operaes dos
Laos
Fim do
Lao 3
Estado dos
Laos
Fim Lao
Interno
Fim do
Lao 2
No
Sim
No
Fim do
Lao 1
Fim Lao 3
Sim
Fim
No
a)
Fim Lao 2
Sim
No
Fim Lao 1
Sim
Fim
b)
70
(3.24)
Para exemplificar o acesso memria ICS efetuado internamente em cada uma das
Ferramentas Espectrais, apresentamos os trecho de cdigo VHDL pelo algoritmo 3.5.
Algoritmo 3.5: Trecho de cdigo VHDL contendo o processo de acesso mamria ICS
acesso_ics: process(clk, g)
variable ICS_DATA_IN_VAR
: std_logic_vector(15 downto 0);
variable sfb_tmp
: std_logic_vector(5 downto 0);
begin
if (enable = 0 or reset = 1) then
var_atualizadas <= 0;
state_mem <= s0;
elsif (clkevent and clk=1) then
case state_mem is
when s0 =>
ics_addr <= M_ICS2 & M_NUM_WINDOW_GROUPS;
state_mem <= s1;
when s1 =>
num_window_groups <= ics_data_in(7 downto 4);
ics_addr <= M_ICS2 & M_MAX_SFB;
state_mem <= s2;
when s2 =>
max_sfb <= ics_data_in(8 downto 3);
ics_addr <= M_ICS1 & M_SWB_OFFSET_MAX;
state_mem <= s3;
when s3 =>
swb_offset_max <= ics_data_in(10 downto 0);
ics_addr <= M_ICS1 & M_MS_MASK_PRESENT;
state_mem <= s4;
when s4 =>
ms_mask_present <= ics_data_in(0);
state_mem <= s5;
when s5 =>
-- Define ADDR da proxima variavel (ICS + ADDR_VAR + POSICAO_MEMORIA)
ics_addr <= M_ICS2 & M_WINDOW_GROUP_LENGTH(10 downto 1) & g(2);
state_mem <= s6;
when s6 =>
ICS_DATA_IN_VAR := ics_data_in;
ICS_DATA_IN_VAR := to_stdlogicvector(to_bitvector(ICS_DATA_IN_VAR) srl to_integer(
unsigned(g(1 downto 0) & "00")));
window_group_length <= ICS_DATA_IN_VAR(3 downto 0);
state_mem <= s7;
when s7 =>
ics_addr <= M_ICS2 & (M_SFB_CB + (g & sfb(5 downto 2)));
state_mem <= s8;
when s8 =>
ICS_DATA_IN_VAR := ics_data_in;
ICS_DATA_IN_VAR := to_stdlogicvector(to_bitvector(ICS_DATA_IN_VAR) srl to_integer(
unsigned(sfb(1 downto 0) & "00")));
sfb_cb <= ICS_DATA_IN_VAR(3 downto 0);
ics_addr <= M_ICS2 & (M_SF + (g & sfb));
state_mem <= s9;
when s9 =>
sf <= ics_data_in(8 downto 0);
ics_addr <= M_ICS2 & (M_SWB_OFFSET + sfb);
sfb_tmp := sfb + 1;
state_mem <= s10;
when s10 =>
swb_offset <= ics_data_in(10 downto 0);
71
Finalmente, para acessar o dado especfico, que tem largura de 4 bits, utilizamos os
dois bits menos significativos de g para definir o valor do Shift Right a ser aplicado no
resgate do dado. Este valor multiplicado por 4 acrescentando 00 ao final. O cdigo
final :
-window_group_length <= to_stdlogicvector(to_bitvector(ics_data_in) srl to_integer(unsigned(
g(1 downto 0) & "00")));
O estado final s_done fica em loop aguardando a outra mquina solicitar atualizao
nos valores das variveis de memria.
A mquina de estados que controla o algoritmo IS apresentada no trecho de cdigo
da Figura 3.23. Neste, podemos observar os estados s1, s2 e s3 que controlam o incio
72
e fim dos trs laos seguidos pelos respectivos estados s1_wait, s2_wait e s3_wait que
aguardam a resposta de atualizao da mquina de estados de acesso memria ICS. O
estado s3 verifica o flag IS_INTENSITY para acionar ou no o mdulo de clculo do IS,
enquanto os estados calcula_is_1 a calcula_is_5 interagem com o mdulo IS_INT e
realizam a sincronizao dos clculos deste mdulo com a entrada e sada de dados para
as memrias dos Coeficientes Espectrais.
Mquina de Estados - IS
enable = '0'
state_mem = done
s_done
s0
state_mem =
s_done_wait
state_mem =
s_done_wait
s0_wait
s1
state_mem =
done
calcula_is_0
calcula_is_1
s1_wait
s2
state_mem =
done
calcula_is_2
state_mem =
s_done_wait
s2_wait
calcula_is_3
s3
calcula_is_4
calcula_is_5
3.10.2
MS - Mid/Side Stereo
73
3.10.3
No caso do Temporal Noise Shaping, sua implementao em VHDL consiste das duas
mquinas de estado, a de acesso memria ICS, com a mesma estrutura da apresentada
para o IS e a de controle do algoritmo. Esta segunda mquina controla os trs mdulos
de clculo: Clculo de LPC, Clculo do Intervalo Start/End e Aplicao do Filtro.
O algoritmo de Clculo dos coeficientes LPC usa os parmetros do TNS armazenados
na estrutura ICS como referncia e executa trs laos sequenciais com tamanho igual
ordem (N) do filtro para gerar os N coeficientes LPC. O primeiro lao cria o vetor de
coeficientes de tamanho N e decodifica os parmetros TNS gerando coeficientes em valores
com sinal. O segundo lao executa uma quantizao inversa nos coeficientes. O terceiro
lao por sua vez possui dois laos sequenciais internos usados para converter os valores
em coeficientes LPC atravs de vrias iteraes. Em VHDL, foi possvel incorporar os
dois primeiros laos ao terceiro executando todo o clculo dos coeficientes LPC em um s
passo, simplificando a complexidade do algoritmo.
O clculo dos ndices Start e End dos intervalos consiste em definir o mnimo entre trs
valores e utilizar este resultado como ndice de um vetor que ser novamente comparado
74
a outro valor para extrair o mnimo entre ambos. Apesar do procedimento ser igual para
Start e End, a restrio de acesso ao vetor max_tns_sfb impediu o clculo de ambos os
valores em paralelo.
Finalmente, a aplicao do Filtro utiliza os coeficientes LPC e uma srie de somas e
multiplicaes executadas em dois laos encadeados para modificar os valores dos Coeficientes Espectrais.
3.10.4
75
A implementao em VHDL consiste em quatro mdulos de clculo (Gerador de Nmeros Aleatrios, Raiz Quadrada, Divisor, Potncia de 2), um mdulo de integrao dos
mdulos de clculo, e um mdulo TOP responsvel por gerenciar o acesso memria
compartilhada ICS e efetuar a integrao do PNS com o restante das ferramentas espectrais.
O gerador de nmeros aleatrios na verdade implementado com um gerador de
nmeros pseudo-aleatrios de 16 bits que utilizam uma semente (seed ) no momento em
que o decodificador ligado. Em hardware, este gerador produz um valor diferente por
ciclo de clock.
O processo de gerao de uma vetor de nmeros aleatrios para serem substitudos
no trecho de udio comea por armazenar os N valores (N = tamanho do trecho a ser
preenchido) e ao mesmo tempo ir acumulando em um registrador o valor de cada nmero
ao quadrado. Este nmero acumulado representa a quantidade de energia do trecho de
udio. Finalmente, a raiz quadrada desta energia calculada e o valor do fator de escala
utilizado para adequar o vetor de nmeros aleatrios quantidade total de energia
requerida no trecho de udio. Por fim, os valores so gravados nas respectivas posies
dos coeficientes espectrais.
3.10.5
Aps implementar e testar cada um dos mdulos, a tarefa final consistiu em integrar
todos eles em um nico mdulo para funcionar junto ao restante do decodificador. Neste
caso, utilizamos uma arquitetura simples com uma mquina de estados controlando a ordem de execuo seqencial de cada ferramenta espectral e os respectivos multiplexadores
que controlam o acesso aos mdulos de memria externos.
A Tabela 3.19 apresenta os resultados da sntese em FPGA com o uso de hardware do
Mdulo.
Tabela 3.19: Utilizao de Hardware da Ferramentas Espectrais
Mdulo
Spectral Tools (TOP)
Intensity Stereo
Mid/Side Stereo
Temporal Noise SHaping
Perceptual Noise Substitution
Total
Elementos
Lgicos
590
1007
270
1099
2584
5550
76
Memria
(bits)
6080
1024
7104
Multiplicadores
Dedicados (9x9-bit)
14
16
40
70
A arquitetura final dos mdulos das Ferramentas Espectrais pode ser visualizada na
Figura 3.24.
Ferramentas Espectrais
IS
Controle
Acesso
ICS
Controle
Clculo IS
MS
Acesso
ICS
Controle
Clculo MS
MUX
ICS
TNS
Acesso
ICS
Controle
Coeficientes
Espectrais
RAM
MUX
Coef
Spec
Clculo
LPC
Clculo
Start/End
Filtro
PNS
Acesso
ICS
Controle
Clculo
LPC
Clculo
Start/End
Filtro
77
ICS
RAM
3.11
Conforme a entrada sequencial dos dados de udio codificados no bitstream, cada canal
decodificado individualmente e a etapa final do Banco de Filtros realizada um canal
por vez. Portanto, para que o decodificador possa tocar o udio sem pausas durante o
processo de decodificao, necessrio que as amostras de udio sejam armazenadas em
um buffer de sada. Neste processo, as 1024 amostras de cada canal so armazenadas
no buffer e assim que todos os canais de um raw data block tenham sido decodificados,
podem ser enviados ao tocador para que sejam reproduzidos.
Em paralelo s amostras que estejam sendo tocadas, uma segunda rea do buffer deve
estar disponvel para que o decodificador possa armazenar as amostras dos canais do
prximo raw data block.
A implementao do Buffer em Hardware considerou a limitao do tocador de sada
da placa que s capaz de reproduzir dois canais simultneos. Neste caso, foram criadas
duas reas de memria capazes de armazenar 2048 amostras de udio de 16 bits.
Apesar desta limitao, o decodificador capaz de processar at 6 canais em tempo
real, porm, neste caso, as amostras dos canais excedentes so descartadas nesta implementao.
A Figura 3.25 apresenta o diagrama de blocos do Buffer das amostras de udio. Nele
esto presentes duas mquinas de estado, uma para controle da entrada de dados vindos
do Banco de Filtros Inverso e outra para controle da sada das amostras para a entrada
do tocador que recebe os dados atravs de uma FIFO. As duas reas de memria so
chaveadas de modo que o papel de ambas alterna a cada ciclo de decodificao.
Buffer para Player de
udio
Filterbank
Recarrega
Buffer
Consome
dados
RAM
Buffer1
[2048] * [16 bits]
RAM
Buffer2
[2048] * [16 bits]
Player de
udio
Sinais de Controle
Fluxo de dados
78
3.12
79
Captulo 4
Resultados
A soluo final est implementada no FPGA Cyclone II (EP2C70F896C6) da Altera
includo no kit de desenvolvimento DE2-70 do fabricante TerAsic. Entre os recursos disponveis na placa alm do FPGA de aproximadamente 70 mil elementos lgicos, estamos
utilizando o mdulo de memria SSRAM de 2MB como memria do processador, um
mdulo de memria Flash de 8MB para armazenar o bitstream a ser decodificado e um
tocador de udio, alm de botes, switches e LEDs para comando e controle.
Esta soluo integra todos os mdulos desde o Decodificador de Entropia at o Tocador
de udio. Na arquitetura temos em software os decodificadores LATM/LOAS, MP4
e o Bitstream Deformater (AAC parser ) sendo executados no processador Nios II e o
restante dos mdulos todos implementados em hardware. Apesar da natureza sequencial
da decodificao, trs etapas podem atuar em paralelo. A primeira a sequncia de parsing
(LATM/LOAS ou MP4 seguido do parser AAC) seguida das ferramentas espectrais. A
segunda etapa paralela o Banco de Filtros Inverso que, aps efetuar a etapa de prprocessamento da IMDCT, libera um dos canais de udio para que o primeiro canal do
prximo raw data block possa ser decodificado e armazenado na memria de Coeficientes
Espectrais. A terceira e ltima etapa paralela a do tocador de udio que possui duas
reas de memria, uma para consumo (tocar) e outra para guardar as amostras do prximo
bloco que est sendo decodificado.
A arquitetura final ilustrada na Figura 4.1 onde podemos observar os mdulos implementados em software representados pelos blocos brancos dentro do processador Nios II,
seguido do barramento Avalon que conecta o processador s memrias SSRAM e FLASH.
Os demais mdulos em hardware so representados pelos blocos em cinza e esto separados em 7 blocos, 6 esto ligados ao processador via barramento e 1 (Ferramentas
espectrais) fica independente e acionado pelo decodificador de entropia e desligado pelo
incio do Banco de Filtros Inverso.
Aps a integrao final, como esperado, ouve significativa reduo no tamanho do
software sendo executado no processador cujo tamanho do binrio caiu de 502 kB para
32 kB. A descrio da utilizao do hardware do FPGA apresentada na Tabela 4.1 onde
podemos ver o uso de 21527 Elementos Lgicos no total, alm de 121 elementos DSP de
9x9 bits e 679040 bits de memria.
80
NIOS II
Stream Buffer
LATM/
LOAS
Decodificador de
Entropia
Scale
Factor
Huffman decoding
MP4
Inverse Quantization
Rescaling
ICS
RAM
Ferramentas Espectrais
(64kb)
Bitstream
Parser
A
V
A
L
O
N
B
U
S
SSRAM
(1kb)
Coeficientes
Espectrais
RAM
M/S
IS
(64kb)
RAM
(4kb)
ROM
TNS
(2kb)
IMDCT
Preprocessing
ROM
Stream de
udio
Codificado
ROM
PNS
(36kb)
FLASH
ROM
Re/Im
RAM
(12kb)
iFFT
(32kb)
Postprocessing
Filter Coef.
ROM (72kb)
Dados
Controle
Overlap buffer
RAM (32kb)
Short Buffer
RAM (2kb)
Buffer e Player
de udio
Windowing
+ Overlap +
Add
Buffer1
RAM (32kb)
Buffer2
RAM (32kb)
Sada de udio
Decodificada
81
4.1
Elementos
Lgicos
2742
510
6393
Memria
(bits)
157184
35520
Multiplicadores
Dedicados (9x9-bit)
4
15
136
131072
1007
270
1099
2584
2956
97
497
3236
6080
1024
265216
65536
16384
1024
14
16
40
32
-
21527
679040
121
Performance
65
130
195
260
325
390
455
520
585
Tempo (s)
Parser
Spectral Tools
650
Soluo por
Software1
Tempo (s)
28,00
146,87
Soluo
Soluo
2
Intermediria
Final3
Tempo (s)
Tempo (s)
28,00
12,44
7,08
4,08
Parser
Decodificao de Entropia
(Huffman + Quantizao
Inversa + Re-escalonamento)
Ferramentas Espectrais4
19,02
19,02
1,26
IS
4,64
4,64
0,14
MS
4,12
4,12
0,21
TNS
10,12
10,12
0,87
PNS
0,16
0,16
0,04
Banco de Filtros
436,31
10,79
1,79
Total
630,19
64,89
19,57
1
Processador Nios II a 100 MHz
2
Processador Nios II a 100 MHz e Hardware a 50 MHz
3
Processador Nios II a 50 MHz e Hardware a 50 MHz
4
A linha de Ferramentas Espectrais representa a soma de IS, MS, TNS e PNS.
Os testes finais de performance foram executados incluindo os arquivos estreo originais
codificados a 256 kpbs juntamente com 5 outros arquivos que possuem 6 canais de udio
e esto codificados a 396 kbps. Em todos os casos temos a taxa de amostragem de 48
kHz. Os resultados podem ser observados na Tabela 4.3
Tabela 4.3: Performance final para udio de 2 e 6 canais
Tempo de Decodificao
Total (udio de 60s)
Mdia por Bloco
Pico por Bloco
4.2
2 canais
(256 kbps)
14,96s
5,19ms
8,56ms
Razo para
Tempo-Real
24,9%
24,9%
41,1%
6 canais
(396 kbps)
31,97s
11,10ms
16,9ms
Razo para
Tempo-Real
53,3%
53,3%
81,1%
Qualidade
Em termos de qualidade do som, a anlise foi realizada a partir do clculo do Signalto-Noise Ratio (SNR) conforme apresentado da seo 3.1. Os testes de qualidade foram
realizados ao longo de todas as etapas de implementao dos mdulos em hardware. Apresentamos nas Figuras 4.3, 4.4 os grficos com a comparao entre a sada final tanto de
um trecho com janela longa quanto de um trecho com janelas curtas. No caso so plotadas
as amostras de sada do decodificador em software versus as amostras do decodificador
em hardware.
83
32768'
Decodicador'em'So8ware'
28672'
Decodicador'em'Hardware'
24576'
Erro'
20480'
16384'
12288'
8192'
4096'
0'
0'
128'
256'
384'
512'
640'
768'
896'
1024'
!4096'
!8192'
!12288'
!16384'
!20480'
!24576'
!28672'
!32768'
Figura 4.3: Grfico ilustrando a comparao da sada de software vs hardware para janela
Only Long Sequence
32768'
Decodicador'em'So8ware'
28672'
Decodicador'em'Hardware'
24576'
Erro'
20480'
16384'
12288'
8192'
4096'
0'
0'
128'
256'
384'
512'
640'
768'
896'
1024'
!4096'
!8192'
!12288'
!16384'
!20480'
!24576'
!28672'
!32768'
Figura 4.4: Grfico ilustrando a comparao da sada de software vs hardware para janela
Eight Short Sequence
Em testes mais exaustivos conduzidos por Daniel Chaves Caf a partir de 153 arquivos
de udio testando a verso do decodificador em software contra o decodificador de refern84
Percentual de Amostras
2,6%
21,6%
75,8%
4.3
Consumo de Energia
Aps obter a arquitetura final do sistema no FPGA, foi realizada uma estimativa
aproximada do consumo de potncia atravs da ferramenta PowerPlay Power Analyser
dentro do ambiente do Quartus II da Altera. Neste caso, foi realizada uma anlise padro,
sem dados de simulao, que estima o consumo total do sistema em que todos os mdulos
so considerados ativos durante todo o tempo. Deste resultado total, foi calculada uma
mdia ponderada de acordo com o tempo em que cada mdulo do sistema fica ativo
durante o processo de decodificao obtendo-se um resultado aproximado do consumo
real da arquitetura para o caso de decodificao de 6 canais de udio. Os resultados de
consumo de potncia so apreentado na Tabela 4.5.
Tabela 4.5: Resultados do consumo de energia
Tipo de Consumo
Potncia Trmina Total
Potncia Trmica Dinmica
Potncia Trmica Esttica
Mdia Ponderada da Potncia Total
Consumo (mW)
457,80
297,18
65,09
271,00
4.4
Comparaes
Conforme visto na reviso de literatura, vrias abordagens so possveis para implementar o decodificador em hardware. Desde as solues puramente em software at as
soluo completas em hardware dedicado.
85
Pela Tabela 4.6 podemos observar em primeiro lugar que alm da soluo proposta,
somente a primeira soluo apresentada que utiliza o processador RISC implementa a
decodificao de 6 canais em tempo real. Todas as demais solues se aplicam somente
a dois canais. Alm disso, nenhuma das solues encontradas implementa o AAC na
verso descrita pelo MPEG-4 onde est presente a ferramenta de processamento espectral
PNS bem como no h meno em nenhum dos casos da decodificao do protocolo
LATM/LOAS ou do MP4 em sua tarefa inicial de parsing.
As solues puramente em hardware se destacam tanto pelo baixo consumo de energia
quanto pela baixa frequncia de clock necessria para decodificar udios de dois canais.
Podemos ainda destacar a dificuldade em comparar os resultados por serem todas as
solues implementadas em plataformas bastante distintas. No caso das solues que utilizam a tcnica de coprojeto, cada uma adota um processador com caractersticas distintas
em termos de capacidade de processamento (destacado em MIPS) e tamanho de memria cache tanto de dados quanto de instruo diferentes. No caso das implementaes
em hardware dedicado, no possvel fazer uma correlao direta entre a quantidade de
elementos lgicos dos FPGAs e das portas lgicas em VLSI. Mesmo entre as solues em
FPGA, cada uma utiliza um fabricante e famlia distintos dificultando a relao direta.
A soluo mais prxima em termos de plataforma a de Renner (27) que, apesar
de no utilizar a abordagem de coprojeto de hardware e software, implementa a soluo
em um mesmo FPGA. Porm, mesmo no possuindo as ferramentas de processamento
espectral ou os decodificadores LATM/LOAS e MP4, utiliza uma rea 23,3% maior e 64%
menos memria.
86
Desempenho
do Processador
Freq. do Processador
Freq. do Hardware
N. de Canais
Tx.
Amost.
udio
Bitrate
Power
LE (FPGA) /
LG (ASIC)
Processador
Tecnologia
Decodificador
Implementado
Arquitetura da
Soluo
Referncia
3,3 MHz
2
44,1 kHz
128 kbps*
158 mW
82,2 k LG
133 MHz
6
48 kHz
432 kbps
300 mW
Processador
de
Propsito
Geral
RISC NEC
V380
158 MIPS
ASIC
(TSMC
0,25m)
87
128 kbps*
2,45 mW
102 k LG
2
44,1 kHz
1,3 MHz
ASIC
(UMC
0,18m)
MPEG-2
AAC-LC
HardwarePuro
Tsai e Liu
(32)
128 kbps*
N/A
26549 LE
(248704
bits de
memria)
2
48 kHz
4 MHz
FPGA
(Cyclone II
Altera)
MPEG-2
AAC-LC
HardwarePuro
Renner
(27)
128 kbps*
N/A
6266 Slices
2
44,1 kHz
22,8 MHz
VLSI /
FPGA
(Xilinx
VertexE)
ARM
(ARM920T)
60 a 200
MIPS
41 MHz
MPEG-2
AAC-LC
Coprojeto
HW/SW
Liu and
Tsai (23)
128 kbps*
N/A
44,3 k LG
+ 16 k
RAM + 4 k
ROM
2
44,1 kHz
10,6 MHz
OpenRisc
1200
250 MIPS
@ 250MHz
10,6 MHz
MPEG-2
AAC-LC /
MP3
VLSI
Coprojeto
HW/SW
Zhou et
al. (37)
118 kbps
N/A
N/A
2
48 kHz
N/A
300 MHz
N/A
PowerPC
MPEG-2
AAC-LC /
MP3
FPGA
(Xilinx
XUP V2P
Coprojeto
HW/SW
432 kbps
270 mW
21527 LE
(679040
Mem.)
6
48 kHz
50 MHz
50 MHz
50 MIPS
Nios II/f
FPGA
(Cyclone II
Altera)
MPEG-2/4
AAC-LC
Coprojeto
HW/SW
Soluo
Proposta
Captulo 5
Concluses e Trabalhos Futuros
O texto apresentado procura oferecer ao leitor uma viso resumida sobre os processos
envolvidos na codificao de udio e mais especfica sobre o padro AAC. Apresenta-se
tambm a abordagem de coprojeto juntamente com a tecnologia dos FPGAs, escolhida
para implementar a soluo. Em seguida, o processo de implementao descrito apresentando como foi realizada a escolha dos mdulos a serem desenvolvidos em hardware
bem como os detalhes da implementao dos mesmos.
Os diversos livros, artigos e normas estudados foram de fundamental importncia na
compreenso terica sobre a codificao de udio. As normas que especificam o padro
MPEG-4 AAC so esclarecedoras no que se refere ao algoritmo, porm, o mesmo s
detalhado em linguagem de alto nvel e portanto foi necessrio os estudo de artigos que
exploram arquiteturas de hardware especficas para cada tipo de operao computacional.
A implementao de uma soluo de tamanha complexidade s foi possvel atravs
do trabalho modular onde cada etapa do decodificador foi isolada, implementada e testada de maneira separada at que estivesse funcionando de maneira adequada. A escolha
do processador Nios II como plataforma de desenvolvimento ainda nos estgios iniciais
do trabalho foi de grande valia por facilitar a implementao de test benches que integram a soluo de referncia completa em software com os mdulos sendo desenvolvidos
individualmente em hardware. Apesar da modularizao facilitar o desenvolvimento de
cada etapa, as necessidades de otimizao de tempo e espao na utilizao dos recursos de
hardware tornam a etapa de integrao um desafio para que os mdulos possam funcionar
em sincronia e compartilhando recursos.
Existem ainda desafios especficos relacionados s ferramentas de software utilizadas
para a implementao. Como ambiente de simulao, foi utilizado o QuestaSim 6.6, para
sntese em FPGA foi utilizado o Quartus II v11 e para a programao do processador Nios
II foram utilizados o ambiente de desenvolvimento de sistemas SOPC Builder juntamente
com o ambiente de desenvolvimento de software Nios II IDE. Apesar da grande quantidade de recursos e sofisticao destas ferramentas, a quantidade de erros de compilao
e documentao falha sobre os mesmos torna a curva de aprendizado deste ambiente um
desafio em si.
Como resultado, temos uma soluo de coprojeto de hardware e software que implementa um decodificador MPEG-4 AAC-LC. Os sistema funciona na placa DE2-70 que
contm um FPGA Cyclone II do fabricante Altera e capaz de reproduzir em tempo real
udio estreo de at 256 kbps em tempo real funcionando a 18,3 MHz. udios de at 6
88
canais tambm podem ser decodificados a uma frequncia de 50 MHz, porm no podem
ser reproduzidos devido limitao do reprodutor de udio da placa que s capaz de
reproduzir 2 canais ao mesmo tempo.
A soluo implementa as etapas de parsing tanto dos protocolos LATM/LOAS quanto
do envelope MP4 e do AAC-LC em software. Os demais mdulos de processamento, especificamente, o Decodificador de Entropia com a Quantizao Inversa e Reescalonador, o
Stream Buffer, as ferramentas de processamento espectral Intensity Stereo, Mid/Side Stereo, Temporal Noise Shaping e Perceptual Noise Substitution, o Banco de Filtros Inverso
e o tocador de udio com seu buffer de memria so todos implementados em hardware.
Quando comparada s solues encontradas na literatura, a proposta aqui apresentada
se destaca por implementar o padro MPEG-4 e atender aos requisitos de decodificao
em tempo real para at 6 canais.
As diversas abordagens de implementao de uma soluo de udio encontradas na
literatura demonstram que esta uma soluo complexa onde no h uma nica ou
a melhor abordagem. Para sistemas com poucas restries no consumo de energia, as
solues em software puro tendem a ser mais adequadas pois podem ser rapidamente
implementadas e expandidas para novos padres. Alm disso, processadores de propsito
geral de baixo consumo de energia esto tornando cada vez mais viveis sua escolha quando
h requisitos moderados de processamento em tempo real. Por outro lado, as exigncias
de algoritmos cada vez mais complexos em dispositivos mveis com mltiplas funes
tornam a pequisa na rea de circuitos dedicados em hardware cada vez mais necessria.
Apesar da grande vantagem em termos de consumo de energia, solues puramente
em hardware so muito caras e levam muito tempo para serem desenvolvidas, o que as
torna menos viveis para aplicaes em menor escala ou que necessitem ir para o mercado
em um curto espao de tempo. Ferramentas de Sntese de Alto Nvel que traduzem
algoritmos sequenciais em software para hardware de maneira automtica como as que
experimentamos no caso da FFT exigem conhecimento especializado e, apesar de gerarem
bons resultados, ainda no apresentam o mesmo nvel de otimizao de uma soluo
manual.
A abordagem de coprojeto utilizada neste trabalho apresenta grande potencial pelo
fato de se pode dosar o percentual entre hardware dedicado e soluo por software at
que os requisitos de desempenho desejados sejam alcanados. Esta abordagem tem ganhado fora com os recentes lanamentos de fabricantes de FPGA onde processadores de
propsito geral em silcio com razovel poder de processamento e circuitos reconfigurveis
(FPGA) j esto sendo comercializados em SoCs (System-on-a-Chip).
Ressaltamos ainda que este trabalho gerou dois artigos de autoria conjunta com meu
orientador, Ricardo Jacobi e co-orientador Pedro de Azevedo Berger. O primeiro artigo,
entitulado "Hardware and software co-design for the AAC audio decoder ", foi apresentado no 25th Symposium on Integrated Circuits and Systems Design (SBCCI 2012) e o
segundo artigo, entitulado "High-level design and synthesis of a MPEG-4 AAC IMDCT
module"apreentado no 2013 IEEE Fourth Latin American Symposium on Circuits and
Systems (LASCAS) estando ambos disponveis para consulta na biblioteca digital do IEEExplore (http://ieeexplore.ieee.org).
Diversas melhorias e incrementos a esta soluo so possveis e como trabalhos futuros
sugerimos:
89
90
Referncias
[1] Televiso digital terrestre: Codificao de vdeo, udio e multiplexao - Parte 2:
Codificao de udio, 2008. ix, 2, 12, 13, 19, 28, 32, 45
[2] Altera Corporation, San Jose, CA. Avalon Bus Specification Reference Manual, Julho
2003. 28, 38
[3] Altera Corporation, San Jose, CA. Cyclone II Device Handbook, 2008. 28
[4] Altera Corporation, San Jose, CA. Nios II Processor Reference Handbook, Maio 2011.
28, 38
[5] Altera Corporation, San Jose, CA. Quartus II Handbook Version 11.0, Maio 2011.
28
[6] Altera Corporation, San Jose, CA. The Breakthrough Advantage for FPGAs with
Tri-Gate Technology, 2013. 28
[7] C. Bauer and M. Vinton. Joint optimization of scale factors and huffman code books
for mpeg-4 aac. Signal Processing, IEEE Transactions on, 54(1):177189, 2006. 29
[8] C.-H. Chen, B.-D. Liu, and J.-F. Yang. Recursive architectures for realizing modified
discrete cosine transform and its inverse. Circuits and Systems II: Analog and Digital
Signal Processing, IEEE Transactions on, 50(1):3845, 2003. 29, 46
[9] R. L. DRAKE, A. W. VOGL, and A. MITCHELL. Grays Anatomia para Estudantes.
Elsevier Editora, 2a edio edition, 2010. vii, 6
[10] F. Du, G. Du, Y. Song, D. Zhang, and M. Gao. An implementation of filterbank for
mpeg-2 aac on fpga. In Anti-counterfeiting, Security and Identification, 2008. ASID
2008. 2nd International Conference on, pages 391394, 2008. 29, 46
[11] P. Duhamel, Y. Mahieux, and J.-P. Petit. A fast algorithm for the implementation
of filter banks based on time domain aliasing cancellation. In Acoustics, Speech,
and Signal Processing, 1991. ICASSP-91., 1991 International Conference on, pages
22092212 vol.3, 1991. 46
[12] M. Fingeroff. High Level Synthesis Blue Book. Mentor Graphics Corporation, 2010.
50
[13] R. Gluth. Regular fft-related transform kernels for dct/dst-based polyphase filter
banks. In Acoustics, Speech, and Signal Processing, 1991. ICASSP-91., 1991 International Conference on, pages 22052208 vol.3, 1991. 46
91
[28] P. sheng Wu and Y.-T. Hwan. Efficient imdct core designs for audio signal processing.
In Signal Processing Systems, 2003. SIPS 2003. IEEE Workshop on, pages 275280,
2003. 29
[29] A. Spanias, T. Painter, and V. Atti. Audio Signal Processing and Coding. John
Wiley & Sons, Inc., Hoboken, New Jersey, 2007. vii, 7, 8, 10, 11, 20, 21, 22, 28
[30] Y. Takamizawa, K. Nadehara, M. Boegli, M. Ikekawa, and I. Kuroda. Mpeg-2 aac
5.1-channel decoder software for a low-power embedded risc microprocessor. In Signal
Processing Systems, 1999. SiPS 99. 1999 IEEE Workshop on, pages 351360, 1999.
29, 31, 87
[31] Z. Tao, G. Buning, Q. Haojun, and Y. Fengping. Mp3 / aac audio decoder implementation based on hardware and software co-design. In Image and Signal Processing
(CISP), 2010 3rd International Congress on, volume 8, pages 36953698, 2010. 30,
31, 87
[32] T.-H. Tsai and C.-N. Liu. Low-power system design for mpeg-2/4 aac audio decoder
using pure asic approach. Circuits and Systems I: Regular Papers, IEEE Transactions
on, 56(1):144155, 2009. 30, 31, 87
[33] T.-H. Tsai, C.-N. Liu, H.-Y. Lin, H.-C. Liu, and C.-Y. Wu. A 1.4 mhz 0.21 mw
mpeg-2/4 aac single chip decoder. In Custom Integrated Circuits Conference, 2009.
CICC 09. IEEE, pages 653656, 2009. 40
[34] T.-H. Tsai, C.-N. Liu, and Y.-W. Wang. A pure-asic design approach for mpeg-2
aac audio decoder. In Information, Communications and Signal Processing, 2003
and Fourth Pacific Rim Conference on Multimedia. Proceedings of the 2003 Joint
Conference of the Fourth International Conference on, volume 3, pages 16331636
vol.3, 2003. 29, 31, 87
[35] T.-H. Tsai, H.-C. Liu, W.-C. Chang, and C.-N. Liu. A platform-based soc design for
a multi-standard audio decoder. In Communications, Circuits and Systems, 2008.
ICCCAS 2008. International Conference on, pages 758761, 2008. 30
[36] Xilinx, Inc., San Jose, CA. Virtex-7 FPGAs, 2012. 28
[37] D. Zhou, P. Liu, J. Kong, Y. Zhang, B. He, and N. Deng. An soc based hw/sw
co-design architecture for multi-standard audio decoding. In Solid-State Circuits
Conference, 2007. ASSCC 07. IEEE Asian, pages 200203, 2007. 30, 31, 87
[38] U. Zlzer. Digital Audio Signal Processing. John Wiley & Sons, Inc., Hoboken, New
Jersey, 2nd edition edition, 2008. vii, 24, 28
93