You are on page 1of 110

Universidade do Minho

Escola de Engenharia

Artur Diogo Rodrigues Anjo

Processador de efeitos digital

Artur Diogo Rodrigues Anjo Processador de efeitos digital


UMinho | 2013

outubro de 2013
Universidade do Minho
Escola de Engenharia

Artur Diogo Rodrigues Anjo

Processador de efeitos digital

Tese de Mestrado
Ciclo de Estudos Integrados Conducentes ao Grau de
Mestre em Engenharia Eletrónica Industrial e Computadores

Trabalho efetuado sob a orientação do


Professor Doutor João Monteiro

outubro de 2013
Agradecimentos
Em primeiro lugar gostaria de agradecer à minha família, mais concretamente
aos meus pais, pela a oportunidade que me deram de poder tirar o curso que pretendia.
Agradeço todo o apoio e esforço que realizaram por mim, pois sem isso nada teria sido
possível.

Agradeço também à Universidade do Minho por todas as condições oferecidas


durante todo o curso e mais concretamente durante a realização desta dissertação. Como
não poderia de deixar de ser, agradeço igualmente ao departamento de sistemas
embebidos da Universidade do Minho, pois fui muito bem recebido e apoiado tanto
pelos professores e colegas. Uma palavra de apreço ao meu orientador, Professor
Doutor João Monteiro, por todo apoiado prestado ao longo da realização desta
dissertação.

Uma palavra de agradecimento a todos os colegas que me apoiaram e ajudaram,


especialmente ao aluno de doutoramento do departamento de sistemas embebidos,
Paulo Garcia, pois a sua ajuda e apoio durante a realização desta dissertação foram
muito importantes. Uma palavra de agradecimento também aos colegas Filipe Serra
Alves e Rodrigo Azevedo.

iii
iv
Resumo

O mercado da música é muito abrangente e possui bastantes produtos para


alterar e adicionar efeitos aos instrumentos musicais. Relativamente à guitarra elétrica,
produtos como os processadores de efeitos, single e multi-effect, são bastante
procurados, tanto por amadores como por profissionais.

É neste sentido que se enquadra esta dissertação, em implementar um


processador de efeitos em FPGA para guitarra elétrica.

Esta abordagem, com a utilização de um FPGA, permite ser uma alternativa aos
produtos semelhantes já existentes no mercado, mas que por norma são implementados
através de microprocessadores. O objetivo consiste em implementar um processador de
efeitos com qualidade suficiente para ser uma opção viável. O sistema será composto
pelo sistema de aquisição, processamento e reprodução do sinal.

O sistema de aquisição adquire o sinal através de um conversor analógico para


digital (ADC) e o sistema de reprodução é responsável pela conversão digital para
analógico (DAC) para depois ser possível reproduzir o sinal. Por fim, todo o sistema é
processado e controlado por um FPGA.

Os resultados apresentados demonstram que a abordagem proposta é viável. No


entanto, seria necessário melhorar o sistema para ocupar menor quantidade de recursos
de maneira a ser possível utilizar um FPGA de custo inferior.

v
vi
Abstract
The music business is very wide and has plenty of products to change and add
effects to the musical instruments. Relatively to the electric guitar, products such as
effects processors, single and multi-effect, are quite popular among the music fans, both
by amateurs and professionals.

This is the scope of this dissertation, to implement an effects processor in FPGA


for electric guitar.

This approach, using a FPGA, is a good alternative to current products available


in the music market, which are based on microprocessors. The objective is to implement
an effects processor with enough quality to be considered a viable option. The system
will be composed by the acquisition, processing and signal output systems.

The acquisition system acquires the signal through an analog to digital converter
(ADC) and the output system is responsible for the digital to analog (DAC) conversion,
so then can be possible to reproduce the processed signal. Finally, the whole system is
controlled and processed by a FPGA.

The obtained results demonstrate that the proposed approach is viable. However,
it would be necessary to improve the system to occupy the least amount of resources, in
order to be possible to use a lower cost FPGA.

vii
viii
Índice
AGRADECIMENTOS ................................................................................................... III
RESUMO .........................................................................................................................V
ABSTRACT .................................................................................................................. VII
INTRODUÇÃO ................................................................................................................ 1
1.1. ENQUADRAMENTO .......................................................................................... 4
1.2. MOTIVAÇÃO ....................................................................................................... 5
1.3. OBJETIVOS .......................................................................................................... 6
1.4. ESTRUTURA DA DISSERTAÇÃO .................................................................... 7
ESTADO DE ARTE......................................................................................................... 9
2.1. PROPRIEDADES DOS SINAIS DE ÁUDIO ...................................................... 9
2.2. ARQUITETURA DE UNIDADES DE PROCESSAMENTO DIGITAL PARA
SINAIS DE ÁUDIO ....................................................................................................... 12
2.2. PROCESSADORES DE SINAL DIGITAL ....................................................... 14
2.3. EFEITOS ............................................................................................................. 18
2.3.1. DELAY/ECHO ................................................................................................ 18
2.3.2. VIBRATO ........................................................................................................ 19
2.3.3. CHORUS ......................................................................................................... 20
2.3.4. FLANGER ....................................................................................................... 20
2.3.5. DISTORÇÃO................................................................................................... 21
CAPÍTULO 3 ................................................................................................................. 25
ANÁLISE DO SISTEMA .............................................................................................. 25
3.1. FUNCIONAMENTO DO SISTEMA ................................................................. 25
3.2. CARACTERÍSTICAS DA GUITARRA ELÉTRICA ........................................ 27
3.3. INTERFACE ANALÓGICO .............................................................................. 30
3.3.1. SISTEMA DE AQUISIÇÃO ........................................................................... 31
3.3.2. SISTEMA DE CONVERSÃO E REPRODUÇÃO DO SINAL ..................... 33
3.3.3. SISTEMA DE PROCESSAMENTO E CONTROLO .................................... 35
CAPITULO 4 ................................................................................................................. 37
DESENVOLVIMENTO DO SISTEMA ........................................................................ 37
4.1. HARDWARE ...................................................................................................... 37
4.1.1. ADC ................................................................................................................. 37
4.1.2. DAC ................................................................................................................. 42
4.1.3. ASPETO FINAL DO HARDWARE DO SISTEMA ...................................... 45

ix
4.2. IMPLEMENTAÇÃO EM FPGA ........................................................................ 46
4.2.1. MÓDULO ADC .............................................................................................. 46
4.2.2. MÓDULO DAC .............................................................................................. 51
4.2.3. IMPLEMENTAÇÃO DOS EFEITOS ............................................................. 55
DELAY........................................................................................................................... 56
ECHO ............................................................................................................................. 61
DISTORÇÃO ................................................................................................................. 64
VIBRATO ...................................................................................................................... 66
4.2.4. MÓDULO UART ............................................................................................ 68
4.2.5. ESCOLHA DOS EFEITOS ............................................................................. 70
4.3. IMPLEMENTAÇÃO DO SOFTWARE ............................................................. 75
CAPÍTULO 5 ................................................................................................................. 77
RESULTADOS .............................................................................................................. 77
5.1. RESULTADOS DO HARDWARE .................................................................... 77
5.2. RESULTADOS SIMULADOS ........................................................................... 79
5.3. RESULTADOS EXPERIMENTAIS .................................................................. 81
5.4. RESULTADOS DOS CUSTOS DO PROJETO ................................................. 84
CAPÍTULO 6 ................................................................................................................. 91
CONCLUSÃO E TRABALHO FUTURO .................................................................... 91
BIBLIOGRAFIA ............................................................................................................ 93

x
Índice de Figuras
Figura 1 - Exemplo de pedal analógico de distorção........................................................ 2
Figura 2 - Exemplo de pedal analógico de Chorus ........................................................... 2
Figura 3 - Exemplo de pedal analógico de Flanger .......................................................... 3
Figura 4 - Exemplo de pedaleira multi-effect (ME-25).................................................... 3
Figura 5 - Exemplo de pedaleira multi-effect (ME-70).................................................... 4
Figura 6- Domínio do tempo e frequência........................................................................ 9
Figura 7- Frequências audíveis ....................................................................................... 10
Figura 8 - Frequências típicas de notas musicais ........................................................... 11
Figura 9 - Arquitetura de aplicações de áudio ................................................................ 12
Figura 10 - Representação dos sinais ............................................................................. 13
Figura 11- Exemplo de um chip DSP ............................................................................. 15
Figura 12 - Exemplo de placa de desenvolvimento FPGA ............................................ 17
Figura 13 - Exemplo de algoritmo do efeito delay ......................................................... 18
Figura 14 - Exemplo de algoritmo do efeito Chorus ...................................................... 20
Figura 15 - Exemplo de algoritmo do efeito Flanger ..................................................... 20
Figura 16 - Clipping usado para o efeito distorção ........................................................ 21
Figura 17 - Exemplo de circuito lógico do efeito delay ................................................. 22
Figura 18 - Exemplo de circuito lógico do efeito vibrato............................................... 23
Figura 19 - Exemplo de circuito lógico do efeito Chorus .............................................. 23
Figura 20 - Exemplo de circuito lógico do efeito Flanger .............................................. 24
Figura 21 - Diagrama geral do sistema ........................................................................... 26
Figura 22 - Forma de onda da nota Mi da guitarra ......................................................... 27
Figura 23 - Forma de onda da nota Lá da guitarra ......................................................... 28
Figura 24 - Forma de onda da nota Ré da guitarra ......................................................... 28
Figura 25 - Forma de onda da nota Sol da guitarra ........................................................ 29
Figura 26 - ADC CS5340 ............................................................................................... 31
Figura 27 - Diagrama dos componentes internos do ADC ............................................. 32
Figura 28- DAC CS4335 ................................................................................................ 33
Figura 29 - Diagrama dos componentes internos do DAC ............................................. 33
Figura 30 - Xilinx UPV5LX110T .................................................................................. 35
Figura 31 - Esquemático do ADC CS5340 .................................................................... 39
Figura 32 - Resultado do layout da PCB do ADC .......................................................... 40
Figura 33 - Resultado da primeira versão da PCB do ADC ........................................... 41
Figura 34 - Resultado da versão final da PCB do ADC ................................................. 41
Figura 35 - Esquemático do DAC CS4335 .................................................................... 43
Figura 36 - Resultado do layout da PCB do DAC .......................................................... 43
Figura 37 - Resultado da primeira versão da PCB do DAC ........................................... 44
Figura 38 - Resultado final da PCB do DAC ................................................................. 44
Figura 39 - Resultado final do sistema ........................................................................... 45
Figura 40 - Configurações do protocolo I2S .................................................................. 47
Figura 41 - Configuração I2S com controlador .............................................................. 47
Figura 42 - Diagrama temporal do protocolo I2S........................................................... 48
Figura 43 - Configuração da PLL para o sinal MCLK do ADC .................................... 49
Figura 44 - Instanciação do sinal MCLK do ADC ......................................................... 50
Figura 45 - Implementação do envio dos dados do ADC............................................... 51
Figura 46 - Diagrama temporal do protocolo Left-Justified........................................... 52

xi
Figura 47 - Geração do sinal MCLK do DAC................................................................ 53
Figura 48 - Geração do sinal LRCK do DAC ................................................................ 53
Figura 49 - Geração do sinal SCLK do DAC ................................................................. 54
Figura 50 - Implementação do envio dos dados do DAC............................................... 55
Figura 51 - Algoritmo do efeito delay ............................................................................ 56
Figura 52 - Block memory generator da Xilinx ............................................................. 56
Figura 53 - Definição de parâmetros do block memory generator ................................. 57
Figura 54 - Instanciação da single port Ram do efeito delay ......................................... 57
Figura 55 - Exemplificação do tratamento dos dados para o efeito delay ...................... 58
Figura 56 - Implementação do contador para o efeito delay .......................................... 59
Figura 57 - Implementação do contador de uma segunda abordagem para o efeito delay
........................................................................................................................................ 60
Figura 58 – True dual port Ram para o efeito Echo ....................................................... 61
Figura 59 - Definição dos parâmetros do block memory generator para o efeito Echo . 62
Figura 60 - Instanciação da dual port Ram para o efeito Echo....................................... 62
Figura 61 - Implementação do contador de 64k para o efeito Echo ..... Error! Bookmark
not defined.
Figura 62 - Implementação do contador de 128k para o efeito Echo ............................. 63
Figura 63 - Processo clipping ......................................................................................... 64
Figura 64 - Fluxograma do efeito Distorção .................................................................. 65
Figura 65 - Implementação do efeito Distorção com base em hard-clipping ................. 65
Figura 66 - Implementação do efeito Distorção com base em soft-clipping .................. 66
Figura 67 - Algoritmo do efeito vibrato ......................................................................... 66
Figura 68 - Instanciação da dual port Ram para o efeito vibrato ................................... 67
Figura 69 - Implementação do contador para o efeito vibrato ....................................... 67
Figura 70 - Formato dos dados do protocolo UART ...................................................... 68
Figura 71 - Geração do sinal BaudTick .......................................................................... 69
Figura 72 - Diagrama lógico da escolha dos efeitos ....................................................... 70
Figura 73 - Ativação/desativação do efeito vibrato ........................................................ 71
Figura 74 - Máquina de estados utilizada na escolha dos efeitos ................................... 72
Figura 75 - Estado IDLE ................................................................................................ 73
Figura 76 - Estados Enable_effects e Disable_effects.................................................... 73
Figura 77 - Estado 'sel_param'........................................................................................ 74
Figura 78 - Aspeto da aplicação 'Audio Effects Processor' ............................................ 75
Figura 79 - Fluxograma da aplicação ............................................................................. 76
Figura 80 - Resultado de teste efetuado ao ADC – 200mV ........................................... 78
Figura 81 - Resultado de teste efetuado ao ADC - 300mV ............................................ 78
Figura 82 - Resultado de teste efetuado ao DAC ........................................................... 79
Figura 83 - Resultado em simulação do comportamento do ADC ................................. 80
Figura 84 - Resultado em simulação do comportamento do DAC ................................. 80
Figura 85 - Resultado em simulação do comportamento do efeito delay ...................... 81
Figura 86 - Resultado do efeito delay - 1ª abordagem ................................................... 82
Figura 87 - Resultado do efeito delay - 2ª abordagem ................................................... 82
Figura 88- Resultado do efeito Echo .............................................................................. 83
Figura 89 - Resultado do efeito Distorção (hard-clipping)............................................. 83
Figura 90 - Recursos utilizados no FPGA ...................................................................... 85
Figura 91 - FPGA Nexys 7 ............................................................................................. 86
Figura 92 - Virtex-5 ........................................................................................................ 86
Figura 93 - KORG Pandora ............................................................................................ 88
Figura 94 - BOSS ME-25 ............................................................................................... 89

xii
Índice de Tabelas
Tabela 1 - Características do CS5340............................................................................. 31
Tabela 2 - Características do CS4335............................................................................. 34
Tabela 3 - Modos de operação do ADC ......................................................................... 38

xiii
xiv
Capítulo 1

Introdução

Efeitos sonoros são sons criados e utilizados em vários meios de comunicação mais
concretamente no mundo da música. Estes efeitos são editados de maneira a alterar o
som original proveniente de instrumentos musicais ou até mesmo de vozes. Estas
alterações podem ser adições de sons, com repetições, sons com distorção, entre outros.
A maioria dos efeitos começaram a surgir em equipamentos analógicos nos anos
1950 a 1970 [1]. Nessa época, foram inventadas unidades de efeitos, normalmente
ativados por “pedais”. Estas unidades de efeitos são equipamentos que alteram o som
proveniente de um instrumento musical de maneiras diferentes e utilizados em vários
estilos de música. Estas unidades podem apenas alterar um pouco o sinal original como
altera-lo completamente. Normalmente, este tipo de unidades são utilizados em
instrumentos eletrônicos como guitarra, baixo, teclado.
Mais tarde, despontaram equipamentos que utilizavam sinais digitais para
reproduzir os efeitos de guitarra, que até então, eram unicamente reproduzidos por
eletrónica analógica, denominados por processadores de efeitos. Este tipo de
equipamento consiste num dispositivo digital que permite alterar o sinal de uma guitarra
elétrica e adicionar efeitos. É normalmente utilizado como um pré amplificador que
envia o sinal processado para ser reproduzido através de um dispositivo de saída de
áudio, normalmente um amplificador. No entanto, também será necessário considerar os
amplificadores de guitarra como uma unidade de efeitos, pois este, também muda de
forma explícita o sinal proveniente do instrumento, ou seja, não se limita a reproduzi-lo.
Os amplificadores também podem criar efeitos como distorção, echo, reverb, overdrive,
entre outros mas, na maioria das vezes, é necessário ativar o efeito pretendido
manualmente o que fará com que o guitarrista perca tempo e não consiga combinar
vários efeitos na mesma música de forma encadeada.
Numa atuação ao vivo, um guitarrista necessita em determinadas alturas de mudar
de efeito rapidamente no decorrer de uma música. Apesar de alguns amplificadores
fornecerem um pedal remoto, um processador de efeitos permite alterar
instantaneamente entre vários efeitos. Esta ativação pode ser realizada através de um ou

1
vários pedais. Pedal single-effect ou pedaleira multi-effect para guitarra são conceitos
conhecidos pela maioria dos músicos. Um pedal single-effect que na maioria dos casos é
um pedal analógico tem, normalmente, como função produzir um único efeito. Podemos
observar exemplos de pedais single-effect analógicos nas figuras 1,2 e 3 [2] [3] [4].

Figura 1 - Exemplo de pedal analógico de distorção

Figura 2 - Exemplo de pedal analógico de Chorus

2
Figura 3 - Exemplo de pedal analógico de Flanger

Ao calcar no pedal será ativado, por exemplo, o efeito distorção. Se calcar mais
uma vez irá desativar o efeito distorção e passará a ter o som amplificado “limpo” sem
efeitos. Este tipo de pedal é limitado pois, consoante o efeito que o amplificador tiver
definido, só será possível alterar entre dois efeitos.
Por outro lado, uma pedaleira multi-effect ou designada também por processador de
efeitos digital, pode produzir desde dezenas a centenas de efeitos. Nas figuras 4 e 5 [5]
[6], é possível visualizar exemplos de pedaleiras multi-effect ou processadores de efeitos
digitais.

Figura 4 - Exemplo de pedaleira multi-effect (ME-25)

3
Figura 5 - Exemplo de pedaleira multi-effect (ME-70)

O processador de efeitos também detém um funcionamento On/Off, mas, no entanto,


possui vários pedais que o guitarrista pode usar para escolher o efeito que pretende de
forma rápida, simultânea e quantas vezes pretender. Um processador de efeitos digital
poderá também ser programável o que permite a um guitarrista guardar os efeitos que
pretende e utilizar mais tarde na sequência que desejar se assim o pretender.

1.1. Enquadramento
Esta dissertação enquadra-se na área da música mais concretamente nos
equipamentos que adicionam efeitos aos instrumentos musicais, como a guitarra
elétrica.
Relativamente á guitarra elétrica, quando se aborda o tópico processadores de
efeitos analógicos, estes são associados a pedais single-effect, enquanto quando os
processadores de efeitos digitais são referenciados, estes também são associados a
pedais single-effect mas no entanto são mais utilizados como pedais ou pedaleiras multi-
effects. Pois, a grande vantagem dos processadores de efeitos digitais consiste na
capacidade de utilizar vários efeitos num só equipamento, bem como a possibilidade de
o utilizador personalizar, configurar ou até guardar os efeitos que pretender da maneira
ou sequência que desejar.
No que diz respeito à implementação deste tipo de processadores de efeitos digitais
existem pelo menos duas abordagens diferentes. Implementação através da utilização de

4
microprocessadores ou DSP (Digital Signal Processor) [1] ou então através de FPGA
(Field Programmable Gate Array) [7]. Estas abordagens proporcionam vários
benefícios, devido ao fato de estas possuírem bom desempenho e boa resposta em
tempo real. Mas, a abordagem com recurso ao uso de FPGA [8] [9], proporciona
algumas vantagens relativamente ao uso de microprocessadores ou DSPs,
principalmente no que diz respeito à flexibilidade e custo reduzido. No entanto, será
efetuado um estudo mais detalhado relativamente aos diferentes tipos de implementação
de processadores de efeitos.
É neste sentido que se enquadra esta dissertação, na implementação de uma unidade
de efeitos, na área de sistema embebidos e processamento digital de sinal, denominado
processador de efeitos digital. A sua implementação será por hardware digital em
FPGA.
Esta abordagem poderá permitir ao utilizador, guitarrista amador ou profissional,
melhorar e personalizar ainda mais a sua criatividade musical.

1.2. Motivação
A música sempre foi considerada para grande parte das pessoas como uma área de
grande interesse e que atualmente está ligada a diversas atividades. É uma área bastante
atrativa e abrangente com cada vez mais seguidores, dentro da enorme variante de
estilos que existe atualmente devido à sua expansão. Devido à evolução da tecnologia
foi possível melhorar a qualidade de som como a personalização dos instrumentos
musicais. Neste sentido, foram surgindo produtos de personalização musical como os
processadores de efeitos ou pedaleiras multi-effect, os quais permitem alterar
substancialmente o som de instrumentos, adicionando cumulativamente efeitos como
reverb, distorção, etc. Estes produtos são bastante procurados por profissionais musicais
bem como por amadores, pois este tipo de produto tem um grande valor de mercado e
podem ser implementados tanto por software como por hardware. Por sua vez, os
produtos como os processadores de efeitos implementados por hardware digital com
recurso ao uso de FPGA (Field Programmable Gate Array) são bastantes mais
aliciantes e atrativos. Atualmente, dispositivos programáveis do tipo FPGA, tal como
DSPs, são considerados excelentes no que se refere à performance, pois possuem uma
resposta em tempo real bastante boa. No entanto, este tipo de solução oferece bastantes

5
vantagens como por exemplo, menor tempo de colocação do produto no mercado, baixo
custo, manutenção a longo prazo, entre outras. [8] [9] [10] O uso de FPGA em produtos
como processadores de efeitos é bastante vantajosa também pela possibilidade de tornar
este num produto personalizável e reconfigurável, transformando-o assim num produto
mais cativante.

1.3. Objetivos

O objetivo principal desta dissertação consiste no desenvolvimento de uma


plataforma de processamento de efeitos para guitarra elétrica implementada por
hardware digital utilizando um FPGA. Numa primeira fase será necessário realizar o
estudo do que já existe relativamente a processadores de efeitos que é o foco desta
dissertação. Será importante realizar toda a pesquisa necessária a nível de processadores
de efeitos tanto no domínio digital como analógico. Depois será essencial estudar as
técnicas de processamento digital de sinal existentes e decidir quais as melhores
abordagens para posteriormente implementar os efeitos pretendidos em hardware
digital em FPGA.
Após esta primeira análise do sistema, será realizada a especificação de cada
componente de hardware a utilizar bem como o interface de comunicação com o
mesmo, neste caso será necessário especificar o hardware a utilizar no interface
analógico entre guitarra e amplificador. Especificar como o hardware fará a aquisição
dos dados e como os dados serão posteriormente processados. Posteriormente, é
essencial dividir o projeto em subsistemas, em que neste caso pode-se definir a
implementação de cada efeito como um subsistema, e explicar o funcionamento de cada
um de maneira a facilitar a sua implementação.
Depois de efetuada toda a análise e especificação do sistema será então realizada
a fase da implementação. Após a especificação de cada subsistema, será realizada a
implementação de cada uma deles, ou seja, a implementação em hardware digital de
cada um dos efeitos já definidos anteriormente, Após, realizar-se-á a integração dos
subsistemas e adicionalmente o desenvolvimento do hardware de controlo dos vários
efeitos e a sobreposição destes.

Posteriormente serão também efetuados todos os casos de teste necessários de


maneira a comprovar o funcionamento do projeto em relação ao que é pretendido.

6
1.4. Estrutura da dissertação

O primeiro capítulo é composto pela introdução à música e aos equipamentos de


criação de efeitos para guitarra elétrica, tanto no domínio analógico como digital,
normalmente associados a pedais single-effect e pedais-multi-effect respetivamente.
Também é mencionada a motivação para esta dissertação bem como o seu
enquadramento. São referidos igualmente os objetivos desta dissertação.
O segundo capítulo é composto pelo estado de arte. Neste capítulo é efetuado o
estudo sobre as propriedades dos sinais de áudio, tal como o estudo de diferentes tipos
de implementações de processadores de efeitos digitais. Também é realizado o estudo
sobre as técnicas de processamento de sinal existentes relativamente aos efeitos, ou seja,
conhecer os algoritmos correspondentes aos efeitos mais conhecidos e utilizados na
guitarra elétrica e escolher o melhor modo a seguir se possível. São igualmente
mencionadas algumas abordagens diferentes no que se refere à implementação RTL de
alguns dos efeitos mencionados.
O terceiro capítulo é responsável por toda a análise do sistema. Este capítulo é o
responsável pela especificação do hardware necessário para o interface analógico a
utilizar consoante os requisitos deste projeto. Analisar como será feita a aquisição do
sinal bem como a conversão e reprodução deste. Em suma é neste capítulo que são
analisados cada um dos subsistemas e especificadas as necessidades de cada um deles.
No quarto capítulo é detalhada a implementação de todo o sistema. Relativamente
ao hardware, interface analógico, circuitos e PCBs. Bem como em relação ao gateware
implementado, protocolos de comunicação, processamento e controlo dos efeitos de
áudio. Também é demonstrada a implementação correspondente à aplicação
desenvolvida em C# de maneira a permitir ao utilizador escolher os efeitos bem como
os parâmetros de cada um.
No quinto capítulo são demonstrados e analisados os resultados do sistema. São
especificados os resultados em simulação e posteriormente os resultados experimentais.
Será também efetuada a análise dos custos inerentes a este projeto, custos na criação das
placas, do FPGA, etc e realizada a comparação com sistemas semelhantes existentes no
mercado atual.
O sexto capítulo é composto pela conclusão do trabalho efetuado bem como
melhoramentos que possam ser implementados no futuro em relação a este trabalho.

7
Por fim, o oitavo e nono capítulo são constituídos pela bibliografia utilizada nesta
dissertação e por anexos referentes a implementação deste trabalho, respetivamente.

8
Capítulo 2

Estado de Arte

2.1. Propriedades dos sinais de áudio

Figura 6- Domínio do tempo e frequência

O propósito desta dissertação consiste na implementação de efeitos sonoros daí que


é essencial conhecer as propriedades dos sinais de áudio mais relevantes [11]. O som é
definido como uma onda mecânica como uma oscilação de pressão [12]. Este propaga-
se, até ao ponto de ser audível pelo ser humano, numa determinada gama de frequência.
Essa gama situa-se normalmente entre 20Hz e os 20kHz. Esta gama de valores é
aproximada podendo o valor mínimo audível ser inferior para alguns autores. O som
pode ser representado no domínio do tempo bem como no domínio da frequência, como
podemos observar na figura 6.

9
Figura 7- Frequências audíveis

Como já foi referido as frequências audíveis ao ser humano situam-se


aproximadamente entre os 20Hz e os 20kHz. As frequências superiores a 20kHz são
designadas por ultrassons enquanto as frequências inferiores a 20Hz são nomeadas de
infrassons. Na figura 7, pode-se verificar isso mesmo, bem como em que gama os sons
graves e agudos estão, dentro do espectro audível.
As frequências que estão entre 20Hz e 300Hz são denominadas frequências
baixas, nesta gama de valores consegue-se ouvir sons graves. Enquanto frequências
entre 3kHz e 20kHz são designadas frequências altas e é possível obter sons agudos. No
entanto, ainda dentro do espectro audível, o ser humano é mais sensível a frequências
dentro da gama de valores entre 300Hz e 3kHz.
Posto isto, é também necessário perceber em que gama de valores os sons são
produzidos pelo instrumento a usar nesta dissertação, sendo neste caso particular a
guitarra elétrica. Este instrumento referido, produz obviamente sons dentro do espectro
audível mas numa gama bem mais reduzida. Para isso, foi necessário verificar que
valores de frequência obtém-se de algumas notas provenientes da guitarra elétrica, esta
análise concreta será abordada mais à frente nesta dissertação. No entanto, estes valores
já são conhecidos e serão utilizados como comparação com a análise experimental já
referida.

10
Figura 8 - Frequências típicas de notas musicais

Na figura 8, é possível verificar as frequências das correspondentes notas que


consegue-se obter a partir da guitarra elétrica. Os valores a vermelho representam as
frequências das notas das seis “cordas soltas” de uma guitarra. É possível verificar que a
frequência proveniente da corda solta mais grave da guitarra é de aproximadamente
80Hz e a corda solta mais aguda é de 330Hz. No entanto, é possível atingir frequências
numa gama superior com recurso aos harmónicos da guitarra, podendo obter-se valores
máximos próximos dos 15kHz.
Perante isto, será essencial introduzir o conceito do teorema de amostragem de
Nyquist-Shannon [13]. Este teorema tem como objetivo analisar uma parte de um sinal
contínuo e construir um sinal discreto a partir de do sinal original sem perder a
informação proveniente deste. Para isso, é utilizada uma frequência de amostragem.
Esta frequência tem de ser superior a pelo menos duas vezes o valor de frequência mais
elevado do sinal original,
,

quanto maior for o valor da frequência de amostragem maior será também a


qualidade do sinal amostrado. Idealmente, por experiência empírica define-se que para
obter maior qualidade na amostragem a frequência a utilizar deve ser 10 vezes superior
ao valor máximo de frequência encontrado no sinal de entrada. Geralmente, para sinais
de áudio, a frequência de amostragem deve ser superior a 40kHz de maneira a evitar
efeitos de aliasing.

11
Posto isto, para este caso concreto depois de analisadas as frequências das notas
musicais, o valor a utilizar aconselhado deve ser superior a 40kHz, mas idealmente deve
possuir uma frequência de aproximadamente 150kHz, de maneira a atingir qualidade
suficiente na amostragem.

2.2. Arquitetura de unidades de


processamento digital para sinais de áudio

Figura 9 - Arquitetura de aplicações de áudio

Normalmente, existe uma arquitetura a seguir em aplicações de áudio para o


processamento de sinal. Esta arquitetura pode ser visualizada no diagrama de blocos
representado na figura 9.
Esta arquitetura deve possuir uma unidade de processamento do sinal, este é o
responsável por receber o sinal proveniente do sistema de aquisição do sinal, composto
por um conversor analógico para digital (ADC), e adicionar efeitos e efetuar o controlo
dos mesmos. Os efeitos são implementados seguindo os respetivos algoritmos e podem
ser efeitos baseados em adições com tempos de atraso como delay, echo, vibrato, ou
outro tipo de efeitos baseado no processo clipping como overdrive e distorção entre
muitos outros. O sinal alterado é depois enviado por um conversor digital para
analógico (DAC), este deve possuir os filtros e ajustes de amplificação do sinal
necessários para a devida reprodução do sinal. O sinal é reproduzido num dispositivo de
output de áudio, sendo que para o caso particular da guitarra elétrica é normalmente
utilizado um amplificador.

12
Processamento dos sinais digitais

Figura 10 - Representação dos sinais

A representação digital de um sinal de áudio analógico é realizada através de um


conversor analógico para digital, ADC (analog-to-digital converter) [14]. O ADC
adquire amostras das amplitudes do sinal analógico, , ao longo do eixo horizontal
do tempo e quantifica as amplitudes lidas convertendo-as em amostras fixas
representadas por números no eixo vertical, , como podemos observar na figura
10.
O sinal analógico é então representado por um sinal contínuo, no domínio do
tempo, e por os seus valores de amplitude. De maneira a efetuar a conversão deste sinal,
é utilizado um ADC (Analog to Digital Converter) para converter o sinal contínuo para
um sinal discreto. Este sinal é exibido por uma sequência de amostras durante o tempo
discreto n, representado na figura 10, por linhas verticais e pontos nos topos. O tempo
de distância entre duas amostras seguidas retrata o período de amostragem e por
conseguinte o inverso desta, representa a frequência de amostragem previamente
definida. Esta frequência representa o número de amostras por segundo em Hertz (Hz),
e tem de seguir o teorema de amostragem já referido anteriormente, possuir um valor
maior que dez vezes o valor máximo da frequência máxima encontrada, dentro da

13
largura de banda, do sinal analógico. Quando é pretendido usar uma frequência de
amostragem fixa, é essencial garantir que o sinal de entrada possui uma largura de
banda de acordo com a seguinte expressão,

Caso contrário é necessário rejeitar frequências elevadas, usando para isso um


filtro passa-baixo que deixa passar as frequências baixas e atenua, isto é, reduz a
amplitude, dos sinais com frequências superiores ao valor da frequência de corte,
.
Após, a conversão do sinal analógico, o sinal digital procede para a unidade de
processamento de sinal digital, este sistema realiza uma simples multiplicação de 0.5 de
cada amostra obtendo o sinal a saída,

este sinal procede para o conversor DAC(Digital-to-Analog Converter), onde o sinal


analógico é reconstruído, . O sinal de saída possui metade da amplitude do
sinal de entrada, .

2.2. Processadores de sinal digital


Depois de analisadas as propriedades dos sinais de áudio, a arquitetura de unidades
de processamento de sinais e de como é realizado o tratamento e conversão dos sinais
de entrada e saída destes sistemas, é então essencial analisar a unidade mais importante
do sistema, a unidade de processamento do sinal digital. Neste caso particular, esta
unidade será responsável pelo processamento e controlo dos efeitos digitais de áudio.
Este tipo de unidade de processamento de sinais digitais oferece várias vantagens
em relação aquelas baseadas em sinal analógico como já foi mencionado anteriormente.
Estes processadores digitais oferecem vantagens como maior insensibilidade ao
ambiente que o rodeia, como por exemplo a temperatura, desde que o dispositivo
encontre-se dentro da gama de operação, este funciona com a mesma eficiência a
temperaturas superiores ao contrário das unidades baseadas em sinal analógico [15]. As
unidades digitais são reprogramáveis o que permite que estes possam ser utilizados para

14
várias funções utilizando o mesmo hardware, não necessitando de componentes
adicionais, isto vai de encontro com outra das suas vantagens, o número reduzido de
componentes. Toda a lógica é implementada num único chip, permitindo assim a
aplicabilidade em sistemas complexos e que tenham como requisito o tamanho reduzido
ou a portabilidade.
No entanto, processadores digitais têm algumas desvantagens como o tempo de
processamento limitado e o espaço de memória que é limitado consoante o dispositivo
utilizado.
O componente a utilizar nestes processadores digitais podem ser
microprocessadores, normalmente DSP (Digital Signal Processor), ou
microcontroladores. Neste caso particular, o de processadores de efeitos digitais ou
pedaleiras multi-effect, é mais comum serem utilizadas implementações com recurso ao
uso de DSP.
Como o pretendido nesta dissertação é a implementação de um processador de
efeitos de audio em FPGA, tornou-se essencial fazer uma análise mais concreta,
apresentando as vantagens e desvantagens, entre processadores de efeitos em DSP e
processadores de efeitos em FPGA.

Processadores de efeitos em DSP

Figura 11- Exemplo de um chip DSP

Relativamente à unidade de processamento de um processador de efeitos digital,


atualmente, uma das possibilidades é com a utilização de um DSP (Digital Signal
Processor). Na década de 1980, surgiu o primeiro DSP. Foi apresentado em 1983 o

15
TMS320C10, pela Texas Instruments, o microprocessador concebido especialmente
para resolver problemas de processamento digital de sinal [16] [17].
Um processador de sinais digitais permite utilizar sinais do mundo real como, voz,
som, vídeo, temperatura, pressão ou posição e que depois de digitalizados, são
manipulados pelo processador em questão. [18]. Este tipo de processador é otimizado
principalmente para realizar algoritmos de elevado cálculo matemático. Um DSP tem
como objetivo realizar o maior número de processos possíveis antes que um novo dado
tenha que ser manipulado. Funções como soma, subtração, divisão e multiplicação
devem ser executadas muito rapidamente, normalmente mais rápido do que um
microprocessador de uso geral. Os sinais, provenientes de qualquer modelo de origem,
necessitam de ser processados para que a informação contida nesses sinais possa ser
analisada, disponibilizada ou convertida para qualquer outro tipo de sinal que possa ser
utilizado. As conversões dos sinais são executadas a altas velocidades.
Os DSPs são vantajosos em vários aspetos e utilizados em diversas aplicações. Para
além, de um DSP ser um microprocessador otimizado para aplicações de processamento
numérico de alta velocidade, são também projetados para manipular sinais digitais,
consoante o algoritmo fornecido pelo utilizador, bem como realizar operações em tempo
real em sistemas flexíveis e adaptativos. Este tipo de microprocessador, tem como
principal vantagem ser reprogramável, o que possibilita reprogramar o
microprocessador para solucionar o problema sem que seja necessária a troca de
hardware. Em alguns casos nem existe a necessidade de reprogramá-lo, em que uma
solução do problema possa ser apenas melhorar a performance. A redução de custos
também é outra das vantagens pois devido à programabilidade os requisitos de
hardware são reduzidos, pois a quantidade de circuitos integrados exigidos são
reduzidos e o tempo de desenvolvimento também é inferior comparado com
dispositivos semelhantes. Estabilidade e facilidades de implementação de algoritmos
adaptativos, são outras das vantagens deste tipo de implementação.
No que diz respeito a implementações de efeitos digitais com recurso a DSPs, já
existiram alguns desenvolvimentos nesse aspeto. Como exemplo, no artigo [19], é
possível ficar a conhecer os algoritmos de alguns efeitos conhecidos para guitarra
elétrica e as técnicas de implementação usando DSP.

16
Processadores de efeitos em FPGA

Figura 12 - Exemplo de placa de desenvolvimento FPGA

Implementação de um processador de efeitos com a utilização de um FPGA é outra


possibilidade atrativa e vantajosa.
Em 1985, surgiu o primeiro FPGA inventado por Ross Freeman, cofundador da
Xilinx, atualmente um dos principais fornecedores de dispositivos lógicos programáveis
a nível mundial [20]. Este chip é composto por portas lógicas, como portas AND, OR,
NOT e shift registers. Quanto à constituição de FPGAs, estes são compostos por chips
lógicos digitais reprogramáveis formados em silício. Neste tipo de chips é possível
programar praticamente qualquer tipo de função digital [8] [9]. A programação de um
FPGA é vista como a reconfiguração do próprio chip para implementar a funcionalidade
desejada, ou seja, para cada vez que se programa um FPGA obtém-se o circuito lógico
equivalente, por isso, a necessidade de executar uma aplicação de software é excluída.
FPGA é um dispositivo semicondutor que pode ser programado mesmo depois de ser
fabricado [10], este permite programar as características e funções do produto, adaptar-
se a novas normas e reconfigurar hardware para aplicações específicas em vez de estar
restrito a qualquer função de hardware predeterminada.
A grande vantagem deste tipo de implementação sobre a implementação com
recurso a DSP, consiste no fato de que FPGA é um componente único, otimizado para
cada aplicação e com os recursos desejados para tal, isto faz com que os custos sejam
reduzidos bem como o espaço numa placa, pois não existe desperdício de recursos. Por

17
outro lado, a desvantagem vai de encontro com os custos e tempo de desenvolvimento,
pois este tipo de soluções são talhados para linhas de produção de larga escala.
Em relação aos DSPs, estes nem sempre possuem as funções que se deseja ou
necessárias para aplicações específicas, o que obriga à adição de circuitos externos
complexos. Neste tipo de soluções, existe o desperdício de recursos, pois, na maioria
dos casos, há funções que não são utilizadas, o que resulta em custos superiores.
Perante isto, soluções com uso de FPGA têm sido cada vez mais adotadas, pois as
funções pretendidas são implementadas pelo utilizador, visto que, estas não são
programadas de fábrica. Tornando-se assim soluções bastante flexíveis, possivelmente
de custo reduzido, e atingir também elevados níveis de desempenho.

2.3. Efeitos

Relativamente aos efeitos a serem implementados, serão escolhidos alguns dos mais
conhecido efeitos utilizados em guitarra elétrica [14]. Neste subcapítulo são abordados e
explicados alguns efeitos, com recursos aos algoritmos mais utilizados nas suas
implementações. No entanto, não serão propriamente implementados todos os efeitos
mencionados, mas sim todos aqueles que o tempo permitir durante toda a conceção do
projeto.

2.3.1. Delay/Echo

Figura 13 - Exemplo de algoritmo do efeito delay

O efeito delay/echo é composto pelo sinal original (sinal de entrada) adicionado por
um atraso repetitivo. O tempo de atraso será um parâmetro a definir de maneira a que o

18
efeito seja audível. Se o atraso estiver entre 10 a 25 ms poderemos ouvir uma repetição
rápida do sinal denominada doubling ou slapback. Se o tempo de atraso for superior a
50 ms o que iremos ouvir será um echo [14]. De maneira a implementar o efeito delay, é
possível utilizar um algoritmo semelhante ao da figura 13.
O sinal de saída deste algoritmo, y(t), é formado pela combinação do sinal de
entrada, x(t), e o mesmo com um atraso. É usado um filtro FIR em que o sinal de
entrada é atrasado por uma determinada duração. O sinal do efeito em questão, só será
audível quando o sinal processado for adicionado ao sinal de entrada.

2.3.2. Vibrato

O efeito vibrato é muito peculiar, pois quando conseguimos ouvi-lo, este transmite a
sensação de que a distância entre a origem do som e os nossos ouvidos está a variar.
Neste caso particular, a variação da distância, corresponde à variação do tempo de
atraso.
De maneira a obter o efeito vibrato, é possível variar periodicamente o tempo de
atraso resultando assim numa variação do tom periódica.
Os valores típicos de tempo de atraso, para o efeito vibrato, normalmente situam-se
entre 5 a 10 ms. Este efeito, é usualmente utilizado como base em outros efeitos, como
por exemplo, Chorus e Flanger que são abordados de seguida.

19
2.3.3. Chorus

Figura 14 - Exemplo de algoritmo do efeito Chorus

O efeito chorus tem como propósito reproduzir várias réplicas do sinal original, isto
é, uma espécie de coro. Se estas réplicas do sinal de entrada forem atrasados entre 10 a
25 ms com pequenas e aleatórias variações nos tempos de atraso, iremos ouvir o efeito
chorus, que tem como base o efeito vibrato que reproduz um atraso variável.
Normalmente, este tipo de efeito é utilizado quando um guitarrista pretende simular o
som de várias guitarras ao mesmo tempo [14].

2.3.4. Flanger

Figura 15 - Exemplo de algoritmo do efeito Flanger

Relativamente ao efeito flanger, o algoritmo deste é bastante semelhante ao do


efeito chorus. A grande diferença deve-se ao fato que, em relação a este efeito a
velocidade da variação do atraso é menor comparativamente ao efeito chorus. Este
efeito simula um som semelhante ao de um “avião a jato”. Se o tempo de atraso possuir
um valor abaixo dos 15ms e se este for continuamente variado a uma frequência baixa,
por volta de 1Hz, poderemos ouvir o efeito flanger [14].

20
2.3.5. Distorção

Figura 16 - Clipping usado para o efeito distorção

Quando se fala em distorção, certamente será identificável pela maior parte das
pessoas, sendo este um dos efeitos mais conhecidos e preferidos mesmo por quem não
esteja no “mundo” musical [21]. Este tipo de efeito é normalmente utilizado em estilos
de música rock ou variantes deste. O objetivo principal da implementação deste tipo de
efeito é, comprimir os picos da onda de sinal original e adicionar harmônicos. O
processo de alterar o sinal do modo referido é denominado clipping.
No entanto, existem duas variantes deste processo, hard-clipping e soft-clipping. Na
figura 16, podemos verificar a forma de onda original bem como hard-clipping e soft-
clipping. Estes processos são utilizados para obter os efeitos distorção e overdrive,
respetivamente. O efeito overdrive, também é designado como um tipo de distorção mas
possui uma compressão do som mais natural, sendo assim menos utilizado do que o
efeito distorção (hard-clipping) para estilos de música rock e variantes como referido.

21
Exemplos de implementação RTL de efeitos

Figura 17 - Exemplo de circuito lógico do efeito delay

Em fase de implementação, poderemos ter como base os circuitos lógicos


correspondentes aos efeitos desejados demonstrados no artigo [7]. Neste artigo, o
objetivo é bastante semelhante ao referido nesta dissertação, em que sugere como
implementar alguns dos efeitos já referidos. São demonstrados alguns circuitos lógicos
correspondentes aos efeitos para implementação em hardware digital. De maneira a
poder implementar este tipo de efeitos em FPGA, será utilizada uma linguagem de
hardware HDL (Hardware Description Language), denominada Verilog.
Na figura 17, podemos observar um circuito lógico de exemplo. Este pode servir
como base de implementação do efeito delay em HDL.

22
Figura 18 - Exemplo de circuito lógico do efeito vibrato

Na figura 18, podemos verificar um circuito lógico exemplo, como base de


implementação do efeito vibrato.

Figura 19 - Exemplo de circuito lógico do efeito Chorus

23
Figura 20 - Exemplo de circuito lógico do efeito Flanger

Na figura 19, podemos observar um circuito lógico exemplo do efeito chorus como
possível base para a sua implementação. Na figura 20, podemos observar um circuito
lógico exemplo, como base de implementação do efeito flanger em HDL.

24
Capítulo 3

Análise do Sistema

3.1. Funcionamento do sistema


Neste capítulo é realizada toda a análise do sistema, explicação do seu
funcionamento e especificação do hardware a utilizar neste projeto. Como já foi
referido anteriormente, tornou-se imprescindível implementar o interface analógico para
guitarra e amplificador.
A aquisição do sinal proveniente do instrumento musical, neste caso particular da
guitarra elétrica, foi efetuada através de um ADC (Analog-to-Digital Converter). Depois
do processamento dos dados em FPGA, o qual também é abordado neste capítulo, os
sinais terão de ser reproduzidos num amplificador mas antes, convertidos por um DAC
(Digital-to-Analog Converter).

Assim, podemos facilmente identificar os três principais subsistemas deste projeto:

 Sistema de aquisição do sinal;


 Sistema de processamento e controlo;
 Sistema de Conversão e reprodução do sinal.

25
Figura 21 - Diagrama geral do sistema

Posto isto, é possível verificar o funcionamento de todo o sistema representado na


figura 21.
Neste diagrama básico estão representados os blocos de aquisição do sinal (ADC) e
bloco de conversão e reprodução do sinal (DAC). O bloco de processamento dos efeitos
é representado pelo FPGA, este que possui um diagrama de exemplo simples de como
implementar o efeito delay. Como entrada temos o sinal da guitarra “limpo” e a saída
representada por um amplificador.
É então essencial escolher devidamente o hardware com características apropriadas
ao sistema em causa. Para tal, foi necessário analisar as formas de onda e frequências
dos sinais das notas provenientes da guitarra elétrica, bem como as caraterísticas do
FPGA a usar e o protocolo de comunicação a ser implementado entre o hardware.

26
3.2. Características da guitarra elétrica

Figura 22 - Forma de onda da nota Mi da guitarra

De maneira a poder escolher o hardware que vai de encontro com as exigências do


sistema, foram analisadas as formas de onda e frequências de algumas notas
provenientes da guitarra.
Na figura 22, podemos observar a forma de onda da nota Mi (6ª corda da guitarra).
Podemos verificar que este sinal tem uma frequência a rondar os 83Hz, valor próximo
do esperado de 82Hz. E com valores de tensão de pico a pico próximos dos 200mV.

27
Figura 23 - Forma de onda da nota Lá da guitarra

Na figura 23, podemos visualizar a forma de onda da nota Lá (5ª corda da


guitarra). Neste caso, a nota Lá, possui uma frequência de aproximadamente 110Hz,
valor próximo do esperado, e valores de tensão de pico a pico a rondar os 260mV.

Figura 24 - Forma de onda da nota Ré da guitarra

28
Figura 25 - Forma de onda da nota Sol da guitarra

Na figura 24, é possível observar o sinal correspondente à nota Ré (4ª corda da


guitarra). Para o caso do sinal da nota Ré, podemos verificar que este detém um valor de
frequência próximo dos 147Hz, como seria de esperar. Como valores de tensão de pico
a pico estes rondam os 240mV.
Na figura 25, podemos observar as características da nota Sol (3ª corda da guitarra).
É possível verificar que no caso do sinal da nota Sol, este possui frequência próxima
dos 200Hz esperados e valores de pico a pico a rondar os 270mV.

Após a análise das características de algumas das notas da guitarra, foi possível
confirmar os valores de frequência destas, depois do estudo efetuado anteriormente, e
verificar que não existem grandes restrições relativamente aos valores de amplitude.
Como já foi referido anteriormente, e segundo o teorema de Nyquist [13], a frequência
de amostragem de um sinal analógico, deve ser idealmente dez vezes superior à
frequência máxima do sinal, de maneira a que se perca a menor quantidade de
informação possível. Para que seja possível alcançar amostragens com qualidade
suficiente, idealmente, a frequência de amostragem deve ser pelo menos dez vezes a
frequência máxima do sinal de entrada. Perante isto, chega-se à conclusão de que

29
necessitamos, como principal requisito, a gama de frequências com que o hardware
opere. Como já foi referido, esta gama deve ser superior a 40kHz, idealmente próximo
dos 150kHz.

3.3. Interface Analógico


Como já foi referido anteriormente, é necessária a implementação do interface
analógico para realizar a aquisição do sinal proveniente da guitarra, e para efetuar-se a
reprodução do sinal, depois de processado na FPGA, num dispositivo de output de
áudio, neste caso um amplificador.
A seleção dos componentes de hardware necessários para este projeto é crucial, pois
o bom funcionamento de todo o sistema depende do hardware que o constitui.
É importante que a aquisição do sinal proveniente da guitarra sejam efetuadas com
qualidade, sem ruídos e com frequência de amostragem adequada aos requisitos do
sistema. Também foram necessários estes cuidados com o sistema de conversão e
reprodução do sinal processado, já com efeitos. Pois, mesmo que a aquisição do sinal
seja realizada com qualidade, este sistema necessita de operar à mesma frequência e
com a mesma eficiência do que o sistema de aquisição do sinal.

Perante estas restrições mencionadas, a escolha dos componentes de hardware para


os sistemas de aquisição do sinal e reprodução do mesmo, foram focados nos seguintes
fatores:

 Gama de frequências;
 Capacidade de resolução;
 Uso frequente em aplicações de áudio;
 Ruído;
 Custo;
 Facilidade de aquisição.

30
3.3.1. Sistema de aquisição

Figura 26 - ADC CS5340

Para o sistema de aquisição do sinal foi necessário escolher um ADC, o


escolhido foi o CS5340 da CIRRUS LOGIC [22] , este circuito integrado é um
conversor analógico para digital stereo normalmente utilizado em aplicações de áudio
digital. Este possui filtragem anti-aliasing, conversão em 24 bits para cada um dos
canais de entrada, esquerdo e direito, a valores de frequência de amostragem até
200kHz por canal. O CS5340 utiliza um modulador multi-bit de 5ª ordem que exclui a
necessidade de usar um filtro anti-aliasing externo. Este ADC é bastante apropriado
para sistemas de áudio com baixo nível de ruído e distorção desprezável [23].
A seguir podemos verificar algumas das características mais importantes do
CS5340.

Tabela 1 - Características do CS5340

Alimentação 3.3V a 5V
Protocolo de comunicação I2S/LJ
Frequência de amostragem Até 200kHz
Resolução 24 bits
Consumo 10mA

31
Figura 27 - Diagrama dos componentes internos do ADC

Visto que, o CS5340 possui valores de frequência de amostragem até 200kHz e


elevada resolução é perfeitamente adequado para o sistema referido, pois seria
necessário no mínimo valores próximos dos 150kHz. Outras das vantagens deste
componente são os valores comuns de alimentação como 3.3V e 5V, utiliza como
protocolo de comunicação a tecnologia I2S [24] e Left-Justified, normalmente utilizados
em aplicações de áudio. Este também componente detém geração automática dos
barramentos de clock necessários ao seu funcionamento apenas com a deteção do master
clock. A facilidade de adquirir este hardware também foi um fator importante na sua
escolha.
No diagrama da figura 27, podemos ter uma visão geral dos componentes
internos do ADC, de maneira a verificar o seu funcionamento. Como já foi referido
anteriormente, este é um conversor stereo, possui dois canais de entrada e filtros passa-
alto e de baixa latência de maneira a reduzir possíveis ruídos. Este componente detém
tensões analógica, digital e lógica, bem como, o já mencionado, mecanismo de deteção
do master clock que gera os restantes sinais de clock necessários ao seu funcionamento
(Slave clock e Left-Right clock).

32
3.3.2. Sistema de conversão e reprodução do
sinal

Figura 28- DAC CS4335

No que diz respeito ao sistema de conversão e reprodução do sinal, foi preciso


escolher um DAC, focado nos fatores já mencionados anteriormente.
O integrado escolhido foi o CS4335, também da CIRRUS LOGIC [22], este é um
conversor digital/analógico da família CS4334 (CS4335/8/9), a única diferença entre
estes componentes é o formato de como os dados são processados, no caso do CS4335,
o protocolo de comunicação suportado é o Left-Justified. Este protocolo é bastante
semelhante ao da tecnologia I2S, apenas difere no formato dos dados a processar, e será
especificado mais à frente. O CS4335 também detém valores de frequência de
amostragem de 2kHz até aproximadamente 100kHz [25] .

Figura 29 - Diagrama dos componentes internos do DAC

33
No diagrama da figura 29, podemos obter uma visão geral do funcionamento interno
do conversor digital analógico CS4334.
O CS4335 é um conversor stereo, ou seja, possui dois canais de saída. Este
componente é baseado na modulação Delta-Sigma e utiliza um filtro passa baixo de
maneira a reduzir possíveis ruídos, em cada um dos canais. Este dispositivo é bastante
adequado ao sistema em questão, pois é possível obter frequências de amostragem
dentro da gama pretendida e semelhantes ao do ADC utilizado no sistema de aquisição
do sinal, bem como alta resolução. A tensão de alimentação deste componente é de 5V.
A facilidade de aquisição e custo nulo, do DAC em questão, também foi um fator
importante na sua escolha. A escolha recaiu neste componente pois foi também mais
rápido adquiri-lo do que outros dispositivos da mesma família como CS4334.
Na tabela 2, podemos observar algumas das principais características do DAC,
CS43345.

Tabela 2 - Características do CS4335

Alimentação 5V
Protocolo de comunicação Left-Justified
Frequência de amostragem 2kHz a 200kHz
Resolução 24 bits
Consumo 10mA

34
3.3.3. Sistema de processamento e controlo

Figura 30 - Xilinx UPV5LX110T

A parte central deste projeto não podia deixar de ser o sistema de processamento e
controlo. É neste subsistema que o sinal proveniente da guitarra, depois de convertido
pelo ADC, é processado e enviado para o DAC. Este sistema foi responsável pela
implementação dos efeitos, bem como pelo controlo dos mesmos. A escolha dos efeitos
foi efetuada pelo utilizador através de uma aplicação user friendly que será abordada
mais à frente.
Como já foi referido anteriormente, foi utilizado um FPGA como unidade de
processamento deste sistema. Para isso, foi necessário escolher a plataforma a utilizar
com base na disponibilidade.
Definida a necessidade de utilizar FPGA neste projeto, passou-se então a escolha
da plataforma mais indicada a ser utilizada. O sistema não é de extrema complexidade,
o que não exige grandes preocupações no que diz respeito ao número de logic elements
do FPGA, o que já facilita bastante o processo de escolha do mesmo.
Como plataforma de desenvolvimento a utilizar no sistema de processamento e
controlo do sinal, foi então escolhida um plataforma da Xilinx [9], denominada XUPV5-
LX110T, como podemos observar na figura 30. Esta placa possui bastantes periféricos

35
que poderão ajudar na implementação e verificação do sistema e é composta por um
FPGA da família virtex 5, mais concretamente, XC5VLX110T [26]
Esta placa de desenvolvimento é composta por outras características e
periféricos. Algumas das características são:

 Duas Flash PROMS (32Mbyte cada);


 256Mbyte DDR2;
 USB host;
 Codec stereo AC97 com SPDIF áudio jacks;
 Porta RS-232;
 LCD 16x2;
 LEDs de propósito geral;
 Botões cada com LED correspondente;
 Encoder rotativo;
 Oito DIP Switches;
 JTAG;
 Cartão de memória flash de 1GB;
 Módulo SODIMM de 256MB.

36
Capitulo 4

Desenvolvimento do sistema

4.1. Hardware
Após a escolha cuidada do hardware indispensável para o bom funcionamento de
todo o sistema foi então fundamental passar à fase de desenvolvimento e integração do
mesmo.
Como as placas de desenvolvimento ou kits existentes no mercado associados ao
hardware escolhido são de preço elevado, optou-se pelo desenvolvimento das placas de
circuito impresso, com base nos circuitos recomendados pelo próprio fabricante do
respetivo hardware ou através dos esquemáticos fornecidos pelas placas de
desenvolvimento existentes no mercado.
Procedeu-se então à criação de duas PCBs para o sistema de aquisição do sinal
(ADC) e para o sistema de conversão e reprodução do sinal (DAC).

4.1.1. ADC
O desenvolvimento da PCB para o ADC teve como base o circuito recomendado
do datasheet do CS5340 [23] bem como o esquemático da Evaluation Board existente
no mercado fornecido pela cirrus logic, CDB5340 [27].
Na criação desta PCB houve a necessidade de ter alguns cuidados, como por
exemplo, a utilização de condensadores de acoplamento o mais próximos possível do
integrado, e de preferência que o condensador com valor mais pequeno seja o que fique
mais próximo do ADC. Os pinos de tensão VA e VL não devem ser alimentados pelo
mesmo ponto de alimentação e todos os sinais devem ficar afastados dos pinos de
FILT+ e VQ, principalmente os sinais de clock gerados pelo hardware, de maneira a
evitar acoplamentos indesejados nos moduladores. E todos os pinos de massa devem
estar conectados à mesma referência de massa. Estes são alguns dos cuidados a ter na
criação desta PCB bem como a utilização de uma resistência de pull-up de 10kΩ nos

37
Tabela 3 - Modos de operação do ADC

terminais de VL, para que seja selecionado o protocolo de comunicação I2S. Outro
aspeto a ter em conta é a seleção do modo de controlo do ADC, em que se pode tirar
vantagem da já referida deteção automática do master clock. Este ADC pode funcionar
como clock master ou clock slave. Em modo clock master, o integrado gera
automaticamente os restantes sinais de relógio, LRCK (Left-right clock) e SCK (slave
clock), ou seja, passam a ser outputs. Enquanto, no modo clock slave, todos os clocks
são inputs, gerados externamente. Na tabela 3, é possível verificar os modos de
controlo, para diferentes valores de M0 (pino1) e M1 (pino 16).

38
Esquemático do ADC

Figura 31 - Esquemático do ADC CS5340

Posto isto, após todos os cuidados a ter na criação da PCB do ADC CS5340, foi
possível avançar para a criação do esquemático. Para isso, foi utlizada a ferramenta
eagle [28].

39
ADC Board

Figura 32 - Resultado do layout da PCB do ADC

Depois de finalizado o esquemático do ADC, passou-se ao desenho da PCB. Na


figura 32, podemos visualizar o desenho final.

40
Resultado PCB do ADC

Figura 33 - Resultado da primeira versão da PCB do ADC

Figura 34 - Resultado da versão final da PCB do ADC

41
O resultado da primeira versão da PCB do ADC podemos observar na figura 33.
Esta primeira versão ainda continha componentes de packages diferentes daqueles que
seriam os pretendidos e que seriam corrigidos na versão final. Esta placa foi utilizada
em vários testes no entanto, devido a possíveis problemas de conectividade, degradação
da placa e também por estética optou-se pela realização de outra versão, que passaria a
ser a versão final, a qual podemos observar na figura 34.

4.1.2. DAC
No que diz respeito à placa do ADC, esta também foi desenvolvida baseada no
circuito recomendado presente no datasheet do hardware em questão, CS4335 [25],
fornecido igualmente pela CIRRUS LOGIC.
Tal como para o ADC, foram necessários alguns cuidados a ter em conta no
desenvolvimento da PCB do CS4335. No entanto, neste caso, trata-se de uma
implementação menos minuciosa. Como precauções foi então essencial utilizar os
condensadores de desacoplamento o mais próximo possível do integrado com o
condensador com menor capacidade a ser o mais próximo dos dois. Será também
necessário alimentar o hardware com um sinal de tensão limpa de 5V.

42
Esquemático do DAC

Figura 35 - Esquemático do DAC CS4335

Posto isto, procedeu-se ao desenvolvimento do esquemático para PCB do


CS4335, como podemos observar na figura 35. Na figura 36, é possível visualizar o
resultado do desenho da PCB.

DAC Board

Figura 36 - Resultado do layout da PCB do DAC

43
Resultado PCB DAC

Figura 37 - Resultado da primeira versão da PCB do DAC

Figura 38 - Resultado final da PCB do DAC

Tal como para a PCB do ADC, foi feita uma primeira versão, presente na figura 37.
Pelas mesmas razões foi criada uma versão final da referida placa sem erros como os
presentes na primeira versão. Na figura 38, podemos observar o resultado da versão
final da PCB desenvolvida para o DAC, CS4335.

44
4.1.3. Aspeto final do hardware do
sistema

Figura 39 - Resultado final do sistema

Depois de as PCBs do sistema de aquisição do sinal (ADC) e do sistema de


conversão e reprodução do sinal (DAC) estarem finalizadas procedeu-se à integração
com os restantes elementos do sistema. Na figura 39, podemos observar o sistema quase
completo faltando apenas a guitarra como sinal de entrada.

45
4.2. Implementação em FPGA
Como já foi referido, o FPGA foi o componente responsável por todo o
processamento do sinal e controlo do sistema. A placa de desenvolvimento utilizada foi
a XUPV5-LX110T, já mencionada anteriormente, da família da virtex 5 da Xilinx.
Como linguagem descritiva de hardware foi usada a linguagem Verilog e como
software de desenvolvimento o Xilinx ISE Design suite também este da Xilinx. A
implementação deste sistema foi desenvolvido em paralelo com os hardware, de
maneira a facilitar a sua integração.

4.2.1. Módulo ADC


Para o módulo ADC, foi necessário implementar o protocolo I2S (Inter-IC
Sound). Pois, como já foi referido anteriormente, o ADC CS5340 utiliza como
protocolo de comunicação esta tecnologia. Este protocolo foi desenvolvido pela NXP
semiconductors tornando-o apropriado para ser utilizado em aplicações de áudio. O
protococo I2S é semelhante ao protocolo I2C, normalmente mais conhecido e mais
utilizado. A grande diferença é que o barramento de comunicação do I2S possui três
linhas ao invés de 2 como o I2C. E são elas as seguintes:

 Serial Clock (SCLK) – Linha que define a frequência da transmissão dos


dados;
 Left-Right Clock (LRCK) – Linha que seleciona o canal;
 Serial Data (SDATA) – Linha de transmissão de dados.

O protocolo estabelece uma multiplexação temporal (TDM) entre dois canais,


esquerda e direita, que são transmitidos pela linha SDATA. O LRCK estabelece esta
mesma multiplexação, escolhendo o canal pelo qual os dados são transmitidos.
Uma vez que neste tipo de protocolo o tamanho da palavra e a velocidade de
transmissão são variáveis, o dispositivo master está encarregue de controlar estes dois
fatores através das linhas SCLK e o LRCK. Estes sinais de relógico são enviados
sempre pelo o dispositivo master.

46
Figura 40 - Configurações do protocolo I2S

Na figura 40, é possível observar dois tipos de configuração do protocolo I2S.


No primeiro caso o dispositivo master funciona como transmissor, no segundo caso
funciona como recetor.

Figura 41 - Configuração I2S com controlador

O protocolo I2S também permite outro tipo configuração diferente dos dois
anteriores. Nesta abordagem existe um terceiro dispositivo adicional que tem como
responsabilidade controlar as linhas SCLK e LRCK.

47
Figura 42 - Diagrama temporal do protocolo I2S

É de sublinhar que devido à palavra poder variar em extensão é enviado


inicialmente o bit mais significativo (MSB), que normalmente é enviado um ciclo após
a transição do sinal LRCK, enviando depois os restantes até ao menos significativo. Ou
seja, isto permite que por exemplo um dispositivo master de 16 bits envie dados para
um dispositivo slave de 8 bits ou vice-versa sem que o valor mais significativo seja
perdido independentemente do tamanho da palavra. Na figura 42, podemos observar o
diagrama temporal que demonstra o formato mencionado. É possível verificar que a
transição do sinal LRCK acontece na transição negativa do sinal SCLK. E que o MSB é
atrasado um ciclo após transição do LRCK como referido.
Nos dispositivos que usam este protocolo aparece frequentemente um quarto
sinal acrescentado ao barramento: o master clock (MCLK). Este sinal é usado para
permitir a sincronização do dispositivo slave com o master. O período do sinal LRCK
tem que manter uma relação com o período do MCLK, de maneira a garantir a
sincronização. Essa relação terá de ser de 64, 128, 256 ou 512 para 1.

Este protocolo foi implementado para a comunicação com o ADC (CS5340), daí
que houve a necessidade de implementar o módulo master funcionando como recetor.
O valor da frequência de amostragem do sistema, que é igual ao sinal LRCK, foi
definido em 130kHz. Chegou-se a este valor porque devido às divisões que foram feitas
para os sinais de clock necessários, tanto para o funcionamento do módulo ADC como
para o módulo DAC, este será explicado mais à frente, foi o valor mais conveniente e

48
Figura 43 - Configuração da PLL para o sinal MCLK do ADC

mais fácil de gerar para os dois sistemas. E, como este valor está dentro da gama de
valores de frequência de amostragem exigidas e definidas anteriormente, 130kHz é um
valor aceitável para o bom funcionamento de todo o sistema.
Procedeu-se então, para a geração dos sinais de relógio essenciais para o seu
funcionamento. No entanto, como já foi referido anteriormente, o ADC escolhido
possui o mecanismo de deteção automática do MCLK, gerando por si os restantes
clocks, LRCK e SCLK. Portanto, apenas foi necessário gerar o MCLK para este
módulo.
Posto isto, de maneira a respeitar a relação MCLK/LRCK = 64, e como LRCK
já foi definido em 130kHz, será necessário obter um sinal MCLK com uma frequência
de aproximadamente 8,333MHz.
Para isso, foi utilizada uma PLL (Phase Locked Loop) [29]. Uma PLL é utilizada
para gerar vários sinais de relógio, definindo parâmetros como fase e frequência, a partir
de um sinal de relógio de entrada. Isto permite que se possa utilizar o sinal de clock
interno da FPGA e dividi-lo em sinais de relógio com frequência menores ou então
multiplicando-o de maneira a atingir valores de frequência superiores ao do sinal do
clock interno. O uso de PLL também permite que haja vantagem na sincronização dos
sinais em relação à divisão directa do clock interno. Perante isto, e como nesta
abordagem foi possível obter o valor exato pretendido, o sinal de MCLK foi então
gerado a partir de uma PLL. Através do assistente da Xilinx para gerar a PLL, podemos
definir os parâmetros pretendidos, como podemos observar na figura 43. O sinal de
clock de entrada utilizado foi o de 100MHz existente na placa de desenvolvimento
utilizada, e dividindo esse mesmo sinal por 120 foi possível obter como sinal de saída
da PLL 8,333MHz como desejado.

49
// MCLK ADC 8.333MHz
pll_Mclk_adc MCLK_ADC (
.CLKIN1_IN(clk_50),
.RST_IN(~rst),
.CLKOUT0_OUT(Mclk_adc),
.LOCKED_OUT()
);

Figura 44 - Instanciação do sinal MCLK do


ADC

Depois de definidos os parâmetros foi necessário por fim instanciar o módulo da


PLL gerada para o sinal MCLK, como podemos observar no excerto da figura 44.
Após o sinal MCLK ter sido gerado, os sinais LRCK e SCLK são gerados
automaticamente como já foi dito. Sendo o sinal LRCK de 130kHz, é possível também
verificar o sinal SCLK, tal como se fosse gerado manualmente. Como é necessário
transmitir 24 bits em cada semiciclo do LRCK, teve-se de chegar a um valor de 6.2MHz
seguindo a seguinte formula:

Tratada a geração dos sinais de relógio necessários ao funcionamento do ADC,


procedeu-se para a implementação do envio dos dados sincronizados. Repare-se que
sempre que for detetada uma transição ascendente do sinal LRCK os dados são
envidados pelo canal direito, caso contrário se for detetada uma transição descendente
do sinal LRCK os dados são enviados pelo canal esquerdo. Sempre que acontece esta
transição os dados são processados na transição negativa do sinal SCLK como
pretendido. No excerto de código figura 45, pode-se verificar a implementação desta
abordagem.

50
always @(negedge SCK_adc)
begin
if (old_LRCK_adc && ~LRCK_adc)
begin
i <= 24;
end
else if ( ~old_LRCK_adc && LRCK_adc )
begin
i <= 24;
end
else if(i > 0)
begin
i <= i - 1;
end
end

always @(posedge SCK_adc)


begin
if(~rst)
begin
old_LRCK_adc <= 0;
data_out_adc <= 0;
end
else
begin
old_LRCK_adc <= LRCK_adc;
if (old_LRCK_adc && ~LRCK_adc)
begin
right_d_adc <= data_out_adc;
end
else if ( ~old_LRCK_adc && LRCK_adc )
begin
left_d_adc <= data_out_adc;
end
else if(i > 0 && i!=24)
data_out_adc[i] <= Sdata_adc;
else data_out_adc[0] <= Sdata_adc;
end
end

Figura 45 - Implementação do envio dos dados do ADC

4.2.2. Módulo DAC


Para este módulo também foi necessário implementar o respetivo protocolo de
comunicação como foi feito para o ADC, no entanto num formato um pouco diferente,
o Left-Justified. A única diferença neste formato comparativamente com o utilizado para
o ADC, é que o Left-Justified, embora envie igualmente no início o bit mais
significativo (MSB) da palavra, este não é enviado um ciclo após a transição do sinal
LRCK, mas sim no instante em que acontece a transição deste.

51
Figura 46 - Diagrama temporal do protocolo Left-Justified

Na figura 46, podemos verificar o comportamento na transmissão dos dados do


formato Left-Justified.
Tal como para o ADC, os dispositivos que utilizam este protocolo possuem as
linhas de sinal LRCK, SCLK e SDATA, bem como o sinal MCLK que controla a
sincronização do dispositivo slave com o master.
Este protocolo foi usado para comunicar com o DAC (CS4335) e, ao contrário
do que sucede com o ADC, foi implementado o módulo master funcionando como
transmissor. Na geração dos sinais para o ADC, este possuía um mecanismo de geração
automática, o que não acontece neste dispositivo. Daí que os sinais LRCK, SCLK e
MCLK serão gerados manualmente, ou seja, são tratados como sinais de entrada.
Como já foi referido anteriormente, a frequência de amostragem do sistema é de
130kHz, tornado assim necessário o sinal de LRCK obter esse mesmo valor. Este sinal
tem de manter uma relação com MCLK de modo a garantir a sincronização. Para isso,
foi fundamental seguir a relação presente na seguinte expressão:

Seguindo então a relação de MCLK com LRCK igual a 192, e visto que LRCK é
de 130kHz facilmente chegamos ao valor do sinal MCLK de aproximadamente 25MHz.
Para isso, foi utlizado um dos sinais de clock internos do FPGA neste caso de
100MHz, este foi dividido manualmente através de um ciclo até atingir o valor
pretendido de 25MHz.

52
always@(posedge clk_mclk)
begin
if(~rst)
begin
MCLK_ger <= 0;
count <= 24'd0;
end
else
begin
if (count == 0)
begin
MCLK_ger <= ~MCLK_ger;
count <= 24'd1;
end
else
begin
count <= count - 24'd1;
end
end
end

Figura 47 - Geração do sinal MCLK do DAC

Relativamente ao sinal de LRCK, este já foi referido que teria de possuir um


valor de 130kHz. Este foi gerado através da mesma abordagem na geração do MCLK,
como se pode verificar no excerto de código da figura 48.

always@(posedge clk_lrck)
begin
if(~rst)
begin
LRCK_ger <= 0;
count <= 24'd0;
end
else
begin
if (count == 0)
begin
LRCK_ger <= ~LRCK_ger;
count <= 24'd383;
end
else
begin
count <= count - 24'd1;
end
end
end

Figura 48 - Geração do sinal LRCK do DAC

53
Por fim, foi gerado o sinal de SCLK. Sabendo que seria necessário transmitir 24
bits em cada semiciclo do sinal de LRCK. O sinal de SCLK foi gerado com base na
seguinte expressão:

always@(posedge clk_sclk)
begin
if(~rst)
begin
SCLK_ger <= 1;
count <= 24'd0;
rst_out <= 0;
end
else
begin
if (count == 0)
begin
SCLK_ger <= ~SCLK_ger;
count <= 24'd7;
end
else
begin
count <= count - 24'd1;
rst_out <= 1;
end
end
end

Figura 49 - Geração do sinal SCLK do DAC

A implementação do terceiro sinal de relógio do DAC pode ser verificada no


excerto de código da figura 49.
Gerados todos os sinais essenciais ao bom funcionamento do DAC escolhido,
procedeu-se à implementação do modo de transmissão dos dados. Como foi
mencionado, o cuidado a ter em conta neste caso, foi o formato do protocolo, Left-
Justified.
Os dados são transmitidos a cada transição negativa do sinal de SCLK logo após
qualquer transição do sinal LRCK, enviando-os pelo canal direito, caso seja detetada
uma transição positiva do sinal LRCK, ou pelo canal esquerdo caso seja detetada uma
transição negativa deste. No exemplo do excerto de código da figura 50, o q é enviado
diretamente para o DAC são os dados provenientes do ADC, pois ainda não foi
implementado qualquer efeito.

54
always @(negedge SCK_dac)
begin
if(~rst_sck)
begin
y <= 22;
end
else
begin
old_LRCK_dac <= LRCK_dac;
if (old_LRCK_dac && ~LRCK_dac)
begin
data_in_dac <= out_dist;
y <= 22;
Sdata_dac <= out_dist[23];
end
else if ( ~old_LRCK_dac && LRCK_dac )
begin
data_in_dac <= out_dist;
y <= 22;
Sdata_dac <= out_dist[23];
end
else if(y >= 0)
begin
y <= y - 1;
Sdata_dac <= out_dist[y];
end
end
end

Figura 50 - Implementação do envio dos dados do DAC

4.2.3. Implementação dos Efeitos


Depois de tratados os módulos ADC e DAC com a implementação do respetivo
protocolo de comunicação e de testado o funcionamento do sistema procedeu-se então
para a implementação dos efeitos. Para isso, foi necessário ter como base os algoritmos
de alguns dos efeitos estudados anteriormente.

55
Delay

Figura 51 - Algoritmo do efeito delay

O primeiro efeito a ser implementado foi o efeito delay. Para isso, teve-se como
base um dos algoritmos estudados, como o representado na figura 51.
De uma maneira sucinta, é possível dizer que o efeito delay consiste na soma do
seu sinal original mais o próprio sinal com um atraso. Foi neste sentido que se tentou
implementar este efeito usando as potencialidades da linguagem de hardware verilog.
De maneira a adicionar o sinal com atraso foi gerada uma memória single port
Ram através do block memory generator da Xilinx.

Figura 52 - Block memory generator da Xilinx

56
Figura 53 - Definição de parâmetros do block memory generator

Esta memória possui sinais de entrada como sinal de clock, reset, write enable,
entrada de dados e endereço. Possui também o sinal de saída de dados da memória,
entre outros sinais mas que para o caso não foram utilizados.
Definidas as entradas e saídas da memória foi essencial definir alguns
parâmetros desta, como podemos observar na figura 53.
O parâmetro Width foi definido com valor 24 pois este é o tamanho da palavra
utilizada no sistema em bits. Como Depth este tomou o valor de 64000 pois este será o
valor máximo de comparação que será explicado a seguir. Foi também definido que
seria feita a operação de leitura primeiro e só depois a escrita na memória. Após
definidos os parâmetros foi necessário instanciar o módulo.

singleport SinglePortRam_Delay (
.clka(clk), // input clka
.rsta(~rst), // input rsta
.wea(1'b1 && rst), // input [0 : 0] wea
.addra(rst_count), // input [16 : 0] addra
.dina(ADCout), // input [23 : 0] dina
.douta(DelayOut_wire) // output [23 : 0] douta
);

Figura 54 - Instanciação da single port Ram do efeito delay

57
Figura 55 - Exemplificação do tratamento dos dados para o efeito delay

Como sinal de entrada dos dados, ‘dina’, este toma os valores provenientes da
aquisição do sinal efetuada pelo ADC. O sinal ‘addra’ fica com o valor do contador
utilizado num ciclo de maneira a que o sinal de saída, ‘douta’, seja um valor desfasado
do valor inicial proveniente do ADC, ou seja, com atraso. Este sinal de saída da
memória foi depois adicionado ao sinal de saída do ADC.
Na figura 55, podemos verificar este comportamento. Em que se por exemplo o
endereço da memória estiver na posição do valor 19 (exemplo de um valor proveniente
do ADC), este valor estará ainda a ser lido pela memória. Enquanto o endereço do valor
18 já estará a ser escrito passando a ser este o valor de saída da memória. Isto é
processado sucessivamente pois o endereço é sempre incrementado por um contador. O
sinal final é então composto pelo valor atual do ADC mais o valor de saída da memória
que é diferente do atual, adicionando assim um atraso.
No excerto de código da figura 56, podemos verificar a implementação do
contador mencionado referente ao endereço da memória.

58
always @(posedge clk)
begin
if(~rst)
begin
delay_const <= 17'd40000;
rst_count <= 17'd0;
end
else
begin
if (rst_count == delay_const)
begin
rst_count <= 17'd0;
end
else
begin
rst_count <= rst_count + 17'd1;
end
end
end

Figura 56 - Implementação do contador para o efeito delay

O valor utilizado no contador corresponde a um valor de atraso de


aproximadamente 300 ms. Como a frequência de amostragem do sistema é de 130kHz,
este valor é facilmente calculado através da seguinte expressão:

Com esta implementação obteve-se bons resultados quer analisando o sinal quer
sonoramente. No entanto, foi implementado outro módulo bastante semelhante em que
foram geradas três memórias em vez de uma. As duas memórias adicionais possuem
parâmetros iguais à inicialmente utilizada e dois respetivos contadores para alterar o
endereço da memória. Os valores dos contadores de maneira a alterar os endereços são
diferentes para as três memórias mas no máximo de 64000 como definido.

59
always @(posedge clk)
begin
if(~rst)
begin
delay_const <= 17'd32000;
rst_count <= 17'd0;
end
else
begin
if (rst_count == delay_const)
begin
rst_count <= 17'd0;
end
else
begin
rst_count <= rst_count + 17'd1;
end
end
end

Figura 57 - Implementação do contador de uma segunda abordagem para o efeito


delay

Foram então utilizados três contadores diferentes. Na figura 57, podemos


observar o excerto de código correspondente a um dos contadores utilizados, este com
valor até 32000. Os outros foram implementados de maneira idêntica mas com valores
diferentes, um com valor de 48000 e outro com 64000. Estes valores possibilitaram
adicionar valores de atraso diferentes o que resultou numa abordagem mais agradável
sonoramente. Foram então obtidos valores de atraso apresentados nas seguintes
expressões:

60
Echo

Figura 58 – True dual port Ram para o efeito Echo

Outro dos efeitos implementados nesta dissertação foi o efeito Echo. Este é
bastante semelhante ao efeito delay já demonstrado. A grande diferença consiste no
tempo de atraso imposto neste efeito.
Em termos concretos de implementação também houve uma diferença pois ao
invés de ter sido utilizada uma single port Ram foi utilizada desta vez uma true dual
port Ram como pode-se observar na figura 58.
Relativamente a este tipo de memória, esta é praticamente igual à single port
Ram utilizada no efeito anterior, pois possui as mesmas entradas e saídas.

61
Figura 59 - Definição dos parâmetros do block memory generator para o efeito Echo

Como para o efeito delay o tamanho da palavra a utilizar foi de 24 bits, no


entanto para este caso a capacidade máxima da memória utilizada foi de 128k. Como
podemos verificar na figura 59.
Definidos os parâmetros foi essencial instanciar o módulo em questão como
pode-se visualizar no excerto de código da figura 60.

dualRam2 DualRam_Echo (
.clka(clk), // input clka
.rsta(~rst), // input rsta
.wea(1'b1 && rst), // input [0 : 0] wea
.addra(rst_count), // input [16 : 0] addra
.dina(ADCout), // input [23 : 0] dina
.douta(VibratoOut_wire), // output [23 : 0] douta
.clkb(clk), // input clkb
.rstb(~rst), // input rstb
.web(1'b1 && rst), // input [0 : 0] web
.addrb(rst_countb), // input [16 : 0] addrb
.dinb(ADCout), // input [23 : 0] dinb
.doutb(VibratoOut_wireb) // output [23 : 0] doutb
);

Figura 60 - Instanciação da dual port Ram para o efeito Echo

62
always @(posedge clk)
begin
if(~rst)
begin
delay_constb <= 17'd64000;
rst_countb <= 17'd0;
end
else
begin
if (rst_countb == delay_constb)
begin
rst_countb <= 17'd0;
end
else
begin
rst_countb <= rst_countb + 15'd1;
end
end
end

Figura 61 - Implementação do contador de 64k para o efeito Echo

Foram utilizados 2 contadores para este módulo um de 128k outro de 64k, como
podemos verificar nos excertos de código das figura 61 e 62.

begin
if(~rst)
begin
delay_const <= 17'd128000;
rst_count <= 17'd0;
end
else
begin
if (rst_count == delay_const)
begin
rst_count <= 17'd0;
end
else
begin
rst_count <= rst_count + 17'd1;
end
end
end

Figura 62 - Implementação do contador de 128k para o efeito Echo

Posto isto, esta abordagem permitiu atingir valores de atraso para o efeito Echo
presentes nas seguintes expressões:

63
Distorção

Figura 63 - Processo clipping

Implementados os efeitos delay e Echo procedeu-se então à implementação de um


dos mais conhecidos e preferidos efeitos pelos guitarristas amadores e profissionais, o
efeito distorção. Sendo este efeito bastante apreciado existem consequentemente tipos
de distorção diferentes de maneira a tentar satisfazer todos os gostos.
No que diz respeito à implementação do efeito distorção o objetivo consiste na
compressão dos picos da onda do sinal original e adicionar harmônicos, como já foi
referido anteriormente. Este processo é denominado clipping. Neste sentido, existem
duas abordagens diferentes, e são elas Hard-clipping e Soft-clipping. Estes dois
processos são normalmente utilizados para obter os efeitos distorção normal e overdrive
respetivamente. O efeito overdrive também designado como um tipo de distorção ou
variante deste, este possui uma compressão do som mais natural, o que torna este efeito
um pouco menos utilizado do que o efeito distorção. Pois, este é mais utilizado em
estilos música rock e em muitas variantes do mesmo.
Posto isto, procedeu-se então à implementação utilizando a abordagem do processo
hard-clipping. Para isso, seguiu-se o fluxograma presente na figura 64.

64
Figura 64 - Fluxograma do efeito Distorção

Seguindo então o fluxograma apresentado procedeu-se para a sua implementação


em verilog como podemos observar no excerto de código na figura 65.

assign DAC_in = (ADC_out[23]) ? negative_sat:


positive_sat;

assign positive_sat = (ADC_out[23:21]!=3'b000) ? 24'h1fffff:


ADC_out;

assign negative_sat = ADC_out & 24'h8fffff;

Figura 65 - Implementação do efeito Distorção com base em hard-clipping

65
assign DAC_in = (ADC_out[23:21]!=3'b000) ? 24'h1fffff:
{ADC_out[23:6],6’d0};

Figura 66 - Implementação do efeito Distorção com base em soft-clipping

Também foi implementada uma abordagem mais próxima do soft-clipping como


podemos verificar no excerto de código da figura 66.

Vibrato

Figura 67 - Algoritmo do efeito vibrato

Outro dos efeitos integrados nesta dissertação foi o efeito vibrato. A sua
implementação teve como base um algoritmo semelhante ao presente na figura 67.
O objetivo principal deste efeito consiste em atingir um atraso variável
permitindo obter um som aparentemente vibratório. Esta é a grande diferença
comparativamente ao efeito delay por exemplo, em que este possui um tempo de atraso
não variável no tempo. Para isso foi adicionada uma função seno ao atraso variável de
maneira a alcançar o efeito desejado.
Utilizando as potencialidades da linguagem de hardware verilog recorreu-se, tal
como para os efeitos delay, à geração de uma memória single port Ram,

66
dualRam DualRam_Vibrato (
.clka(clk), // input clka
.rsta(~rst), // input rsta
.wea(1'b1 && rst), // input [0 : 0] wea
.addra(rst_count), // input [15 : 0] addra
.dina(ADCout), // input [23 : 0] dina
.douta(VibratoOut_wire), // output [23 : 0] douta
.clkb(clk), // input clkb
.rstb(~rst), // input rstb
.web(1'b1 && rst), // input [0 : 0] web
.addrb(rst_countb), // input [15 : 0] addrb
.dinb(ADCout), // input [23 : 0] dinb
.doutb(VibratoOut_wireb) // output [23 : 0] doutb
);

Figura 68 - Instanciação da dual port Ram para o efeito vibrato

always @(posedge clk)


begin
if(~rst)
begin
delay_constb <= 16'd32000;
rst_countb <= 16'd0;
end
else
begin
if (rst_countb == delay_constb)
begin
rst_countb <= 16'd0;
end
else
begin
rst_countb <= rst_countb + 16'd1;
end
end
end

Figura 69 - Implementação do contador para o efeito vibrato

O contador utilizado para a memória usada neste módulo possui um valor de


32000 e pode ser observado na figura 69. Perante isto, o tempo de atraso induzido neste
efeito foi calculado através da seguinte expressão:

67
4.2.4. Módulo UART

Figura 70 - Formato dos dados do protocolo UART

De modo a que o sistema possa comunicar com o computador foi implementado


o módulo UART. Para isso foi utilizada a porta RS232 existente na placa de
desenvolvimento escolhida para esta dissertação que através de um cabo série permite a
desejada comunicação. Este módulo servirá como base da implementação de alto nível,
que será explicada mais à frente, com o objetivo de interagir com o utilizador.
O protocolo UART (Universal Asynchronous Receiver Transmitter) é um
componente de hardware que permite comunicações em formatos série assíncronas
entre dois dispositivos sem a necessidade de um dispositivo slave. A designação
universal indica que o formato dos dados e a velocidade de transmissão são parâmetros
configuráveis no entanto tem de haver coerência na configuração destes. O formato dos
dados a ser utilizada no protocolo UART pode ser observada na figura 70.
Neste formato é sempre utilizado inicialmente o start bit a nível lógico zero
depois seguem-se os bits de dados normalmente 8 bits do LSB para o MSB (podem ser
5 ou 8) e por fim stop bit também a nível lógico alto que também são configuráveis e
que tomar valores de 1, 1.5 ou 2. Opcionalmente pode-se utilizar o bit de paridade para
deteção de erros. Outro parâmetro que é essencial configurar é o baud rate, taxa de
transmissão.
O protocolo UART permite várias configurações no entanto foi escolhida uma
configuração pré-definida com 1 stop bit, 8 bits de dados, sem bit de paridade, 1 stop bit
e com baud rate de 9600.
Depois de estudado o protocolo e de definidos todos os parâmetros necessários
para o sistema em questão. Procedeu-se então para a implementação propriamente dita.

68
Primeiramente foi fundamental implementar a geração do baud rate deste módulo.
Como o valor pretendido para o baud rate é de 9600 e a frequência a utilizar é de
130kHz, frequência de amostragem do sistema, foi então essencial um acumulador para
este efeito. Antes disso, foi preciso calcular o valor a ser adicionado a esse acumulador
presente na seguinte expressão:

Após gerado o valor a ser adicionado no acumulador procedeu-se então à


geração da taxa de transmissão desejada de 9600. Este valor foi designado de BaudTick,
este será utilizado na receção e na transmissão da informação. A geração deste sinal
pode ser observada no excerto de código presente na figura 71.

always @(posedge clk)


begin
Baud8GeneratorAcc <= Baud8GeneratorAcc[Baud8GeneratorAccWidth-1:0]
+ Baud8GeneratorInc;
end
wire Baud8Tick = Baud8GeneratorAcc[Baud8GeneratorAccWidth];

Figura 71 - Geração do sinal BaudTick

Este módulo foi implementado com o intuito de, com a ajuda de uma aplicação,
ser possível para um utilizador interagir com o sistema podendo escolher os efeitos que
pretende usar bem como os parâmetros dos efeitos que pretender. Neste sentido, para
este módulo UART foram implementados dois módulos, transmissor e recetor, no
entanto chegou-se à conclusão de que apenas seria necessário implementar o módulo
recetor.

69
4.2.5. Escolha dos Efeitos

Figura 72 - Diagrama lógico da escolha dos efeitos

Depois de implementado o módulo UART foi igualmente fundamental


implementar a lógica por detrás deste módulo. Como já foi dito anteriormente, a lógica
deste módulo tem como objetivo permitir a interação com o utilizador a partir de uma
aplicação que será explicada mais à frente. Antes disso será importante explicar o estado
atual de todo o sistema, já com os efeitos, e toda a lógica que foi implementada de
maneira a que se pudesse escolher os efeitos tal como os seus parâmetros.
No diagrama da figura 72, é possível verificar como serão ativados os efeitos e
toda a lógica a implementar.
Como podemos ver foram implementados multiplexadores à entrada de cada
efeito. Para que quando for pretendido escolher os efeitos o valor destes
multiplexadores serão ativados. Ou seja, o valor do multiplexador correspondente ao
efeito escolhido terá como valor de nível lógico ‘1’. Se algum dos efeitos não tiver sido
ativado o valor do respetivo multiplexador terá como valor de nível lógico ‘0’, ficando
com o valor do proveniente do multiplexador anterior. Por fim, se nenhum dos efeitos
for escolhido os dados chegam ao DAC diretamente do ADC, isto é, o sinal obtido a
saída é o sinal ‘limpo’ sem efeitos.

70
teste_effect Vibrato(
.clk(LRCK_adc),
.rst(rst),
.ADCout(data_out_adc),
.DACin(vibrato_a)
);

always @(vibrato_a or data_out_adc or Enable_mux)


begin
if(~rst)
out_vibrato <= 23'b0;
else if ( Enable_mux[0] == 1'd1 )
out_vibrato <= vibrato_a;
else out_vibrato <= data_out_adc;
end

Figura 73 - Ativação/desativação do efeito vibrato

Como é possível verificar no excerto de código da figura 73, temos o exemplo


do caso da ativação/desativação do efeito vibrato. Depois de instanciado o módulo do
efeito vibrato foi então necessário implementar o respetivo multiplexador. Quando o
valor do índice do registo ‘Enable_mux’ correspondente ao efeito vibrato passar a nível
lógico ‘1’ este será ativado. Este também será o valor de entrada no módulo seguinte, o
módulo do efeito Echo. Senão o efeito vibrato não será ativado e o valor do registo
correspondente a este efeito terá valor ‘0’, isto faz com que o valor de entrada do efeito
Echo seja o valor proveniente do ADC, o sinal SDATA deste.
Isto vai de encontro ao que já foi referido anteriormente, caso o valor do índice
do registo do multiplexador correspondente ao efeito tenha o valor de ‘1’, este é ativado,
caso contrário este toma o valor proveniente do módulo anterior.

71
Figura 74 - Máquina de estados utilizada na escolha dos efeitos

Na máquina de estados presente na figura 74, é possível verificar a lógica a


seguir na escolha dos efeitos.
O estado inicial é o estado IDLE que é o estado “parado”, mudando de estado
caso seja lido algum caracter na porta série. Se esse valor for um ‘E’ passa ao estado
Enable Effects, neste estado serão ativados os efeitos pretendidos pelo utilizador. Para
isso será atualizado o registo Enable_mux, registo este utilizado nos multiplexadores
mencionados anteriormente, passando depois a estado IDLE de seguida. Caso seja lido
o caracter ‘D’ o registo Enable_mux será novamente atualizado com o objetivo desta
vez de desativar os efeitos. Por fim caso o valor lido na porta série pelo registo Rx_data,
seja o caracter ‘P’ serão atualizados os registos relativos aos parâmetros de cada um dos
efeitos.

72
IDLE:
begin
if( Rx_data == 8'b01000101 )
begin
state <= Enable_effects;
end
else
begin
if ( Rx_data == 8'b01000100)
begin
state <= Disable_effects;
end
else
begin
if (Rx_data == 8'b01010000)
begin
state <= sel_param;
end
else
state <= IDLE;
end
end
end

Figura 75 - Estado IDLE

É possível visualizar a implementação do estado IDLE no excerto de código


presente na figura 75.
Tal como os estados Enable_effects e Disable_effects presentes na figura 76 e o
estado ‘sel_param’ na figura 77.

Enable_effects:
begin
Enable_mux <= (Enable_mux | RxD_data);
state <= IDLE;
end
Disable_effects:
begin
Enable_mux <= (Enable_mux & ~RxD_data);
state <= IDLE;
end

Figura 76 - Estados Enable_effects e Disable_effects

73
sel_param:
begin
state <= IDLE;
if( Rx_data == 8'b01110110)
tempo_vib <= 16'd32000;
else
if( Rx_data == 8'b01010110)
tempo_vib <= 16'd64000;
else
if ( Rx_data == 8'b01101000)
tempo_echo <= 17'd64000;
else
if (Rx_data == 8'b01001000)
tempo_echo <= 17'd128000;
else
if(Rx_data == 8'b01100100)
tempo_delay <= 17'd64000;
else
if(Rx_data == 8'b01000100)
tempo_delay <= 17'd128000;
else
if(Rx_data == 8'b01110100)
begin
pos_value <= 24'h1fffff;
neg_value <= 24'h8fffff;
end
else
if(Rx_data == 8'b01010100)
begin
pos_value <= 24'h1fffff;
neg_value <= 24'h8fffff;
end
end

Figura 77 - Estado 'sel_param'

74
4.3. Implementação do Software

Figura 78 - Aspeto da aplicação 'Audio Effects Processor'

Neste capítulo é abordada a implementação do software utilizado nesta


dissertação. Tem-se como objetivo principal interagir com o utilizador e de mostrar a
aplicabilidade deste projeto num sistema On/off mais apropriado para um guitarrista,
como uma pedaleira multi-effect.
Mais concretamente é explicado o desenvolvimento de uma aplicação user-
friendly, intuitiva e de fácil utilização desenvolvida na linguagem orientada a objetos
C#. O aspeto principal da aplicação implementada através de Windows forms pode ser
visualizado na figura 78.
Nesta aplicação é possível escolher os efeitos, ativa-los e desativa-los assim que
o utilizador pretender. Também tem a possibilidade de escolher os parâmetros dos
efeitos, entre duas opções para cada efeito.
O fluxograma presente na figura 79, ajuda a perceber o comportamento da
aplicação desenvolvida. Quando esta é executada a porta série é inicializada com a
configuração definida previamente, baud rate de 9600, 1 start bit, 8 bits de dados e 1
stop bit. Depois é testada a condição de reset a porta série é novamente inicializada e os
textos dos botões ficam com os valores por defeito. Depois são testados os botões
relativos aos efeitos, se algum deles for pressionado, o caracter ‘E’ é enviado pela porta
série, correspondente a ‘0x45’ em hexadecimal, fazendo assim com que o sistema entre

75
no estado ‘Enable_effects’. De seguida é enviado o caracter correspondente ao efeito,
por exemplo no caso do efeito Delay é enviado o valor 00000100 que corresponde a
‘0x04’ em hexadecimal, este valor será depois atualizado com o registo de escolha dos
efeitos Enable_mux, já referido anteriormente. Também é alterado o texto do botão
pressionado passando a ‘Disable “nome_do_efeito”’.
Após, é possível desativar algum dos efeitos previamente ativados e, nessa
situação é enviado o caracter ‘D’ fazendo com que o sistema passe para o estado
‘Disable_effects’. Tal como para o estado anterior é enviado o caracter correspondente
ao efeito desativado e comparado também com o registo de escolha dos efeitos,
Enable_mux. A qualquer altura é igualmente possível ativar a opção Reset.

Figura 79 - Fluxograma da aplicação

76
Capítulo 5

Resultados
Neste capítulo é possível verificar os resultados da implementação do processador
de efeitos. Será possível verificar os resultados do funcionamento do hardware, alguns
resultados em simulação bem como resultados experimentais. Os resultados simulados
foram conseguidos a partir da ferramenta da ISim da Xilinx. Enquanto os resultados
experimentais foram todos obtidos através de testes efetuados com guitarra elétrica, em
que foram gravadas as formas de ondas resultantes.

5.1. Resultados do Hardware


Em relação aos resultados de hardware é importante demonstrar os resultados dos
testes realizados ao hardware. Estes foram efetuados com o objetivo de comprovar o
bom funcionamento do ADC e DAC, correspondentes aos sistemas de aquisição e
reprodução do sinal respetivamente. Estes testes foram gerados com a ajuda da
ferramenta disponível no ISE da Xilinx, Chipscope. Esta ferramenta permite visualizar
os sinais provenientes do FPGA, o que possibilitou adquirir os dados à saída dos
módulos do ADC e DAC.
Nas figuras 80 e 81, é possível observar resultados de testes efetuados ao ADC,
ou seja, o sinal proveniente do módulo recetor. Nestes testes foram utilizados sinais de
entrada de 127Hz de frequência e de 200mV e 300mV de valor de pico respetivamente.
Estes sinais foram produzidos através de um gerador de sinais.

77
Teste ADC
127Hz - 200mV
2500000
2000000
1500000
1000000
500000
0
-500000 0 200 400 600 800 1000 1200

-1000000
-1500000
-2000000
-2500000

Figura 80 - Resultado de teste efetuado ao ADC – 200mV

Teste ADC
127Hz - 300mV
4000000

3000000

2000000

1000000

0
0 200 400 600 800 1000 1200
-1000000

-2000000

-3000000

-4000000

Figura 81 - Resultado de teste efetuado ao ADC - 300mV

78
Teste DAC
127Hz - 300mV
400000

300000

200000

100000

647

837
1
39
77
115
153
191
229
267
305
343
381
419
457
495
533
571
609

685
723
761
799

875
913
951
989
-100000

-200000

-300000

-400000

Figura 82 - Resultado de teste efetuado ao DAC

Relativamente ao sistema de conversão e reprodução do sinal, também foram


efetuados testes ao DAC. Na figura 82, é possível observar a resposta deste hardware
com um sinal de entrada de 127Hz e 300mV de valor de pico.

5.2. Resultados simulados


Com o intuito de verificar o funcionamento do hardware foi utilizada a ferramenta
disponível no ISE da Xilinx, ISim.
De maneira a verificar a implementação do protocolo I2S necessário para o
funcionamento do hardware foram geradas simulações tanto para o sistema de
aquisição como para o sistema de conversão e reprodução do sinal. Na figura 83, pode-
se visualizar o comportamento dos sinais correspondentes ao ADC.

79
Figura 83 - Resultado em simulação do comportamento do ADC

É possível verificar que os 24 bits são enviados em cada semi ciclo do sinal de
relógio LRCK, sendo que o MSB é enviado no semi ciclo seguinte.
Quanto ao DAC também foi efetuada uma simulação para verificar o funcionamento
do protocolo.

Figura 84 - Resultado em simulação do comportamento do DAC

Em relação aos efeitos implementados a melhor maneira de verificar os resultados


foi através do som proveniente do amplificador. No entanto, para o efeito delay foi
gerada uma simulação como pode-se observar na figura 85.

80
Figura 85 - Resultado em simulação do comportamento do efeito delay

O sinal ‘DACin’ é formado pela soma dos dados provenientes do ADC, ‘ADCout’,
com o atraso oriundo da memória utilizada para o efeito, ‘DelayOut’. O valor do atraso
utilizado foi de 100, este valor foi utilizado apenas para facilitar a visualização da
simulação.

5.3. Resultados Experimentais


Relativamente aos efeitos implementados foi essencial obter os resultados
destes. Foram gravados os sinais provenientes do amplificador e convertidos em formas
de onda através de uma ferramenta de edição de áudio.
Na figura 86, pode-se visualizar o resultado do efeito delay. O resultado
apresentado provém da abordagem com as três memórias, como foi referido
anteriormente.

81
Figura 86 - Resultado do efeito delay - 1ª abordagem

Por outro lado, na figura 87, é possível visualizar o efeito delay implementado
com recurso à abordagem com uma memória.

Figura 87 - Resultado do efeito delay - 2ª abordagem

82
Figura 88- Resultado do efeito Echo

Na figura 88, é então possível verificar o resultado do efeito Echo. Por fim,
pode-se observar o resultado do efeito distorção na figura 89. O sinal obtido provém do
processo de implementação, hard-clipping.

Figura 89 - Resultado do efeito Distorção (hard-clipping)

83
5.4. Resultados dos custos do projeto
Depois de realizados todos os testes e de apresentados os respetivos resultados,
tornou-se essencial fazer uma comparação. Comparar os custos deste projeto com um
produto existente no mercado, o mais equivalente possível. Foi então necessário
verificar os custos envolventes na criação das placas criadas para o ADC e DAC, bem
como escolher o FPGA com menor capacidade possível desde que suporte os requisitos
do projeto em questão. De salientar, que a placa de desenvolvimento Virtex-5 utilizada
nesta dissertação, foi usada pela sua disponibilidade e não pela sua capacidade, pois
assim esta escolha teria sido considerada overkill. Para isso, foi então importante
analisar a ocupação do projeto no FPGA utilizada para poder ser possível escolher uma
solução de custo mais reduzido.
Na figura 90, pode-se observar os recursos utilizados no que diz respeito à ocupação
da placa.

84
Figura 90 - Recursos utilizados no FPGA

Posto isto, podemos verificar que os recursos utilizados não atingem a


capacidade total do FPGA. Será então possível, encontrar um FPGA com menor
capacidade, desde que possua os recursos exigidos, tornando assim este projeto numa
solução de menor custo.
Uma maneira de reduzir ainda mais os recursos utilizados, seria tentar otimizar
ou até se possível usar menos blocos de memória nos efeitos implementados para que
fosse possível escolher um FPGA o mais económico possível.
Serão agora apresentadas duas soluções, em que uma delas apresenta-se um
produto com capacidade semelhante a utilizada no produto, mas mais económica. A
outra solução passa por um produto de custo inferior em que a capacidade total do
FPGA é a menor possível, desde que esteja dentro da capacidade necessária para o bom
funcionamento do design atual.

85
1ª Solução:

Figura 91 - FPGA Nexys 7

Como primeira solução foi selecionado o FPGA Nexys-Artix 7 [30], o preço


situa-se aproximadamente entre os 100€-220€, mais acessível que a virtex 5 utilizada
nesta dissertação, pois possui menos recursos e periféricos.
Este FPGA assemelha-se, no que a recursos diz respeito, ao utilizado neste
projeto, possui 6 PLLs,4.860 KBits de blocos de Ram, 15k de elementos lógicos entre
outras.

2ª Solução:

Figura 92 - Virtex-5

Outra solução passa por utilizar um FPGA da mesma família do utilizado nesta
dissertação, virtex 5 – XC6LX75T [31]. Este possui cerca 11k de blocos lógicos e
aproximadamente 3170k de blocos de memória Ram. Este valor está próximo mas é

86
superior ao número de bolocos utilizado por este projeto, cerca de 3168k, como
podemos confirmar na figura 90.
O preço deste FPGA ronda os 80€, o que torna esta solução bastante mais
acessível que qualquer outra e com potencial para competir com os processadores de
efeitos existentes no mercado.
Antes de poder fazer a comparação, foi também necessário analisar os custos
relativamente à criação das placas do ADC e DAC, correspondentes aos sistemas de
aquisição e reprodução do sinal, respetivamente.

Custos da PCB do ADC:


 ~12€

Custos da PCB do DAC:


 ~8€

Lista dos componentes:

Condensadores Resistências
1uF 267k
0.01uF 10k
470pf
100k
2200pf
560
0.1uf 634
3.3uf 150
4700pf
90.9
4.7uf 22.1
Ferrite: 4.7uH
5.1

Tabela 4 – Lista de componentes

Custo total dos componentes: ~1,20€

87
Figura 93 - KORG Pandora

Posto isto, depois de apresentadas soluções e os custos envolventes para este


projeto foi possível fazer a comparação com produtos existentes no mercado. Como
objeto de comparação escolhemos um produto existente no mercado equivalente, ou o
mais próximo possível com o implementado nesta dissertação. De seguida, serão
apresentados dois produtos.
Como primeiro objeto de comparação, deparamo-nos com o seguinte produto,
Korg Pandora Mini PXMINI Guitar Multi-Effects Processor [32], como podemos
observar na figura 93.
Este produto é um processador multi-effect portátil. Este produto da marca
KORG [33], consegue utilizar sete efeitos em simultâneo e possui um preço a rondar os
75€. Este produto é um modelo portátil, no entanto, de capacidade e número de efeitos
bastante semelhante ao implementado nesta dissertação. Iremos agora fazer uma
comparação com outro produto com mais funcionalidades.

88
Figura 94 - BOSS ME-25

Então uma das outras possibilidades é o produto da marca BOSS, o modelo ME-
25 [34]. Este possui 31 efeitos diferentes e pode ser adquirida por um valor próximo de
150€.
Posto isto, é possível verificar que o sistema desenvolvido nesta dissertação seria
uma solução viável, com custos próximos dos produtos existentes no mercado. No
entanto, se esta solução fosse otimizada o mais possível poderia tornar-se numa solução
mais acessível.

89
90
Capítulo 6

Conclusão e trabalho futuro


Nesta dissertação foi realizada a implementação de um processador de efeitos digital
em FPGA aplicado para guitarra elétrica.
Os algoritmos que foram alvos de estudo e apresentados nesta dissertação
permitiram implementar alguns efeitos dentro do que era pretendido. Com recurso à
idealização e criação do interface analógico foi possível efetuar a aquisição do sinal e a
reprodução do mesmo. Também com recurso a uma aplicação de software, foi possível
mostrar a aplicabilidade do processador desenvolvimento num sistema On/Off, como
uma pedaleira.
Os resultados obtidos até então foram bastante promissores provando a viabilidade
dos algoritmos implementados. Estes resultados foram considerados viáveis tanto
através das formas de onda obtidas do sinal de saída, como pela boa qualidade de som
apresentada. No entanto, o sistema é limitado devido ao número reduzido de efeitos
comparativamente aos sistemas semelhantes existentes no mercado. O sistema atual
também não foi implementado como um protótipo integrando todos os subsistemas em
uma plataforma acessível e designada unicamente para esta ideia. Também possui um
pequeno ruído indesejado no efeito distorção.
De maneira a melhorar o sistema implementado, seria necessário adicionar efeitos e
integrar o sistema, em algo mais próximo de um produto final. Seria essencial possuir
um pedal ou vários pedais, de maneira a que fosse possível o utilizador escolher e/ou
mudar de efeitos quase instantaneamente e sempre que pretende-se faze-lo. Em relação
à implementação dos atuais efeitos, seria interessante ter em conta uma otimização do
design atual, pelo menos no que diz respeito à utilização das memórias virtuais
presentes em alguns dos efeitos. O objetivo principal seria reduzir a ocupação dos
recursos, se assim fosse possível. Outra das possibilidades seria recorrer a outro tipo de
abordagem na implementação dos efeitos, no que diz respeito ao armazenamento das
amostras do sinal de entrada. Esta observação também deveria ser algo a ter em atenção
na implementação de novos efeitos.

91
92
Bibliografia
[1] M. H. S. M. a. U. Z. K. Dempwolf, “GEB1 - A ROBUST DSP PLATFORM FOR
AUDIO AND GUITAR SIGNAL PROCESSING IN EDUCATION,” Proceedings of the
4th European DSP in Education and Research Conference, pp. 11-14.

[2] BOSS, “BOSS,” [Online]. Available:


http://www.bossus.com/gear/productdetails.php?ProductId=127.

[3] BOSS. [Online]. Available:


http://www.bossus.com/gear/productdetails.php?ProductId=137.

[4] BOSS. [Online]. Available:


http://www.bossus.com/gear/productdetails.php?ProductId=134.

[5] BOSS. [Online]. Available:


http://www.bossus.com/gear/productdetails.php?ProductId=1058.

[6] BOSS. [Online]. Available:


http://www.bossus.com/gear/productdetails.php?ProductId=1001.

[7] J. A. L. Guerra, “Digital Audio Effects Based On Delay and Implementation on FPGA”.

[8] S. M. I. M. J. M. M. I. a. M. D. V. M. I. Juan J. Rodriguez-Andina, “Features, Design


Tools, and Application Domains of FPGAs,” IEEE TRANSACTIONS ON
INDUSTRIAL ELECTRONICS, VOL. 54, NO. 4, pp. 1810-1823, 2007.

[9] A. P. T. f. X. Inc., “www.xilinx.com”.

[10] F. C. a. A. f. Altera, www.altera.com.

[11] K. B. Mark Kahrs, Applications of Digital Signal Processing to Audio and Acoustics
(The International Series in Engineering and Computer Science), Springer, 2001.

[12] "ERZETICH," [Online]. Available: http://www.erzetich-audio.com/knowledgebase-05-


time-vs-frequency.

[13] S. J. Orfanidis, Introduction to Signal Processing, Pearson Education, Inc, 2009.

[14] U. Zölzer, DAFX - Digital Audio Effects, 2002.

[15] M. V. Paolo Prandoni, Signal Processing for Communications, EFPL Press, 2008.

[16] B. Paillard, An Introduction To Digital Signal Processors.

[17] S. W. Smith, Digital Signal Processing, USA: Newnes, 2003.

93
[18] “Analog Devices,” http://www.analog.com.

[19] J. K. M. I. R. P.-K. M. G. M. Miroslav Malko, “Implementation of digital audio effects


for electric guitar on DSP platform,” 19th Telecommunications forum TELFOR 2011,
pp. 1099-1102, 2011.

[20] N. Instruments, “www.ni.com”.

[21] "TEWM," [Online]. Available: http://www.co-


bw.com/Guitar_amplifiers_overdrive_distortion.htm.

[22] "CIRRUS LOGIC," [Online]. Available: http://www.cirrus.com.

[23] "CIRRUS LOGIC," [Online]. Available:


http://www.cirrus.com/en/pubs/proDatasheet/CS5340_F2.pdf.

[24] "I2SBUS," [Online]. Available:


https://www.sparkfun.com/datasheets/BreakoutBoards/I2SBUS.pdf.

[25] "CIRRUS LOGIC," [Online]. Available:


http://www.cirrus.com/en/pubs/proDatasheet/CS4334-5-8-9_F6.pdf.

[26] "Xilinx Virtex 5," [Online]. Available:


http://www.xilinx.com/support/documentation/data_sheets/ds100.pdf.

[27] [Online]. Available: http://www.cirrus.com/jp/pubs/rdDatasheet/CDB5340.pdf.

[28] "Eagle," [Online]. Available: http://www.cadsoftusa.com/.

[29] "PLL Xilinx," [Online]. Available:


http://www.xilinx.com/support/documentation/ip_documentation/pll_module.pdf.

[30] "Digilent Inc," [Online]. Available:


https://www.digilentinc.com/Products/Detail.cfm?NavPath=2,400,1184&Prod=NEXYS4.

[31] [Online]. Available: http://uk.farnell.com/xilinx/xc5vsx95t-1ffg1136c/fpga-virtex-5-95k-


cells-1136fbga/dp/1762508.

[32] [Online]. Available: http://www.guitarcenter.com/Korg-Pandora-Mini-PXMINI-Guitar-


Multi-Effects-Processor-H70754-i1746466.gc.

[33] [Online]. Available: http://www.korg.com/.

[34] [Online]. Available: http://www.sweetwater.com/store/detail/ME25/.

94

You might also like