Professional Documents
Culture Documents
Escola de Engenharia
outubro de 2013
Universidade do Minho
Escola de Engenharia
Tese de Mestrado
Ciclo de Estudos Integrados Conducentes ao Grau de
Mestre em Engenharia Eletrónica Industrial e Computadores
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.
iii
iv
Resumo
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.
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.
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].
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.
3
Figura 5 - Exemplo de pedaleira multi-effect (ME-70)
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
6
1.4. Estrutura da dissertação
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
9
Figura 7- Frequências audíveis
10
Figura 8 - Frequências típicas de notas musicais
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.
12
Processamento dos sinais digitais
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,
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.
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
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
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
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
20
2.3.5. 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
22
Figura 18 - Exemplo de circuito lógico do efeito vibrato
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
25
Figura 21 - Diagrama geral do sistema
26
3.2. Características da guitarra elétrica
27
Figura 23 - Forma de onda da nota Lá da guitarra
28
Figura 25 - Forma de onda da nota Sol da guitarra
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.
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
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
32
3.3.2. Sistema de conversão e reprodução do
sinal
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.
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
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:
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
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
40
Resultado 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
DAC Board
43
Resultado PCB 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
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.
46
Figura 40 - Configurações do protocolo I2S
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
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()
);
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
51
Figura 46 - Diagrama temporal do protocolo Left-Justified
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
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
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
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
55
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.
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
);
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
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
60
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
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
);
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
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
Posto isto, esta abordagem permitiu atingir valores de atraso para o efeito Echo
presentes nas seguintes expressões:
63
Distorção
64
Figura 64 - Fluxograma do efeito Distorção
65
assign DAC_in = (ADC_out[23:21]!=3'b000) ? 24'h1fffff:
{ADC_out[23:6],6’d0};
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
);
67
4.2.4. Módulo UART
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:
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
70
teste_effect Vibrato(
.clk(LRCK_adc),
.rst(rst),
.ADCout(data_out_adc),
.DACin(vibrato_a)
);
71
Figura 74 - Máquina de estados utilizada na escolha 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
Enable_effects:
begin
Enable_mux <= (Enable_mux | RxD_data);
state <= IDLE;
end
Disable_effects:
begin
Enable_mux <= (Enable_mux & ~RxD_data);
state <= IDLE;
end
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
74
4.3. Implementação do Software
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.
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.
77
Teste ADC
127Hz - 200mV
2500000
2000000
1500000
1000000
500000
0
-500000 0 200 400 600 800 1000 1200
-1000000
-1500000
-2000000
-2500000
Teste ADC
127Hz - 300mV
4000000
3000000
2000000
1000000
0
0 200 400 600 800 1000 1200
-1000000
-2000000
-3000000
-4000000
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
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.
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.
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.
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.
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
85
1ª Solução:
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.
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
87
Figura 93 - KORG Pandora
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
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.
[7] J. A. L. Guerra, “Digital Audio Effects Based On Delay and Implementation on FPGA”.
[11] K. B. Mark Kahrs, Applications of Digital Signal Processing to Audio and Acoustics
(The International Series in Engineering and Computer Science), Springer, 2001.
[15] M. V. Paolo Prandoni, Signal Processing for Communications, EFPL Press, 2008.
93
[18] “Analog Devices,” http://www.analog.com.
94