módulo de processamento de sinal para um amplificador de ...agradecimentos a conclusao de uma tese...
TRANSCRIPT
Módulo de Processamento de Sinal para um Amplificadorde Áudio Digital Utilizando Modulação CLICK
João Maria Sousa Paulino Líbano Monteiro
Dissertação para obtenção do grau de Mestre em
Engenharia Electrotécnica e de Computadores
Orientador: Prof. Gonçalo Nuno Gomes Tavares
Júri
Presidente: Professor Horácio Cláudio de Campos NetoOrientador: Professor Gonçalo Nuno Gomes TavaresVogal: Professor Fernando Manuel Duarte Gonçalves
Novembro de 2015
ii
Agradecimentos
A conclusao de uma tese marca o fim de uma etapa marcante na vida profissional e pessoal de
cada um. Desejo por isso agradecer a um conjunto de pessoas que ao longo destes anos de formacao,
e principalmente no perıodo correspondente a dissertacao, foram acompanhando mais de perto o meu
percurso.
Em primeiro lugar, gostaria de agradecer ao professor Goncalo Tavares a sua orientacao, a dispo-
nibilidade demonstrada e conhecimento partilhado. O seu contributo foi vital para este trabalho, sem o
qual nao teria sido concluıdo.
Em segundo lugar, um agradecimento especial ao Tiago Domingues, cujo trabalho anterior cons-
tituiu o ponto de partida e apoio fundamental para a dissertacao. A sua disponibilidade e paciencia,
particularmente para trabalho conjunto de minucia, revelaram-se valiosas e fundamentais.
A minha famılia, nomeadamente aos meus pais, irmaos, avos, primos e tios, o meu sincero agrade-
cimento pelo sustento dado em todas as fases do curso, muitas vezes de forma inconsciente e invisıvel,
nao so pelo gaudio em momentos de alegria como tambem pela compreensao em momentos menos
bons.
Por ultimo, mas nao em ultimo, um grande agradecimento a todos os meus amigos que, atraves
do trabalho ou convıvio, de varias formas e em diferentes alturas - que sao tantas, e tantos nomes a
elas associados que se tornam inumeraveis -, constituıram fontes de jubilo, inspiracao e sustentaculo,
proporcionando aprendizagens diversas que certamente ficarao para a vida.
iii
iv
Resumo
No contexto de amplificacao de sinais de audio para andares de classe D, a modulacao Click cons-
titui uma alternativa as modulacoes ja existentes, nomeadamente modulacao por largura de impulso e
modulacao Sigma-Delta. O espectro da onda binaria produzida possui bastantes vantagens em relacao
ao espectro das modulacoes anteriormente referidas, tais como a ausencia de distorcao na banda de
interesse do sinal e uma gama de frequencias sem conteudo informativo entre a banda de base e as
componentes de alta frequencia. Esta banda de guarda facilita muito a filtragem, dado que permite que
o projecto do filtro passa-baixo de desmodulacao possua uma banda de transicao maior. Adicional-
mente, o sinal possui tambem uma baixa frequencia de comutacao, da ordem de grandeza de metade
da frequencia de Nyquist do sinal de entrada. Este desempenho e conseguido a custa de processa-
mento de sinal bastante exigente.
Nesta dissertacao e descrita um modelo da modulacao Click em linguagem C, com operandos de
vırgula fixa, num trabalho que teve por base um algoritmo realizado em MATLAB. O processamento e
feito recorrendo a leitura de um ficheiro que contem amostras do sinal de entrada, e apresenta como
resultado um outro ficheiro que contem um conjunto de ciclos de trabalho de uma onda modulada em
largura de impulso.
Os resultados obtidos, que foram comparados com os resultados do modelo MATLAB, revelaram-se
bastante satisfatorios, tanto para sinais sinusoidais como para sinais multi-tom. Os espectros dos varios
sinais produzidos, principalmente o da onda modulada em largura de impulso gerada a partir dos ciclos
de trabalho, revelaram nao so o correcto funcionamento do algoritmo como validaram a sua utilizacao
em contextos de audio de alta resolucao.
Palavras-chave: Modulacao Click, Audio, Processamento Digital de Sinais, Vırgula Fixa
v
vi
Abstract
In the context of class D audio amplifiers, Click modulation is presented as an alternative to exis-
ting modulations, namely Pulse-Width Modulation and Sigma-Delta Modulation. The spectrum of the
resulting binary wave carries several benefits in comparison with the spectra of the previous referred
modulations, such as a distortion-free baseband and a guard-band between the baseband and the high
frequency components. In addition, the switching frequency of the signal is considerably low, its order of
magnitude being the same as half of the input signal’s Nyquist frequency. Such performance is obtained
at the cost of a complex signal processing.
This thesis comprises a description of a Click modulation model in C programming language, with
fixed-point operands, whose work was based in a MATLAB algorithm implementation. The signal pro-
cessing unit reads the input signal file and produces a set of duty cycles of a pulse-width modulated
wave that are written to another file.
The obtained results, which were compared with those of the MATLAB model, were deemed substan-
tially satisfactory, with both purely sinusoidal and multi-tone inputs. The spectra of the various generated
signals, namely the pulse-width modulated synthesized from the duty cycles, not only proved the correct
algorithm operation but also validated its use in the context of high-definition audio.
Keywords: Click Modulation, Audio, Digital signal Processing, Fixed Point
vii
viii
Conteudo
Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii
Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii
Lista de Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi
Lista de Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Lista de Acronimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
1 Introducao 1
1.1 Motivacao e enquadramento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Metodologia proposta e objectivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Estrutura do documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Modulacao Click 5
2.1 Aspectos teoricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Transformada de Hilbert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.3 Modulador exponencial analıtico e filtragem . . . . . . . . . . . . . . . . . . . . . . 9
2.1.4 Modulador em quadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.5 Passagem por zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2 Comparacao com outras modulacoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.2 Modulacoes PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.3 Modulacao Sigma-Delta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.4 Conclusoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Estado da arte 20
3.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Modulacao Click em software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.3 Modulacao Click em hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.4 Modelo MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4.2 Transformada de Hilbert e interpolacao . . . . . . . . . . . . . . . . . . . . . . . . 28
ix
3.4.3 Modulador exponencial analıtico e filtragem . . . . . . . . . . . . . . . . . . . . . . 29
3.4.4 Modulador em quadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4.5 Passagem por zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4 Modelo desenvolvido 33
4.1 Plataforma de desenvolvimento e estrutura do programa . . . . . . . . . . . . . . . . . . . 33
4.2 Operandos de vırgula fixa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 Operacoes de vırgula fixa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.4 Aritmetica dos sinais de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.5 Transformada de Hilbert e interpolacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.6 Modulador exponencial analıtico e filtragem . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.7 Modulador em quadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.8 Passagem por zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.8.1 Aspectos gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.8.2 Polinomio interpolador de Lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.8.3 Metodo da bisseccao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5 Resultados 49
5.1 Introducao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.2 Transformada de Hilbert e interpolacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3 Modulador exponencial analıtico e filtragem . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.4 Modulador em quadratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.5 Passagem por zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.6 Outros sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.7 Consideracoes finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6 Conclusoes 63
6.1 Trabalho desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.2 Trabalho futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Bibliografia 66
A Apendice 67
A.1 Estrutura do programa em C (pseudo-codigo) . . . . . . . . . . . . . . . . . . . . . . . . . 67
x
Lista de Tabelas
4.1 Exemplos de multiplicacao em vırgula fixa: combinacoes de formatos de operandos e
respectivos resultados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 Ficheiros de entrada do sistema e respectivos formatos em vırgula fixa. . . . . . . . . . . 38
5.1 Erros absolutos entre resultados do modelo em C e do modelo em MATLAB. . . . . . . . 61
5.2 SNR e THD do modelo em C e do modelo em MATLAB. . . . . . . . . . . . . . . . . . . . 61
xi
xii
Lista de Figuras
2.1 Esboco do espectro de um sinal q(t) gerado pela CM [Oliva et al., 2005]. . . . . . . . . . 5
2.2 Cadeia de processamento da CM - teoria [Oliva et al., 2005]. . . . . . . . . . . . . . . . . 6
2.3 Cadeia de processamento da CM - hardware. . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Modulo da transformada de Fourier de f(t): exemplo [Oliva et al., 2005]. . . . . . . . . . . 7
2.5 Esquema do bloco do calculo de fA(t) [Oliva et al., 2005]. . . . . . . . . . . . . . . . . . . 7
2.6 Modulo da transformada de Fourier de f(t) [Oliva et al., 2005]. . . . . . . . . . . . . . . . 8
2.7 Modulo da transformada de Fourier dos varios sinais envolvidos na criacao de fA(t) [Oliva
et al., 2005]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.8 Esquema do bloco AEM [Oliva et al., 2005]. . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.9 Modulo da transformada de Fourier de z(t) [Oliva et al., 2005]. . . . . . . . . . . . . . . . 10
2.10 Modulo da transformada de Fourier de zf (t) [Oliva et al., 2005]. . . . . . . . . . . . . . . . 10
2.11 Esquema do bloco Modulador em quadratura [Oliva et al., 2005]. . . . . . . . . . . . . . . 11
2.12 Modulo da transformada de Fourier de s(t) [Oliva et al., 2005]. . . . . . . . . . . . . . . . 12
2.13 Esquema do bloco Passagem por zero [Oliva et al., 2005]. . . . . . . . . . . . . . . . . . . 13
2.14 Modulo da transformada de Fourier de u(t) [Oliva et al., 2005]. . . . . . . . . . . . . . . . 13
2.15 Modulo da transformada de Fourier de jlog[u(t)] [Oliva et al., 2005]. . . . . . . . . . . . . 13
2.16 Caracterıstica do filtro passa-baixo e modulo da transformada de Fourier de jlog[u(t)]
[Oliva et al., 2005]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.17 Esboco de alguns sinais da CM [Oliva et al., 2005]. . . . . . . . . . . . . . . . . . . . . . 14
2.18 Circuito de implementacao da UPWM [Domingues et al., 2015]. . . . . . . . . . . . . . . 15
2.19 Espectro de uma onda UPWM com entrada sinusoidal de 1 kHz [Domingues et al., 2015]. 16
2.20 Circuito de implementacao da NPWM [Domingues et al., 2015]. . . . . . . . . . . . . . . 16
2.21 Espectro de uma onda NPWM com entrada sinusoidal de 6 kHz [Domingues et al., 2015]. 17
2.22 Espectro de uma onda NPWM com entrada sinusoidal de 6 kHz [Domingues et al., 2015]. 17
2.23 Esquema da modulacao Σ∆ de primeira ordem. . . . . . . . . . . . . . . . . . . . . . . . 18
3.1 Modulo da transformada de Fourier de q(t) (Oliva et al.). . . . . . . . . . . . . . . . . . . . 21
3.2 Modulo da transformada de Fourier de q(t) (Stefanazzi et al.). . . . . . . . . . . . . . . . . 22
3.3 Modulo da transformada de Fourier de q(t) desmodulado: medicao experimental (Stefa-
nazzi et al.). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4 Modulo da transformada de Fourier de q1(t) (Stefanazzi et al.). . . . . . . . . . . . . . . . 23
xiii
3.5 Modulo da transformada de Fourier de x2A(n) (Stefanazzi et al.). . . . . . . . . . . . . . . 24
3.6 Modulo da transformada de Fourier de q2(t) (Stefanazzi et al.). . . . . . . . . . . . . . . . 24
3.7 Modulo da transformada de Fourier de q(t): 1a fase (simulacao, resolucao de 16 bit)
(Streitenberger and Mathis). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.8 Modulo da transformada de Fourier de q(t): 1a fase (medicao experimental, resolucao de
11 bit) (Streitenberger and Mathis). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.9 Modulo da transformada de Fourier de q(t): 2a fase, medicao experimental, resolucao de
10 bit (Streitenberger et al.). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.10 Modulo da transformada de Fourier de q1(t): medicao experimental, resolucao de 13 bit
(Sozanski). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.11 Modulo da transformada de Fourier de q2(t): medicao experimental, resolucao de 13 bit
(Sozanski). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.12 Modulo da resposta em frequencia do filtro com coeficientes hLP (n). . . . . . . . . . . . . 29
3.13 Erro entre o valor real e aproximado de ez. . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.14 Modulo da transformada de Fourier de q(t): simulacao do modelo em MATLAB (Domin-
gues and Braga). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.1 Esquema de implementacao da CM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2 Esquema de representacao em vırgula fixa. . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 Esquema de implementacao do bloco da transformada de Hilbert e interpolacao. . . . . . 38
4.4 Modulo da resposta em frequencia de h1(n). . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5 Modulo da resposta em frequencia de h2(n). . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.6 Esquema da implementacao do bloco AEM. . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.7 Funcao de transferencia do filtro passa-baixo pos AEM. . . . . . . . . . . . . . . . . . . . 42
4.8 Esquema de implementacao do bloco modulador em quadratura. . . . . . . . . . . . . . . 42
4.9 Esquema de implementacao do bloco passagem por zero. . . . . . . . . . . . . . . . . . 43
4.10 Amostras de s(n) (vermelho) e cos Ωpn (azul): ampliacao de exemplo. . . . . . . . . . . . 44
4.11 Estudo de agrupamentos diferentes de l−1. . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.12 Estudo de agrupamentos diferentes de l0. . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.13 Estudo de agrupamentos diferentes de l1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.14 Estudo de agrupamentos diferentes de l2. . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1 Modulo da transformada de Fourier do sinal de entrada (≈ 1 kHz). . . . . . . . . . . . . . 49
5.2 Modelo em C: modulo da transformada de Fourier de f(n) (≈ 1 kHz). . . . . . . . . . . . 50
5.3 Modelo em MATLAB: modulo da transformada de Fourier de f(n) (≈ 1 kHz). . . . . . . . 51
5.4 Modelo em C: modulo da transformada de Fourier de f(n) (≈ 1 kHz). . . . . . . . . . . . 51
5.5 Modelo em MATLAB: modulo da transformada de Fourier de f(n) (≈ 1 kHz). . . . . . . . 51
5.6 Modelo em C: modulo da transformada de Fourier de x(n) (≈ 1 kHz). . . . . . . . . . . . 52
5.7 Modelo em MATLAB: modulo da transformada de Fourier de x(n) (≈ 1 kHz). . . . . . . . 52
5.8 Modelo em C: modulo da transformada de Fourier de y(n) (1 kHz). . . . . . . . . . . . . . 53
xiv
5.9 Modelo em MATLAB: modulo da transformada de Fourier de y(n) (≈ 1 kHz). . . . . . . . 53
5.10 Modelo em C: modulo da transformada de Fourier de xf (n) (≈ 1 kHz). . . . . . . . . . . . 54
5.11 Modelo em MATLAB: modulo da transformada de Fourier de xf (n) (≈ 1 kHz). . . . . . . . 54
5.12 Modelo em C: modulo da transformada de Fourier de yf (n) (≈ 1 kHz). . . . . . . . . . . . 54
5.13 Modelo em MATLAB: modulo da transformada de Fourier de yf (n) (≈ 1 kHz). . . . . . . . 55
5.14 Modelo em C: modulo da transformada de Fourier de s(n) (≈ 1 kHz). . . . . . . . . . . . 55
5.15 Modelo em MATLAB: modulo da transformada de Fourier de s(n) (≈ 1 kHz). . . . . . . . 56
5.16 Modelo em C: modulo da transformada de Fourier de q(t) (≈ 1 kHz). . . . . . . . . . . . . 56
5.17 Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 1 kHz). . . . . . . . . 57
5.18 Modelo em C: modulo da transformada de Fourier de q(t) (≈ 10 kHz). . . . . . . . . . . . 58
5.19 Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 10 kHz). . . . . . . . 58
5.20 Modelo em C: modulo da transformada de Fourier de q(t) (≈ 20 kHz). . . . . . . . . . . . 59
5.21 Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 20 kHz). . . . . . . . 59
5.22 Modelo em C: modulo da transformada de Fourier de q(t) (≈ 1 + ≈ 2 kHz). . . . . . . . . 60
5.23 Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 1 + ≈ 2 kHz). . . . . 60
xv
xvi
Lista de Acronimos
AEM Analytic Exponential Modulator. xiii, xiv, 7, 17–19, 22, 23, 28, 37–39
CM Click Modulation. xiii, xiv, 1–4, 12, 13, 15–17, 21, 23, 25, 30, 31, 34, 39, 54, 59
DSP Digital Signal Processor. 19, 22, 23, 59
FFT Fast Fourier Transform. 46, 47, 52, 54, 55
FIR Finite Impulse Response. 6, 9, 18, 19, 22, 23, 25, 35
FPGA Field Programmable Gate Array. 2, 22, 23, 37, 59
NPWM Natural-Sampling Pulse Width Modulation. xiii, 1, 13, 14
PCM Pulse Code Modulation. 1, 2, 22, 31
PWM Pulse Width Modulation. 1–3, 10, 11, 13–16, 28, 34, 40, 50, 53
SDM Sigma-Delta Modulation. 1, 13
SNR Signal-to-Noise Ratio. xi, 57, 58
THD Total Harmonic Distortion. xi, 57, 58
UPWM Uniform-Sampling Pulse Width Modulation. xiii, 1, 13, 14
xvii
xviii
Capıtulo 1
Introducao
1.1 Motivacao e enquadramento
A codificacao de sinais de audio num formato indicado para amplificacao em potencia e posterior
reproducao tem sido objecto de estudo ha varias decadas, sendo que mais recentemente verifica-se um
progressivo incremento na utilizacao de amplificadores de classe D [AES, 2013]. Esta na sua origem,
entre outras razoes, a crescente utilizacao de dispositivos moveis de reproducao audio que, devido a
limitada autonomia energetica, conferem ao rendimento do tipo de amplificacao uma importancia cada
vez maior. Os andares de classe D possuem um rendimento teorico que pode chegar a 100%, ao
contrario das restantes classes A (µ < 25%), B e AB (µ < 78, 5%) e C (µ < 90%) [Sedra and Smith,
2004], o que torna a sua utilizacao bastante atractiva.
Essa codificacao tem sido feita, em larga escala, recorrendo principalmente a um dos tipos de
modulacao por largura de impulso, ou Pulse Width Modulation (PWM), Natural-Sampling Pulse Width
Modulation (NPWM) ou Uniform-Sampling Pulse Width Modulation (UPWM), e a modulacao Sigma-
Delta, ou Sigma-Delta Modulation (SDM). A principal razao da utilizacao destas duas opcoes e a sim-
plicidade dos circuitos de modulacao e desmodulacao, que favorece nao so o projecto como o fabrico
e a implementacao em circuito integrado. O progresso verificado nos circuitos de andares de classe D,
bem como o crescimento da exigencia do rendimento energetico e de qualidade do sinal, impulsiona-
ram, por conseguinte, a investigacao de metodos de codificacao capazes de satisfazer os requisitos e
acompanhar estes desenvolvimentos.
E neste contexto que surge a modulacao Click (ou Click Modulation (CM)). O artigo que a descreve
em pormenor foi publicado em 1984 por Benjamin F. Logan [Logan, 1984a], tendo o autor proposto,
no mesmo documento, um projecto de implementacao para sinais analogicos. Contudo, so mais tarde
foram publicados os primeiros trabalhos com vista a sua implementacao no contexto de sinais de audio
digitais. Esta nova tecnica de codificacao permite produzir, a partir de um sinal Pulse Code Modulation
(PCM), uma onda do tipo PWM cujo espectro contem diferencas significativas que a tornam muito mais
competitiva em relacao as modulacoes referidas no paragrafo anterior.
Esta dissertacao engloba conhecimentos de varias Areas Cientıficas de Engenharia Electrotecnica e
1
de Computadores. Da area de Electronica, o processamento digital de sinais, nomeadamente o projecto
e implementacao de filtros, da Transformada de Hilbert e moduladores. Da area de Computadores,
o Projecto de Sistemas Digitais, nomeadamente o desenho de harware especıfico para aplicacoes.
Sao abrangidos ainda conhecimentos de matematica do primeiro ciclo de estudos, nomeadamente
de Calculo (aproximacao de funcoes) e de Analise Numerica (algoritmos de procura de raızes de um
polinomio).
1.2 Metodologia proposta e objectivos
Devido a complexidade das operacoes da CM, principalmente considerando o requisito de funciona-
mento em tempo real, torna-se necessario dividir o trabalho. No contexto desta dissertacao foi definido
que, numa primeira fase, as operacoes matematicas descritas no artigo original seriam convertidas para
uma linguagem de programacao de alto nıvel (MATLAB). Numa segunda fase, a partir da primeira, o
algoritmo seria convertido para uma linguagem de programacao de baixo nıvel, neste caso a linguagem
C. Por fim, proceder-se-ia a sıntese do circuito, primeiro com recurso a hardware configuravel, atraves
de uma Field Programmable Gate Array (FPGA), e depois a sua implementacao em circuito integrado.
O objectivo incial desta dissertacao consistiu em realizar a segunda fase descrita acima, ou seja,
projectar um sistema electronico de processamento de sinal de vırgula fixa com vista a implementacao
da CM em tempo real numa FPGA, partindo do modelo em MATLAB. Conforme referido anteriormente,
como passo intermedio seria necessario desenvolver um modelo da modulacao Click em C. No de-
correr deste passo tornou-se perceptıvel que a complexidade exigida para o projecto deste modelo e
suficientemente grande para ser considerado como foco principal da dissertacao, pelo que o objectivo
inicial de implementacao em FPGA foi alterado para o referido desenho do modelo em linguagem C.
O sistema tem como entrada um sinal PCM de 16 bit amostrado a 48 kHz, e como resultado um
conjunto de ciclos de trabalho (duty cycles) de uma onda do tipo PWM com resolucao de 16 bit.
1.3 Estrutura do documento
No capıtulo 2 e feita uma descricao bloco a bloco, de forma essencialmente esquematica, da CM
- subseccoes 2.1.2 a 2.1.5. Na seccao 2.2 e dada tambem uma explicacao sucinta dos dois tipos de
modulacao referidos na seccao 1.1 e e feita uma comparacao das mesmas com a CM.
No capıtulo 3 sao explicadas as diversas formas de implementacao da CM ja realizadas, sendo estas
separadas em dois grupos: implementacoes em software (secccao 3.2) e implementacoes em hardware
(secccao 3.3). Na seccao 3.4 e descrita resumidamente a implementacao da CM em MATLAB.
No capıtulo 4 e exposta a parte principal do trabalho desenvolvido na dissertacao. Na seccao 4.1
sao descritos os aspectos gerais da implementacao, nas seccoes 4.2 e 4.3 sao resumidos conceitos
relacionados com operacoes e operandos de vırgula fixa e na seccao 4.4 sao detalhados os formatos
dos ficheiros que constituem entradas do sistema. Por fim, tendo como referencia a divisao feita por
blocos na seccao 2.1, sao expostos nas seccoes 4.5 a 4.8 os detalhes da implementacao de cada um.
2
No capıtulo 5 sao apresentados os resultados do trabalho. A seccao 5.1 descreve o sinal de entrada
gerado para gerar os resultados bloco a bloco do sistema, que sao exibidos nas seccoes 5.2 a 5.5.
Em 5.6 sao apresentados resultados com varios sinais de entrada de caracterısticas diferentes do
utilizado anteriormente. Na seccao 5.7 sao apresentados alguns dados adicionais e sao comentados
os resultados gerais da implementacao.
Por fim, no capıtulo 6, mais concretamente na seccao 6.1, sao referidas as conclusoes do trabalho
desenvolvido. Na seccao seguinte, 6.2, sao propostos varios topicos de desenvolvimento futuro.
3
4
Capıtulo 2
Modulacao Click
2.1 Aspectos teoricos
2.1.1 Introducao
A CM, conforme referido na seccao 1.1, constitui um processo para gerar uma onda do tipo PWM
que servira como drive para dispositivos inseridos numa montagem amplificadora de classe D. O artigo
original, em conjunto com os artigos complementares do mesmo autor [Logan, 1977] [Logan, 1978]
[Logan, 1984b] [Logan, 1984c] [Logan, 1984d], foi escrito numa perspectiva de sıntese, ou seja, partindo
de um conjunto de condicoes iniciais, era explicitada a formulacao do problema, cuja resolucao era
revelada passo a passo. No contexto desta dissertacao nao se justifica uma abordagem deste genero,
pelo que para uma explicacao mais pormenorizada aconselha-se a consulta das referencias indicadas
anteriormente.
Apesar da implementacao ser feita para sinais digitais, a CM foi originalmente concebida para o
processamento de um qualquer sinal analogico passa-banda, isto e, um sinal real, contınuo na ampli-
tude e no tempo e com conteudo espectral limitado entre duas frequencias finitas. Assim, para este
capıtulo, toma-se como notacao para o sinal de entrada f(t), estando o seu espectro (para frequencias
positivas) contido no intervalo [ΩL,ΩH ], com 0 < ΩL < ΩH . Conforme referido no capıtulo introdutorio,
a CM produz um sinal equivalente a uma onda do tipo PWM, presente como q(t) na figura 2.1, cujo
espectro pode ser dividido essencialmente em 3 partes, conforme o esboco apresentado.
Figura 2.1: Esboco do espectro de um sinal q(t) gerado pela CM [Oliva et al., 2005].
5
Na primeira parte, constituıda pelo conteudo espectral entre ΩL e ΩH , esta presente o sinal original
que se quer modular. Entre ΩH e ΩS , a banda de guarda (ou guardband), nao ha, idealmente, conteudo
espectral. A partir de ΩS encontram-se componentes de alta frequencia que constituem o resultado das
operacoes efectuadas pela modulacao, possibilitando a formacao de uma onda rectangular de duty
cycles variaveis, com frequencia de comutacao 2Ωp, que pode ser da mesma ordem de grandeza da
frequencia maxima do sinal de entrada, ΩH .
Um sinal com estas caracterısticas torna-se ideal para ser alimentado em potencia por um amplifi-
cador de classe D. Assumindo para o andar de potencia um rendimento teorico de 100% e introducao
de distorcao nula, a desmodulacao pode ser feita recorrendo a um filtro passa-baixo com uma carac-
terıstica semelhante a que se encontra referenciada na figura 2.1 como HA(f), sendo o sinal f(t) recu-
perado na sua ıntegra. Na figura 2.2 apresenta-se o esquema da cadeia de processamento completa
que servira de base para a explicacao teorica nas proximas subseccoes.
Figura 2.2: Cadeia de processamento da CM - teoria [Oliva et al., 2005].
O processamento de sinal envolve operacoes com aritmetica complexa, tanto do ponto de vista
teorico como do ponto de vista computacional. Dado que o principal objectivo e o projecto em hardware
da CM, e de forma a proporcionar uma perspectiva mais concreta da figura anterior, apresenta-se na
figura 2.3 a divisao por blocos da implementacao pratica da modulacao. Conforme referido na seccao
1.3, a explicacao dos modulos desta figura sera dada em detalhe no capıtulo 4.
Figura 2.3: Cadeia de processamento da CM - hardware.
Na figura 2.4 apresenta-se um esboco de um espectro possıvel para o sinal f(t). Como se pode
verificar, sendo f(t) um sinal real, a sua transformada de Fourier possui simetria hermitiana, isto e,
possui simetria par na parte real e simetria ımpar na parte imaginaria.
Nas subseccoes seguintes (2.1.2 a 2.1.5) sera dada uma explicacao teorica sucinta do funciona-
mento da CM baseada no artigo original [Logan, 1984a] e num white paper da Texas Instruments
[Oliva et al., 2005], de onde foi extraıdo parte do texto. Para tal, o algoritmo foi dividido em quatro partes
6
Figura 2.4: Modulo da transformada de Fourier de f(t): exemplo [Oliva et al., 2005].
- descritas nas supra-referidas subseccoes -, agregando cada uma delas operacoes correspondentes
aos blocos da figura 2.2. Estas operacoes nao constituem necessariamente implementacoes directas
das mesmas, servem apenas o proposito de demonstrar de forma sequencial as modificacoes que o
sinal sofre. Assim, as subseccoes seguintes agrupam-se de acordo com o esquema apresentado na
figura 2.3.
2.1.2 Transformada de Hilbert
O primeiro bloco de operacoes pretende dar origem a um sinal que contenha componentes apenas
da parte positiva do espectro, ou seja, um sinal analıtico, doravante designado por fA(t). Por definicao,
o sinal analıtico e um sinal complexo, que neste caso tomara a forma
fA(t) = f(t) + jf(t), (2.1)
onde f(t) e a transformada de Hilbert do sinal de entrada, que constitui a principal operacao deste
bloco, que e obtida atraves da convolucao do mesmo com o sinal 1πt :
f(t) = f(t) ∗ 1
πt. (2.2)
Para a adicao das duas parcelas de fA(t) e ainda necessario introduzir um atraso ( ∆ ) no sinal de
entrada correspondente ao tempo de calculo da convolucao. O esquema completo do bloco encontra-se
na figura 2.5.
Figura 2.5: Esquema do bloco do calculo de fA(t) [Oliva et al., 2005].
Da convolucao em (2.2) resulta um sinal cujo espectro na parte positiva do eixo de frequencias
7
se mantem inalterado, mas na parte negativa e reflectido em relacao ao mesmo eixo, conforme se
evidencia na figura 2.6.
Figura 2.6: Modulo da transformada de Fourier de f(t) [Oliva et al., 2005].
Da soma dos sinais f(t) e f(t) - cujos espectros se encontram representados novamente na fi-
gura 2.7 - facilmente se conclui que o espectro de fA(t) tera apenas componentes no semieixo de
frequencias positivas, tanto na parte real como na parte imaginaria, ou seja, fA(t) e um sinal analıtico.
(a) Modulo da transformada de Fourierde f(t).
(b) Modulo da transformada de Fourierde f(t).
(c) Modulo da trans-formada de Fourier defA(t).
Figura 2.7: Modulo da transformada de Fourier dos varios sinais envolvidos na criacao de fA(t) [Olivaet al., 2005].
E de notar que desta operacao nao resulta qualquer perda de informacao. Como f(t) e um sinal
real, o seu espectro possui simetria hermitiana. Por conseguinte, a componente do espectro presente
no semieixo negativo de frequencias, tanto na parte real como na parte imaginaria, esta tambem pre-
sente na parte positiva, pelo que e possıvel recuperar integralmente a informacao do sinal original.
O bloco de Hilbert pode ser implementado recorrendo ao desenho de dois filtros de resposta ao
impulso finita [Finite Impulse Response (FIR)] h1(n) e h2(n) que, tendo ambos como entrada o sinal
original digital, f(n), produzem cada um o seu sinal de saıda, yr(n) e yi(n), que sao transformada de
Hilbert um do outro [Oppenheim and Schafer]. Os coeficientes dos filtros podem ser obtidos por varios
metodos, entre eles a amostragem da resposta em frequencia, equiripple ou truncatura de resposta
ao impulso. O modulo da resposta em frequencia de ambos apresenta a caracterıstica de um filtro
passa-banda, sendo a fase da resposta em frequencia linear ao longo de toda a banda de passagem.
8
A sequencia a tempo discreto
fA(n) = fAr (n) + jfAi(n), (2.3)
com parte real
fAr (n) = f(n) ∗ h1(n) (2.4)
e imaginaria
fAi(n) = f(n) ∗ h2(n), (2.5)
constitui a saıda do bloco de Hilbert.
2.1.3 Modulador exponencial analıtico e filtragem
O sinal fA(t), constituıdo pelas partes real e imaginaria de acordo com a equacao (2.1), e colocado
a entrada do bloco Analytic Exponential Modulator (AEM), que produz o sinal
zf (t) = z(t) ∗ hA(t) = e−jfA(t) ∗ hA(t), (2.6)
e cujo esquema se encontra na figura 2.8. E constituıdo por um bloco que calcula uma exponencial
complexa de base e em serie com um filtro passa-baixo com resposta ao impulso hA(t).
Figura 2.8: Esquema do bloco AEM [Oliva et al., 2005].
Partindo da igualdade (2.1) podemos desenvolver o expoente da equacao (2.6),
− jfA(t) = −j[f(t) + jf(t)] = −jf(t)− j2f(t) = f(t)− jf(t), (2.7)
ficando entao com
z(t) = e−jfA(t) = ef(t)−jf(t). (2.8)
O sinal z(t) tambem e analıtico, ou seja, complexo e com transformada de Fourier apenas no semi-
eixo positivo de frequencias. Contudo, o conteudo espectral estende-se por toda a gama de frequencias
(positivas) ate +∞, conforme ilustrado na figura 2.9.
Para garantir que o espectro de f(t) continua a poder ser recuperado a partir de z(t) e necessario
que a extensao analıtica de z(t), z(τ), com τ ∈ C, nao contenha zeros em Imτ ≥ 0. Para tal, e
9
Figura 2.9: Modulo da transformada de Fourier de z(t) [Oliva et al., 2005].
condicao necessaria e suficiente que a amplitude do sinal de entrada seja limitada: |f(t)| < π2 [Logan,
1984a].
Dada a impossibilidade de usufruir de toda a banda de frequencias para a operacao de exponenciacao,
e essencial proceder-se a filtragem passa-baixo de z(t), cuja resposta ao impulso e definida por hA(t).
Atraves de um filtro de frequencia de corte ΩS , e com uma atenuacao suficientemente grande a partir
de uma determinada frequencia ΩU , obtemos o sinal
zf (t) =
∫ +∞
−∞z(τ)hA(t− τ)dτ, (2.9)
com 0 < ΩL < ΩH < ΩS < ΩU < +∞, e cujo espectro se encontra na figura 2.10.
Figura 2.10: Modulo da transformada de Fourier de zf (t) [Oliva et al., 2005].
E pertinente recordar que o sinal de saıda do filtro tambem e analıtico (e, portanto, complexo),
mas se for cumprida a condicao |f(t)| < π2 a sua extensao analıtica tambem nao possui zeros para
Imτ ≥ 0, pelo que continua a ser possıvel recuperar o sinal f(t) a partir de zf (t). Adicionalmente, as
transformadas de Fourier de log[zf (t)] e fA(t) coincidem no intervalo ]−∞,ΩS ] [Oliva et al., 2005].
A implementacao pratica do calculo da exponencial complexa de −fA(t) pode ser feita atraves da
expansao em serie de Taylor da funcao em torno de 0 (ou serie de MacLaurin) com um numero de
coeficientes finitos:
e−jfA(t) =
N−1∑k=0
(−jfA(t))k
k!= 1− jfA(t)− [fA(t)]2
2!+ j
[fA(t)]3
3!+ ... (2.10)
A aproximacao da funcao exponencial por este metodo tem como consequencia um aumento na
banda do espectro do sinal resultante por um factor deN [Domingues et al., 2014]. Como consequencia
desse facto, para que seja cumprido o criterio de Nyquist e necessario interpolar o sinal com o mesmo
factor antes da operacao de exponenciacao. A escolha do seu valor deve ter em conta a precisao
desejada para o calculo, por um lado, e por outro os recursos computacionais disponıveis. Acresce
ainda referir que, a semelhanca do bloco de Hilbert, o calculo das partes real e imaginaria e feito em
separado, e que este tem de ter em conta que o sinal de entrada, fA(t), tem parte real e imaginaria. A
10
aproximacao de uma exponencial real e feita de forma semelhante a da exponencial complexa:
ef(t) =
N−1∑k=0
(f(t))k
k!= 1 + f(t) +
[f(t)]2
2!+
[f(t)]3
3!+ ... (2.11)
Os coeficientes dos filtros FIR anti-aliasing com resposta ao impulso hA(t) podem ser obtidos
atraves de qualquer um dos metodos ja referidos - amostragem da resposta em frequencia, equirip-
ple ou truncatura de resposta ao impulso. Em ambos os filtros (um para a parte real e outro para a
parte imaginaria) o modulo da resposta em frequencia apresenta uma caracterıstica passa-baixo com
os parametros apresentados no paragrafo anterior a figura 2.10. A fase da resposta em frequencia e
linear ao longo de toda a banda de passagem. O sinal de saıda tem a forma
zf (n) = xf (n) + jyf (n), (2.12)
sendo xf (n) a parte real e yf (n) a parte imaginaria.
2.1.4 Modulador em quadratura
Depois de filtrado, o sinal zf (t), cujo espectro, recorde-se, possui componentes apenas na parte
positiva, e modulado de forma a que o seu espectro fique contido num determinado intervalo [−Ωp,Ωp].
O esquema completo deste bloco pode ser visto na figura 2.11.
Figura 2.11: Esquema do bloco Modulador em quadratura [Oliva et al., 2005].
Em termos matematicos, tal como se pode ver na figura, procede-se ao calculo de z∗f (t), complexo
conjugado de zf (t), a multiplicacao deste pela exponencial complexa ejΩpt e, por ultimo, a extraccao da
parte real do resultado. Sabendo que
zf (t) = xf (t) + jyf (t), (2.13)
tem-se entao
s(t) = Rez∗f (t)ejΩpt = xf (t) cos(Ωpt) + yf (t) sin(Ωpt), (2.14)
que corresponde a estrutura de uma modulacao em quadratura e que e equivalente a expressao
s(t) = |zf (t)| cos(Ωpt− argzf (t)). (2.15)
A escolha do valor de Ωp constitui o aspecto mais importante deste bloco. O seu valor tem, por um
11
lado, de ser maior do que ΩS , para que nao introduza componentes na banda de interesse do sinal,
e, por outro, o menor possıvel, para nao aumentar em demasia a frequencia de comutacao da onda
PWM final, que, como se vera, e igual a 2Ωp. Por conseguinte, o intervalo de valores [ΩS ,ΩU ] revela-se
adequado para Ωp, ou seja, Ωp poder ser tal que seja satisfeita a condicao
Ωp ≥ΩU + ΩS
2. (2.16)
O sinal s(t) e definido pelos seus zeros que, se for cumprida a restricao |f(t)| < π2 , sao simples
e reais, e estao entrelacados com os zeros de sin(Ωpt). O posicionamento dos mesmos e de vital
importancia para o processamento, pois e nele que esta codificada a informacao que sera utilizada
para formar a onda do tipo PWM q(t), referida na subseccao 2.1.1.
O espectro de s(t) esta esquematizado na figura 2.12, e dado s(t) tratar-se de um sinal real, o
seu espectro tem simetria hermitiana e possui componentes nos semieixos positivo e negativo de
frequencias.
Figura 2.12: Modulo da transformada de Fourier de s(t) [Oliva et al., 2005].
A concretizacao deste bloco passa pelo calculo do equivalente discreto da equacao (2.14):
s(n) = xf (n) cos(Ωpn) + yf (n) sin(Ωpn) (2.17)
O sinal s(n) ja e um sinal real, que engloba todas as operacoes descritas para este bloco. Os sinais
cos(Ωpn) e sin(Ωpn) sao obtidos atraves da amostragem uniforme dos seus equivalentes contınuos. Por
simplificacao, considera-se que ambos os sinais tem fase inicial nula, embora a operacao seja valida
para qualquer valor, desde que os sinais estejam em quadratura. O sinal de saıda do bloco, s(n), a
semelhanca do seu equivalente contınuo, s(t), tambem e definido pelas suas passagens por zero.
2.1.5 Passagem por zero
Conforme referido na subseccao anterior, se for cumprida a restricao |f(t)| < π2 , os zeros de s(t)
estao posicionados entre os zeros de sin(Ωpt), o que faz com que, por cada perıodo TP = 1Ωp
, com
Ωp = 2πfp, haja pelo menos quatro zeros, sendo dois deles no inıcio e a meio do perıodo em(kΩp e
(k + 12 )Ωp
)e os outros dois nos intervalos
]kΩp, (k + 1
2 )Ωp[
e](k + 1
2 )Ωp, (k + 1)Ωp[, resultantes das
operacoes da modulacao.
O sinal s(t) e novamente multiplicado por cos(Ωpt), dando origem ao sinal u(t). De seguida e calcu-
lado o seu logaritmo, multiplicado por j e retirada a parte real, resultando este processo no sinal v(t).
O esquema de processamento deste bloco encontra-se na figura 2.13.
12
Figura 2.13: Esquema do bloco Passagem por zero [Oliva et al., 2005].
No primeiro bloco, que tem como saıda u(t), o espectro de s(t) sofre um novo deslocamento, ficando
confinado ao intervalo [0, 2Ωp]. Conforme e possıvel constatar atraves da comparacao das figuras 2.10
e 2.14, no intervalo ]−∞,ΩS ] os espectros de u(t) e de zf (t) coincidem.
Figura 2.14: Modulo da transformada de Fourier de u(t) [Oliva et al., 2005].
Tambem no mesmo intervalo explicitado anteriormente os espectros de jlog[u(t)], jlog[zf (t)] e fA(t)
sao coincidentes, e, por conseguinte, as transformadas de Fourier de v(t) e de f(t) sao iguais no
intervalo [−ΩS ,ΩS ], conforme se constata atraves da comparacao das figuras 2.4 e 2.15.
(a) Parte imaginaria (b) Parte real, ou modulo da transformada de Fourier de v(t)
Figura 2.15: Modulo da transformada de Fourier de jlog[u(t)] [Oliva et al., 2005].
A partir deste momento, apos uma filtragem passa-baixo do sinal v(t), que a semelhanca de s(t)
tambem e unicamente definido pelas suas passagens por zero, o sinal f(t) e recuperado na sua totali-
dade. O filtro possui uma caracterıstica semelhante a da figura 2.16 (a). Apos a filtragem, o sinal f(t) e
recuperado, apresentando um espectro igual ao da figura 2.4, conforme se constata na figura 2.16 (b):
(a) Possıvel caracterıstica do filtro passa-baixo (desmodulador)[Oliva et al., 2005].
(b) Espectro do sinal v(t) filtrado [Oliva et al., 2005].
Figura 2.16: Caracterıstica do filtro passa-baixo e modulo da transformada de Fourier de jlog[u(t)][Oliva et al., 2005].
No entanto, para gerar um sinal do tipo PWM e necessario subtrair o sinal v(t) a um sinal do tipo
dente-de-serra, σ(t) com frequencia de 2Ωp. Na figura 2.17 apresentam-se esbocos de sinais relevantes
para o ultimo bloco de processamento.
13
Figura 2.17: Esboco de alguns sinais da CM [Oliva et al., 2005].
E desta forma gerada a onda q(t), que corresponde a um sinal binario, passıvel de ser amplificado
em potencia por um andar de classe D e cujo espectro tem a estrutura igual ao da figura 2.1.
A concretizacao deste bloco passa por encontrar os instantes de passagem por zero de s(n), sinal
de saıda do bloco anterior, que podem nao corresponder necessariamente a instantes discretos inteiros,
conforme referido anteriormente. As duas vias mais comuns para implementar este bloco passam por
duas estrategias distintas.
Uma consiste na interpolacao do sinal por inteiro, aumentando a sua frequencia de amostragem,
para que seja apenas necessario apurar a amostra mais proxima de 0 e recolher o instante em que
esta ocorre. O factor de sobreamostragem sera tanto maior quanto a precisao que se deseje obter.
Noutra estrategia, procede-se a localizacao dos zeros de s(n) a partir da mudanca de sinal das suas
amostras, numa primeira fase. Depois, a partir de um determinado numero de pontos seleccionados, e
gerada uma funcao interpoladora - normalmente um polinomio - que permite obter pontos intermedios
no intervalo que contem a mudanca de sinal. Por ultimo, com recurso a metodos de procura de raızes,
como o metodo da bisseccao ou o metodo de Newton (entre outros), obtem-se o instante pretendido.
14
2.2 Comparacao com outras modulacoes
2.2.1 Introducao
Em aplicacoes audio, as modulacoes utilizadas para alimentar um andar de classe D tem de apre-
sentar idealmente cinco caracterısticas [Domingues et al., 2014]:
• o sinal resultante tem de ser binario no domınio do tempo;
• a frequencia de comutacao do mesmo sinal tem de ser a mais baixa possıvel de forma a minimizar
as perdas de comutacao no andar de potencia;
• a desmodulacao tem de ser feita recorrendo apenas a um filtro passa-baixo;
• no domınio da frequencia nao deve haver distorcao na banda que contem a informacao do sinal
original;
• de forma a facilitar a especificacao do filtro de desmodulacao, deve haver uma separacao en-
tre a referida banda de interesse do sinal e os componentes de alta frequencia resultantes da
modulacao.
O sinal gerado pela CM e do tipo PWM, ou seja, uma onda binaria rectangular com duty cycles
variaveis. A sua formacao e complexa, como visto na seccao 2.1. Ha, contudo, princıpios e cir-
cuitos substancialmente mais simples capazes de gerar sinais deste tipo, expostos sucintamente na
subseccao 2.2.2. Na subseccao 2.2.3 e tambem explicada de forma abreviada a modulacao Sigma-
Delta (SDM), que contitui uma melhoria em relacao as modulacoes PWM tradicionalmente utilizadas.
Por fim, ambas sao comparadas com a CM na subseccao 2.2.4.
2.2.2 Modulacoes PWM
Os dois principais tipos de modulacao PWM sao a UPWM e a NPWM. Na figura 2.18 pode ser visto
o esquema de implementacao da modulacao UPWM.
UPWMInput
Carrier
S/H
Figura 2.18: Circuito de implementacao da UPWM [Domingues et al., 2015].
Neste tipo de modulacao, o sinal de entrada analogico e amostrado numa unidade de amostragem
e retencao (sample-and-hold), que colhe uma amostra o ritmo de um sinal de relogio (que na figura
aparece associado a onda modulada carrier ), mantendo-o a saıda do bloco durante todo o perıodo de
amostragem. Durante esse intervalo, a amostra recolhida do sinal de entrada e a onda portadora (que
15
normalmente e um sinal triangular ou dente-de-serra) sao comparados. O resultado dessa comparacao
tambem se mantem durante o perıodo de amostragem, sendo a onda PWM de saıda formada pelos
sucessivos resultados das comparacoes. Quanto maior a frequencia com que os resultados sao com-
parados, melhor o resultado da modulacao, mas maiores as perdas de comutacao dos dispositivos as
produzem.
Na figura 2.19 e apresentado o espectro de uma onda PWM gerada atraves de UPWM, em que o
sinal modulante e uma onda sinusiodal de 1 kHz e a onda portadora tem a frequencia de 48 kHz.
101
102
103
104
105
-150
-100
-50
0
Freq [Hz]
MA
G [
dB]
Figura 2.19: Espectro de uma onda UPWM com entrada sinusoidal de 1 kHz [Domingues et al., 2015].
E possıvel verificar a existencia de harmonicas do sinal modulante dentro da banda audio acima do
patamar de -50 dB em 2 kHz, bem como uma harmonica acima de -75 dB a 3 kHz. De facto, no caso
deste tipo de modulacao, a distorcao harmonica do sinal de entrada e o factor que mais contribui para
a degradacao do sinal [Domingues et al., 2015]. Este problema e contornado principalmente com a
elevada frequencia de amostragem do sinal de entrada, cujo projecto, para alem de nao ser simples de
implementar, nao garante um sinal livre de harmonicas na banda de interesse.
No caso da NPWM, o sinal de entrada e a onda modulada sao postos directamente a entrada
do comparador, nao recorrendo a amostragem e retencao do sinal. Na figura 2.20 pode ser visto o
esquema desta modulacao.
NPWM
Input
Carrier
Figura 2.20: Circuito de implementacao da NPWM [Domingues et al., 2015].
Na figura 2.21 e apresentado o espectro de uma onda PWM gerada atraves de NPWM, em que o
sinal modulante e uma onda sinusoidal de 1 kHz e a onda portadora tem a frequencia de 48 kHz. Para
o caso especıfico desta frequencia, o resultado apresentado e substancialmente melhor que a UPWM,
apresentando apenas uma harmonica a 2 kHz ligeiramente acima do patamar de -100 dB.
No entanto, no caso deste tipo de modulacao e ao contrario da UPWM, o tipo distorcao mais pre-
sente e a distorcao causada pela intermodulacao, ou seja, pelas harmonicas dos produtos dos dois
16
101
102
103
104
105
-150
-100
-50
0
Freq [Hz]
MA
G [
dB]
Figura 2.21: Espectro de uma onda NPWM com entrada sinusoidal de 6 kHz [Domingues et al., 2015].
sinais [Domingues et al., 2015]. Para melhor demonstrar esse efeito, apresenta-se na figura 2.22 o es-
pectro de uma onda NPWM gerada a partir de um sinal de entrada de 6 kHz. Nela e possıvel observar
as referidas componentes, cujas frequencias se encontram dentro da banda de audio.
101
102
103
104
105
106
-150
-100
-50
0
Freq [Hz]
MA
G [
dB]
Figura 2.22: Espectro de uma onda NPWM com entrada sinusoidal de 6 kHz [Domingues et al., 2015].
Para diminuir este tipo de distorcao tem de se aumentar de forma bastante significativa a frequencia
da onda modulada, para a ordem das centenas de kHz. Tal solucao impoe que para a utilizacao da
modulacao se recorra a dispositivos com capacidade para funcionar a altas frequencias, sem contudo
ter demasiadas perdas por comutacao. Esta via tem custos elevados e, tal como a UPWM nao garante
na desmodulacao um sinal inteiramente limpo de harmonicas.
2.2.3 Modulacao Sigma-Delta
De forma a diminuir ambos os tipos de distorcao sem recorrer a um aumento incomportavel, em
termos praticos, de Ωp, e utilizada a modulacao sigma-delta, Σ∆, tambem amplamente usada como
conversor analogico-digital. Nesse contexto, o sinal de entrada f(t) e amostrado e quantificado, sendo
o sinal de saıda (qΣ∆
(t)) um bitstream com palavras de n bit, sendo n o numero de bit que representa
cada amostra de f(t), que por sua vez define o numero de andares de quantificacao que se deseja
obter (2n). No contexto da amplificacao em classe D, que, conforme referido anteriormente, so faz
sentido assumir que qΣ∆(t) seja uma onda binaria, o que implica n = 1.
Esta modulacao faz uso da integracao do erro entre o sinal de entrada (original) e o sinal de saıda
- sinal analogico identico ao de entrada, mas gerado a partir de um conversor digital-analogico de
17
1 bit que tem como entrada a onda qΣ∆
(t) - para diminuir o patamar de ruıdo atraves do efeito de
noise shaping. Este efeito caracteriza-se pela transferencia do ruıdo branco de quantificacao em bai-
xas frequencias, ou frequencias na banda de interesse do sinal, para ruıdo em altas frequencias. O
esquema do circuito Σ∆ de primeira ordem encontra-se na figura 2.23:
Figura 2.23: Esquema da modulacao Σ∆ de primeira ordem.
Um circuito Σ∆ pode ser de ordem 1 ou superior, sendo que a ordem se refere ao numero de integra-
dores presentes. Embora se constate que a Σ∆ apresenta melhores resultados do que as modulacoes
PWM, dada a sua topologia de malha fechada, circuitos a partir de 3a ordem podem apresentar pro-
blemas de estabilidade, o que pode constituir uma restricao de projecto, pois apenas a partir dessa
ordem se obtem resultados com qualidade superior as modulacoes PWM que justifiquem o seu uso.
Adicionalmente, o circuito e, habitualmente, pelo menos duas vezes maior em termos de area utilizada.
2.2.4 Conclusoes
Todos as modulacoes descritas anteriormente cumprem, pelo menos com uma aproximacao sufici-
entemente boa, as condicoes listadas em 2.2.1. No entanto, a CM apresenta tres vantagens em relacao
as modulacoes anteriormente descritas.
Primeiramente, em termos teoricos nao ha distorcao algorıtmica inerente a modulacao. Teorica-
mente, se todos os componentes tiverem resolucao infinita, o sinal q(t) tem em banda de base o sinal
f(t) inalterado, sendo o seu espectro constituıdo pelas tres partes apresentadas na figura 2.1. Tanto
nas modulacoes PWM como na Σ∆ a parte do espectro correspondente a f(t) sofre distorcao, mesmo
com componentes perfeitos.
Em segundo lugar, a onda qCM
(t) produzida pela CM pode ter uma frequencia de comutacao 2ΩC
bastante inferior a qPWM
(t) e qΣ∆(t), da ordem de ΩH . Tal caracterıstica introduz uma melhoria subs-
tancial no andar de amplificacao em potencia. No caso da classe D, a quase totalidade das perdas
ocorre na transicao entre nıveis logicos (perdas de comutacao), que depende linearmente de 2ΩC .
Consequentemente, comparativamente as outras modulacoes, a potencia de perdas causadas pela
amplificacao da onda qCM
(t) pode ser cinco vezes inferior, gracas a esta caracterıstica da onda.
18
Por ultimo, o algoritmo da CM apresenta uma topologia de malha aberta, o que a partida a define
como inerentemente estavel, ao contrario da modulacao Σ∆.
A principal desvantagem da CM e a complexidade de operacoes, tanto a nıvel teorico como pratico,
conforme e possıvel constatar pela explicacao dada na seccao 2.1, e traduz-se nao so em termos
algorıtmicos como de exigencia computacional. A razao pela qual a modulacao ainda nao foi testada
e implementada em larga escala e de ordem tecnologica, pois ate ha bem pouco tempo nao havia
dispositivos capazes de a sintetizar, sobretudo com capacidade de produzir resultados passıveis de
serem utilizados em tempo real.
19
Capıtulo 3
Estado da arte
3.1 Introducao
Neste capıtulo serao expostas varias tentativas de implementacao da CM. Estas podem ser dividi-
das em dois grandes grupos, principalmente devido aos diferentes formatos do projecto: implementacao
em software ou implementacao em hardware. E ainda apresentado o modelo MATLAB da CM.
Para alem de uma comparacao de resultados obtidos nos diversos projectos, que por forca das
diferencas nos testes nao sao integralmente comparaveis, e referenciada a forma de concretizacao
dos diferentes modulos descritos no capıtulo anterior. No entanto, em alguns casos nao foi possıvel
obter a informacao de como foi realizado o bloco em causa, dado que esta nao foi disponibilizada nas
publicacoes consultadas. A notacao usada para designar os diversos sinais ao longo da cadeia de
processamento sera igual a da seccao 2.1.
3.2 Modulacao Click em software
Ao longo de varios anos (2005, 2008 e 2013) foram publicados tres artigos pelos mesmos autores,
nos quais sao expostos varios projectos em software. Nos tres casos a implementacao da CM e offline,
isto e, nao ha requisitos limite de baixa latencia ou baixo tempo de execucao do algoritmo. O objectivo
destes trabalhos foi essencialmente validar a execucao das operacoes do algoritmo em software. Dado
que os resultados apresentados, segundo os autores, foram obtidos atraves de simulacoes feitas a partir
de um software de codificacao, e embora nao esteja explıcito em todos os artigos, e legıtimo assumir
que os operandos sao processados, salvo indicacao em contrario, em vırgula flutuante (floating point
ou float) de precisao simples, visto nao haver qualquer referencia a utilizacao de vırgula fixa nem a uma
resolucao numerica associada.
O primeiro projecto foi simulado com recurso a ferramenta MATLAB [Oliva et al., 2005], e foi dimensi-
onado para um sinal com largura de banda unilateral ate 10 kHz, excluindo muito baixas frequencias (<
20 Hz), e para uma guardband entre os 10 kHz e os 12 kHz. Nao ha informacao acerca da realizacao
do bloco de Hilbert nem do bloco AEM e filtragem. A frequencia da onda portadora no bloco Modulador
20
em Quadratura e de fp = 12 kHz, o que perfaz uma frequencia de comutacao de q(t) igual a 2fp = 24
kHz. O bloco de passagem por zero consiste apenas na seleccao do instante mais proximo de 0, visto
que todo o sistema foi simulado com uma frequencia de amostragem muito superior a 48 kHz (10.24
MHz). O sinal de entrada consistia na soma de tres sinusoides a frequencias f1 = 2.5 kHz, f2 = 5 kHz e
f3 = 10 kHz. O espectro da onda q(t) produzida pode ser visto na figura 3.1, onde podem ser verificados
os dados referidos anteriormente.
Figura 3.1: Modulo da transformada de Fourier de q(t) (Oliva et al.).
Constata-se que o patamar de ruıdo se encontra sensivelmente 60 dB abaixo do sinal. De acordo
com os autores, tal valor e explicado pelo efeito de aliasing a saıda do bloco AEM, bem como pela
resolucao da deteccao das passagens por zero. Um valor desta ordem nao e suficiente para garantir
uma qualidade audio elevada para o sistema.
O segundo projecto [Stefanazzi et al., 2008] teve como sinal de entrada a soma de sinusoides
com frequencias f1 = 3.5 kHz e f2 = 8 kHz amostrado a 44.1 kHz. Apesar de teoricamente a largura
de banda poder estender-se ate 22 kHz, a guardband so foi projectada para ir ate 18 kHz. Nao ha
informacao acerca da realizacao do bloco de Hilbert. O bloco AEM e filtragem foi realizado atraves de
uma aproximacao em serie de MacLaurin com 12 coeficientes seguida de um filtro FIR. A frequencia da
onda portadora no bloco Modulador em Quadratura e de fp = 20 kHz, dando origem a uma frequencia
de comutacao de q(t) de 2fp = 40 kHz.
No caso deste projecto, devido as caracterısticas do sinal de entrada, o sinal s(t), que e o sinal de
saıda do bloco Modulador em Quadratura, do qual sao retirados os zeros que determinarao os instantes
de comutacao q(t), pode ser obtido analiticamente. No entanto, as suas raızes so podem ser obtidas
atraves de metodos numericos. Para tal, no bloco de passagem por zero foi feita uma aproximacao de
s(t) em torno das suas raızes atraves de uma interpolacao polinomial de grau 3, com operandos de
vırgula flutuante de 64 bit. Para a sua determinacao foi utilizado o metodo de Newton-Rhapson.
O espectro da onda q(t) pode ser visto na figura 3.2, onde se verificam os dados referidos anterior-
mente. O patamar de ruıdo de -250 dB deve-se, de acordo com os autores, a precisao da aproximacao
21
do instante de passagem por zero.
Figura 3.2: Modulo da transformada de Fourier de q(t) (Stefanazzi et al.).
Ainda no mesmo projecto foi utilizado um click player num processador digital de sinal, ou Digital
Signal Processor (DSP), cuja arquitectura e constituıda essencialmente por uma memoria, onde estao
armazenados os tempos de comutacao obtidos pela modulacao em software, um formador de pulsos
que gera a onda correspondente e, por fim, um filtro passa-baixo que realiza a desmodulacao de q(t).
Obtem-se uma transformada de Fourier do sinal desmodulado de acordo com o exposto na figura 3.3.
Com um patamar de ruıdo acima de -60 dB, nao e possıvel garantir uma qualidade audio elevada para
o sistema, estando a limitacao associada ao click player e nao ao algoritmo da modulacao, como no
caso do primeiro projecto.
Foi ainda realizado pelos mesmos autores um terceiro projecto [Stefanazzi et al., 2013], testado com
dois tipos de sinal de entrada. A guardband pode ir ate aos 30 kHz, sendo que ambos sinais foram
amostrados a 60 kHz. Nao ha informacao acerca da realizacao do bloco de Hilbert. O bloco AEM
e filtragem foram realizados simultaneamente, de forma recursiva, baseados na combinacao de duas
operacoes: a aproximacao em serie de MacLaurin da exponencial (com 12 coeficientes) e a convolucao
entre o sinal e os coeficientes do filtro FIR. A frequencia da onda portadora no bloco Modulador em
Quadratura foi de fp = 60 kHz, dando origem a uma frequencia de comutacao de q(t) de 2fp = 120
kHz. Ao contrario do projecto anterior, o bloco passagem por zero foi desenhado sem recurso a sobre-
amostragem do sinal. Em vez disso, foi feita uma aproximacao polinomial de s(t) de ordem 3, complexa,
tendo sido obtidos deterministicamente, isto e, sem quaisquer metodos de procura de raızes, os valores
dos instantes em que s(t) = 0. Os zeros obtidos correspondem a projeccao no eixo real dos zeros
complexos do polinomio.
O primeiro sinal testado foi uma soma de sinusoides com frequencias f1 = 1 kHz, f2 = 3 kHz e f3 =
6 kHz. O espectro da onda rectangular (|Q1(f)|), ambos produzidos por simulacao em software, pode
22
Figura 3.3: Modulo da transformada de Fourier de q(t) desmodulado: medicao experimental (Stefanazziet al.).
ser visto na figura 3.4, onde podem ser verificados os parametros referidos anteriormente.
Figura 3.4: Modulo da transformada de Fourier de q1(t) (Stefanazzi et al.).
O segundo sinal testado foi um sinal passa-banda, x2A(n), com frequencias entre DC (exclusive) e
30 kHz. Para posterior comparacao, apresenta-se na figura 3.5 o seu espectro:
O espectro da onda q2(t), |Q2(f)|, ambos produzidos por simulacao em software, pode ser visto na
figura 3.6, onde podem ser verificados os dados referidos anteriormente, nomeadamente o espectro
em banda de base praticamente inalterado em relacao ao da figura 3.5, bem como as componentes de
23
Figura 3.5: Modulo da transformada de Fourier de x2A(n) (Stefanazzi et al.).
alta frequencia geradas apenas a partir dos 30 kHz, tal como previsto.
Figura 3.6: Modulo da transformada de Fourier de q2(t) (Stefanazzi et al.).
3.3 Modulacao Click em hardware
De acordo com as publicacoes disponıveis sobre o tema, foram publicados tres artigos que deta-
lham realizacoes da CM em hardware: dois em 2002 com autores comuns, correspondendo a duas
fases diferentes do mesmo projecto, e um outro em 2010. Ambos os casos tiveram como objectivo a
implementacao em tempo real da modulacao.
24
O primeiro projecto, tanto na primeira como na segunda fase, teve como entrada um sinal PCM
de 16 bit amostrado a 48 kHz, constituıdo por uma soma de duas sinusoides com frequencias nao
especificadas inferiores a 20 kHz, que por inspeccao da figura 3.7 se assume serem proximas de 16
kHz e 18 kHz. No entanto, o sistema foi desenhado para um sinal de entrada que possua componentes
em toda a banda audio, ou seja, ate 20 kHz, sendo que a guardband se estende ate aos 42 kHz. Na
literatura disponıvel, este e o unico projecto com processamento em vırgula fixa.
Na primeira fase [Streitenberger and Mathis, 2002], a frequencia de amostragem do sinal de entrada
sofre uma ligeira subida para 48.8 kHz, realizada num componente especıfico. O bloco de Hilbert foi
implementado num DSP proprio, com um filtro FIR passa-banda de 51 coeficientes, sendo os operan-
dos de 16 bit. De seguida, o sinal e interpolado com um factor R = 8, realizado num outro dispositivo
proprio, com operandos de 24 bit. O bloco AEM e filtragem e dividido entre tres DSP ’s iguais ao que
foi utilizado para o bloco de Hilbert, todos com operandos de vırgula fixa de 24 bit. No primeiro e feita a
operacao de aproximacao a funcao exponencial, realizada atraves de interpolacao linear. No segundo e
no terceiro e realizada a filtragem, cada um com dois filtros FIR de 171 coeficientes. Nao ha informacao
acerca da implementacao da operacao de modulacao em quadratura. Um ultimo DSP e utilizado para
efectuar uma decimacao (com factor 8) seguida de nova interpolacao, desta vez com factor 4, e, por fim,
a determinacao das raızes do sinal, atraves da combinacao de interpolacao polinomial de grau 3 (a par-
tir da deteccao de mudanca de sinal das amostras) com uma iteracao do metodo de Newton-Rhapson.
Os zeros determinados tem resolucao de 16 bit. Por fim, a onda q(t) e gerada a partir de uma FPGA,
com resolucao de 11 bit e frequencia de comutacao igual a 97.6 kHz.
Os espectros da onda q(t), o primeiro obtido por simulacao e o segundo medido experimentalmente,
podem ser visto nas figuras 3.7 e 3.8:
Figura 3.7: Modulo da transformada de Fourier de q(t): 1a fase (simulacao, resolucao de 16 bit) (Strei-tenberger and Mathis).
25
Figura 3.8: Modulo da transformada de Fourier de q(t): 1a fase (medicao experimental, resolucao de 11bit) (Streitenberger and Mathis).
No total, sao utilizados 5 DSP e 4 outros componentes dedicados, incluindo uma FPGA, para a
implementacao em tempo real e vırgula fixa da CM.
A segunda fase [Streitenberger et al., 2002] apresenta como principais diferencas em relacao a
primeira a juncao num so DSP do bloco AEM e dos dois filtros de 171 coeficientes, e a mudanca na
resolucao do click player sintetizado numa FPGA de 11 para 10 bit. Por conseguinte, ha uma reducao
do harware utilizado de 5 para 3 DSP ’s, sendo que os restantes componentes dedicados se mantem.
O espectro da onda q(t) desta fase do projecto, medido experimentalmente, encontra-se na figura
3.9. Nele e possıvel constatar, em comparacao com a figura 3.7 (b), que o patamar de ruıdo subiu
ligeiramente.
O segundo projecto [Sozanski, 2010] foi testado com dois sinais de entrada diferentes, ambos si-
nusoides puras, amostrados a 48 kHz: um com frequencia f1 = 1 kHz e outro com frequencia f2 = 5
kHz, sendo que tem capacidade para processar sinais ate 12 kHz. O algoritmo foi implementado num
processador com palavras de vırgula flutuante de precisao simples atraves de uma linguagem propria
do processador.
O bloco de Hilbert consistiu num FIR interpolador (com factor 8) de 127 coeficientes com carac-
terıstica passa-banda, obtidos atraves da ferramenta Signal Processing Toolbox do MATLAB. Nao e
dada informacao praticamente nenhuma acerca dos restantes blocos. Apenas e referido que os ins-
tantes das passagens por zero sao calculados atraves da interpolacao polinomial linear (grau 1) do
sinal s(t), que tem uma frequencia de amostragem de 384 kHz, que a frequencia de comutacao de q(t)
e 2Ωp = 2π24 kHz e que o click player tem uma resolucao de 13 bit. Os espectros das ondas q1(t)
e q2(t), obtidos experimentalmente, e correspondentes aos dois sinais de entrada cujas frequencias
foram especificadas no paragrafo anterior, estao expostos nas figuras 3.10 e 3.11:
26
Figura 3.9: Modulo da transformada de Fourier de q(t): 2a fase, medicao experimental, resolucao de 10bit (Streitenberger et al.).
Figura 3.10: Modulo da transformada de Fourier de q1(t): medicao experimental, resolucao de 13 bit(Sozanski).
E possıvel constatar que no caso da figura 3.10, correspondente a onda q1(t) gerada a partir do
sinal de entrada sinusoidal com f1 = 1 kHz, o patamar de ruıdo se situa cerca de 100 dB abaixo das
componentes de sinal, embora sejam visıveis algumas harmonicas acima desse valor dentro da banda
de interesse (< 12 kHz), nomeadamente em 2 kHz e 3 kHz. Na figura 3.11, correspondente a onda q2(t)
gerada a partir do sinal de entrada sinusoidal com f2 = 5 kHz, o patamar de ruıdo situa-se cerca de 80
dB abaixo das componentes de sinal, embora tambem neste caso sejam visıveis algumas harmonicas
dentro da banda de interesse, nomeadamente em 4 kHz, 6 kHz e 10 kHz.
27
Figura 3.11: Modulo da transformada de Fourier de q2(t): medicao experimental, resolucao de 13 bit(Sozanski).
3.4 Modelo MATLAB
3.4.1 Introducao
Nesta seccao sera explicado o algoritmo da CM em MATLAB [Domingues and Braga, 2013], adop-
tando uma metodologia de exposicao bloco a bloco de acordo com a seccao 2.1. Todos os operandos
sao de vırgula flutuante de 64 bit. A descricao completa das operacoes da modulacao - ja com algu-
mas particularidades de processamento de sinal - e a razao pela qual este modelo serviu de base ao
trabalho desenvolvido nesta dissertacao.
3.4.2 Transformada de Hilbert e interpolacao
O bloco de Hilbert e formado por dois filtros FIR de fase linear, com 1024 coeficientes cada um,
a partir do metodo equiripple, com resposta ao impulso h1(n) e h2(n). Primeiro, sao gerados 1024
coeficientes de um filtro passa-baixo, hLP (n), recorrendo a funcao firceqrip, com 0.008 dB e 0.000009
db de ondulacao maxima, respectivamente, na banda de passagem e na banda de atenuacao. A funcao
de transferencia do filtro encontra-se na figura 3.12.
Finalmente, para a obtencao dos coeficientes dos dois filtros de Hilbert sao feitas as seguintes
operacoes:
h1(n) = 2 hLP (n) sin
(2πn
f
fS
)(3.1)
e
h2(n) = 2 hLP (n) cos
(2πn
f
fS
)(3.2)
com f = 11 kHz e fS = 384 kHz. Desta forma gera-se a caracterıstica passa-banda para ambos os
filtros que permitira ter a saıda do bloco dois sinais que sao transformada de Hilbert um do outro. Como
tal, a frequencia de corte utilizada para gerar os coeficientes hLP foi metade da banda de base, cerca
28
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2
−90
−80
−70
−60
−50
−40
−30
−20
−10
0
Normalized Frequency (relative to fs / 2)
Mag
nitu
de (
dB)
Figura 3.12: Modulo da resposta em frequencia do filtro com coeficientes hLP (n).
de 11 kHz. Os coeficientes sao multiplicados por 2 para compensar o efeito da multiplicacao por sin e
cos.
Dado que tambem se pretende simular o efeito de uma interpolacao do sinal de entrada com factor
R = 8 para corresponder a necessidade explicada na subseccao 2.1.3, o filtro assume uma estrutura
polifasica com 8 estagios, cada um com 128 coeficientes. Adicionalmente, para compensar o espa-
lhamento de energia resultante da interpolacao, ambos os sinais resultantes sao multiplicado por 8 de
forma a recuperar a sua energia inicial em banda de base. Obtem-se entao as duas componentes do
sinal analıtico fA(n), correspondentes a dois fluxos de sinal, sendo um a parte real (f(n)) e outro a
parte imaginaria (f(n)).
3.4.3 Modulador exponencial analıtico e filtragem
Este bloco pretende realizar o equivalente discreto da expressao (2.9), bem como a filtragem poste-
rior, que tem como sinal de saıda zf (n). Adicionalmente, neste bloco e feita a conjugacao de zf (n), que
apesar de ter sido apresentada em 2.1.4 como pertencendo ao bloco da modulacao em quadratura, por
ser uma operacao linear, pode ser implementada neste bloco, ainda antes da filtragem, com a troca do
sinal da parte imaginaria da expressao (2.8). A operacao que e realizada esta expressa na equacao
(3.3):
z∗(n) =[e−jfA(n)
]∗=[ef(n)−jf(n)
]∗= ef(n)+jf(n) = ef(n) · ejf(n). (3.3)
O calculo de cada uma das exponenciais e efectuado atraves de aproximacoes em serie de Ma-
cLaurin, conforme descrito no final da subseccao 2.1.3: uma de uma exponencial real ef(n) e outra de
uma exponencial complexa ejf(n). Estes factores sao posteriormente multiplicados e o seu resultado
separado em parte real e imaginaria, atraves das funcoes real e imag do MATLAB. Os coeficientes
para a aproximacao a exponencial real foram obtidos atraves da expressao (2.11), com N = R = 8, e
os coeficientes para a aproximacao a exponencial complexa foram obtidos atraves da expressao (2.10),
tambem com N = R = 8.
29
A determinacao do valor de N foi feita atraves de um metodo iterativo que minimiza o erro entre o
valor exacto e a aproximacao da exponencial, partindo de duas condicoes iniciais: o valor maximo S
que |ez| pode tomar e o erro maximo ε0 admitido para a aproximacao. Ou seja, minimiza o valor da
expressao
ε =
∣∣∣∣∣ez −N−1∑k=0
zk
k!
∣∣∣∣∣ ≤ ε0, (3.4)
com S = π2 (como consequencia do que foi referido na subseccao 2.1.3) e ε0 ≤ 1/2nbit−1, em que nbit
e a resolucao pretendida para o sistema, neste caso 16 bit. No caso deste modelo, o resultado para N
foi de 10, e foi produzida uma figura que apresenta o erro ε tanto na parte real como imaginaria:
−1−0.5
00.5
1
−1−0.5
00.5
10
0.5
1
1.5x 10
−6
Re z Im z
|ε|
Figura 3.13: Erro entre o valor real e aproximado de ez.
A razao pela qual foram escolhidos apenas 8 coeficientes para a implementacao prende-se com o
facto de ser bastante mais pratico do ponto de vista do calculo computacional lidar com operandos de
potencias de base 2, como sera clarificado na seccao 4.3.
Os coeficientes para os filtros seguintes – que, apesar de serem necessarios dois, um para a parte
real e outro para a parte imaginaria, sao iguais – sao obtidos recorrendo a funcao firls do MATLAB
que, partindo de um conjunto de especificacoes da resposta em frequencia e da ordem pretendida para
o filtro, minimiza o erro quadratico medio entre a caracterıstica ideal desejada e a caracterıstica real.
Neste caso os filtros possuem 512 coeficientes, e as especificacoes do filtro ideal foram uma resposta
linear e unitaria de 0 a 22 kHz, e uma banda de atenuacao, idealmente com ganho linear 0, a comecar
em 24 kHz e a estender-se ate metade da frequencia de amostragem do sinal que se pretende filtrar,
192 kHz. Apos a filtragem obtem-se o sinal zf (n) referido em (2.12), dividido em parte real e imaginaria.
3.4.4 Modulador em quadratura
A modulacao em quadratura consiste na computacao da operacao discreta identica a (2.14), ou
seja, na soma de duas parcelas: uma, a multiplicacao da parte real de zf (n), xf (n), por cos(Ωpn) e
30
outra a multiplicacao da parte imaginaria de zf (n), yf (n), por sin(Ωpn), sendo Ωp = 2πfp e fp = 24 kHz.
A operacao de conjugacao, conforme explicado na subseccao 3.4.3, foi efectuada no bloco AEM deste
modelo.
Devido ao facto desta operacao poder ser efectuada com operacoes basicas (multiplicacao e soma),
a concretizacao deste bloco e bastante simples. E do sinal resultante do mesmo, s(n), que serao
extraıdos os instantes das raızes.
3.4.5 Passagem por zero
Neste bloco comeca-se por detectar uma mudanca de sinal entre amostras, isolando-se, de seguida,
para alem das duas amostras onde foi detectada a mudanca de sinal, as duas amostras contıguas a
estas ultimas. Desta forma ter-se-a sempre duas amostras positivas e duas amostras negativas. De
seguida, e feita uma verificacao da monotonia desse conjunto para garantir a unicidade da raiz no
intervalo que contem as amostras recolhidas.
O metodo utilizado para encontrar a raiz e o metodo da bisseccao, cujo algoritmo e realizado numa
rotina propria. Para o aplicar, e necessario calcular valores de s(n) entre amostras, em que este nao
esta definido. Para tal e gerado um polinomio interpolador de ordem 3 sempre que e detectada uma
passagem por zero. Os resultados da aplicacao do metodo sao depois guardados para formar a onda
PWM q(t). De forma a ilustrar o funcionamento correcto do modelo, o mesmo foi testado com um sinal
de entrada sinusoidal de 1 kHz. O espectro da onda q(t) produzida encontra-se na figura 3.14.
101
102
103
104
105
106
107
108
109
−200
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 3.14: Modulo da transformada de Fourier de q(t): simulacao do modelo em MATLAB (Dominguesand Braga).
E possıvel ver o pico a 1 kHz, que corresponde ao espectro do sinal de entrada, bem como as
componentes de alta frequencia, nomeadamente o pico em torno de 2fp = 48 kHz, a frequencia de
comutacao de q(t), bem como as componentes em torno de multiplos inteiros de 48 kHz. E de notar
tambem a presenca de harmonicas do sinal de entrada, a 2 e 3 kHz, ainda que estas estejam abaixo
do patamar de -100 dB.
31
Foi a partir do modelo acima descrito que foi produzido o trabalho que sera descrito no capıtulo 4.
Apesar da estrutura base do programa ser a mesma e de haver possibilidade de utilizar dados comuns,
ha diferencas de concretizacao entre ambos, que serao explicitadas oportunamente.
32
Capıtulo 4
Modelo desenvolvido
4.1 Plataforma de desenvolvimento e estrutura do programa
Neste capıtulo sera explicada a implementacao da CM em tempo real, atraves de um sistema
electronico de processamento de sinal descrito em linguagem C com operandos de vırgula fixa de
16 bit, sendo utilizados operandos de 32 bit em alguns calculos intermedios. A escolha da linguagem
tem como base o facto de esta ser suficientemente proxima dos dois suportes de descricao do algoritmo
da CM que se pretende interligar: a linguagem MATLAB, de alto nıvel, e em cujo modelo ja existente
da CM esta dissertacao se baseia, e Verilog, uma linguagem de descricao de hardware.
O programa foi desenvolvido em Microsoft Visual Studio Express, com o auxılio do MATLAB para
producao de transformadas de Fourier, de visualizacao de sinais no domınio do tempo e interpretacao
dos resultados. O sinal de entrada, bem como todos os dados necessarios ao processamento (tais
como coeficientes de filtros, de polinomios, valores tabelados de sin e cos, entre outros) sao lidos a
partir de ficheiros criados atraves do MATLAB, em que cada linha dos mesmos contem o valor decimal
de cada amostra em causa.
A estrutura do programa consiste num ciclo infinito de leitura do ficheiro que contem o sinal de
entrada, e cuja condicao de paragem e o fim do ficheiro. Entre a leitura de duas amostras consecutivas
e efectuado o mesmo conjunto de procedimentos. Para clareza do codigo e facilidade na localizacao e
resolucao de problemas, e frequente a utilizacao de funcoes para realizacao das operacoes dos blocos.
No anexo A.1 apresenta-se em pseudo-codigo a estrutura algorıtmica do programa desenvolvido em C.
Nas seccoes 4.5 a 4.8 sera explicada bloco a bloco a implementacao em C, cuja divisao e a mesma
da seccao 2.1 de forma a facilitar a comparacao das duas perspectivas. Na figura 4.1 apresenta-se o
esquema da implementacao da CM.
Antes da explicacao dos blocos da CM, e tendo em vista a sua mais completa compreensao,
apresentam-se nas seccoes 4.2 a 4.4 explicacoes simples do formato de numeros inteiros em vırgula
fixa, de alguns aspectos relevantes das respectivas operacoes e por fim dos formatos escolhidos para
os ficheiros de entrada. Os resultados da implementacao de cada bloco podem ser consultados nas
seccoes equivalentes do capıtulo 5: 5.2 a 5.5.
33
Figura 4.1: Esquema de implementacao da CM.
4.2 Operandos de vırgula fixa
A notacao de vırgula fixa divide-se em tres partes de acordo com o representado na figura 4.2,
qualquer que seja o numero total de bit escolhido para a representacao (doravante designado Nbit)
[Tavares and Piedade, 2006]:
+- k n
Figura 4.2: Esquema de representacao em vırgula fixa.
O bit mais significativo corresponde ao bit de sinal. De seguida, sao utilizados k bit para representar
a parte inteira do numero, sendo que k pode tomar valores inteiros de 0 a Nbit − 1. Os n bit menos
significativos representam a parte fraccionaria, e tambem podem tomar valores inteiros entre 0 eNbit−1,
sendo imperativo que a igualdade em (4.1) se verifique:
Nbit = 1 + k + n. (4.1)
Apesar de na sua genese os sinais serem binarios (com cada amostra a corresponder a uma palavra
com Nbit bit), os mesmos sao processados como sequencias discretas de numeros inteiros. Conside-
rando o valor decimal de uma amostra sample, a determinacao do seu valor inteiro sampleint e realizada
atraves da operacao
sampleint = bsample · ( 2n − 1)c, (4.2)
em que n e o numero de bit da parte fraccionaria de sampleint e b·c corresponde ao arredondamento
por corte a unidade do calculo efectuado. O resultado e calculado em formato binario na notacao de
complemento para dois.
Uma vez fixado Nbit, o valor de n esta dependente de uma escolha adequada para k de acordo com
a relacao expressa em (4.1), que se prende com a gama dinamica do sinal em causa. Num exemplo
simples, com muitas semelhancas com o caso dos sinais PCM, consideraremos um sinal a(t) cujo
modulo e menor ou igual a m, ou seja,
|a(t)| ≤ m, m ∈ N ∧m ≥ 1, (4.3)
34
podendo m ser uma grandeza fısica arbitraria, ou um respectivo multiplo ou sub-multiplo. Para este
caso, uma escolha adequada para k seria
k = dlog2me, (4.4)
sendo atribuıdos a parte fraccionaria Nbit−k−1 bit. Para uma perspectiva mais concreta desta seccao,
em 4.4 e apresentado o caso concreto da escolha da aritmetica para o sinal de entrada.
4.3 Operacoes de vırgula fixa
A principal diferenca entre o modelo em C e o modelo em MATLAB reside no formato dos operandos
e na realizacao das operacoes matematicas. No caso do modelo em MATLAB, os operandos sao de
vırgula flutuante, e como tal, as operacoes sao efectuadas pelo processador de forma transparente ao
utilizador. No caso das operacoes em vırgula fixa pretende-se emular o funcionamento de hardware de-
dicado, necessariamente mais rapido, em que nao e utilizado um processador para realizar os calculos,
mas sim unidades de calculo aritmetico.
Os blocos mais basicos destas unidades sao constituıdos por somadores e multiplicadores, que
efectuam as operacoes de soma, subtraccao (que corresponde a uma soma em que um dos operandos
e um numero negativo) ou multiplicacao. Operacoes mais complexas, como divisao ou convolucao,
agregam varios destes blocos. Na pratica, esses blocos nao sao sintetizados no programa em C, sendo
feitos recorrendo as unidades de calculo do processador. A diferenca reside, portanto, nos operandos,
e na forma como estes sao adequados aos calculos. Para se saber qual o formato de cada resultado
de uma soma ou multiplicacao, que terao uma explicacao resumida nesta seccao, e necessario ter em
conta o formato de cada um dos respectivos operandos.
No caso da soma (ou subtraccao), os mesmos tem necessariamente de ter o mesmo formato de
vırgula fixa Qn. Dado que o resultado pode nao ser representavel pelo formato Qn, e necessario atribuir
mais um bit ao resultado, designadamente a parte inteira, para excluir o risco de overflow (ou underflow)
no resultado. No caso do exemplo (4.5), em que as parcelas estao em formato decimal,
0.125 + 0.25 = 0.375 (4.5)
tanto os operandos como o resultado sao representaveis no formato Q15, nao havendo necessidade de
qualquer ajuste, visto que o bit a mais gerado e automaticamente excluıdo por se escolherem apenas
os 16 bits menos significativos, ficando assim o 17o de fora. Esta operacao com operandos inteiros
seria
4095 + 8191 = 12286. (4.6)
Ja no caso do exemplo (4.7),
35
0.5 + 0.75 = 1.25 , (4.7)
os operandos podem ser representados em Q15 mas o resultado so pode ser representado em Q14.
Neste caso e necessario fazer uma de duas alteracoes: ou se converte o formato dos operandos para
Q14, diminuindo consequentemente a precisao do calculo, ou se converte apenas o resultado, depois
da soma feita, para Q14. Em geral opta-se pela segunda opcao. Tal e conseguido a custa da operacao
binaria shift right (), tal como demonstrado no exemplo (4.8), a operacao com inteiros correspondente
a (4.7). Neste caso, ambas as parcelas estao em Q15, e por forca da operacao de shift right o resultado
esta em Q14.
(16383 + 24575) 1 = 20478. (4.8)
Os exemplos apresentados dizem apenas respeito a numeros positivos, mas sao equivalentes para
numeros negativos, com a diferenca de que estes aparecem sob a forma de numeros inteiros positivos
maiores ou iguais a 32768. Este valor corresponde ao menor inteiro que representa numeros negati-
vos com 16 bit em qualquer formato. Atendendo a que os numeros negativos possuem como bit mais
significativo o algarismo 1, os inteiros de 16 bit que os representam serao sempre maiores ou iguais a
32768, que representa o numero negativo mais proximo de zero que se pode obter no formato em que
estiver.
No caso da multiplicacao nao se requer que os operandos estejam no mesmo formato. Conside-
rando que ambos os operandos possuem Nbit e um deles esta em Qn1e o outro em Qn2
, o resultado
tera 2Nbit. Desses, um deles (o bit mais significativo) corresponde a um bit de sinal em duplicado. Por
essa razao, esse e descartado, bem como os n − 1 bits menos significativos, para se obter um resul-
tado com Nbit bit, sendo o seu formato Qn1+n2+1−Nbit [Tavares and Piedade, 2006], garantindo desta
forma que o resultado pode ser representado sem overflow ou underflow. Na tabela 4.1 apresentam-se
varias combinacoes possıveis para formatos de operandos e respectivos resultados na multiplicacao
em vırgula fixa:
Operando 1 Operando 2 Resultado Exemplo (decimal) Exemplo (inteiro de 16 bit)Q15 Q15 Q15 0.5 · 0.5 = 0.25 16383 · 16383 = 8191Q15 Q14 Q14 0.75 · (−1.5) = −1.125 24575 · 40962 = 47106Q14 Q14 Q13 1.5 · 1.5 = 2.25 24574 · 24574 = 8191Q14 Q13 Q12 (−1.75) · 2.75 = −4.8125 36866 · 22525 = 45827
Tabela 4.1: Exemplos de multiplicacao em vırgula fixa: combinacoes de formatos de operandos erespectivos resultados.
A semelhanca do que tambem pode suceder na soma, o formato do resultado de uma operacao de
multiplicacao pode nao ser necessariamente o explicitado na terceira coluna da tabela anterior. Se os
operandos forem suficientemente pequenos, pode nao ser preciso um formato com tantos bit reserva-
dos para a representacao da parte inteira, podendo assim reservar-se mais bits para a representacao
da parte decimal. O formato adequado depende naturalmente dos valores dos operandos, e somente
36
quando estes estao limitados por valores bem conhecidos e que podem ser feitos ajustes sem riscos de
overflow e underflow, por um lado, ou perda de precisao, por outro. Ao longo do programa em C foram
feitos varios acertos de forma a garantir em cada calculo intermedio a maxima precisao permitida sem
comprometer a correcta representacao da total gama dinamica do sinal.
E conveniente referir um caso especial de multiplicacao. Se um dos operandos for uma potencia
inteira de base 2, ou seja, da forma 2b, o resultado da multiplicacao pode ser obtido com uma operacao
de shift left aritmetico de b bit, ou seja, mantem o bit de sinal e acrescenta ’0’ a direita do numero,
deslocando para a esquerda todos os outros e descartando o bit com peso imediatamente inferior ao
bit de sinal. Neste caso o resultado tem o mesmo numero de bits do operando que sofre o shift. Esta
particularidade e valida tanto para expoentes b positivos ou negativos, desde que sejam inteiros. Ou
seja, e valida para divisoes cujo divisor seja uma potencia inteira de base 2, ou seja, da forma 2b com
b ≤ −1. Por exemplo, se a multiplicacao for entre dois factores 24 e 16(= 24), o resultado e calculado
como (24) 4, e numa divisao de 128 por 32(= 25) o resultado e dado por (128) 5.
4.4 Aritmetica dos sinais de entrada
Conforme referido em 1.2, o sistema tem como entrada um sinal de audio lido a partir de um ficheiro
com amostras em formato decimal amostrado a 48 kHz, e como resultado um conjunto de ciclos de
trabalho (duty cycles) de uma onda do tipo PWM com resolucao de 16 bit.
Dado que se pretende uma implementacao em toda a gama dinamica possıvel, ou seja, com o
sinal de entrada f(n) a variar entre π2 e −π2 [Logan, 1984a], a aritmetica de vırgula fixa utilizada para
representar f(n) foi Q14, ou seja, dos 16 bit que constituem cada amostra do sinal de entrada, os 14
bit menos significativos sao para a parte decimal, o bit com peso 15 corresponde a parte inteira e o bit
mais significativo corresponde ao bit de sinal. Desta forma podem ser representados numeros reais no
intervalo [−2; 2[ com resolucao de 2−14.
Ja no proprio programa, cada valor deste sinal, que esta armazenado em modo string, e conver-
tido para formato numerico, neste caso um (signed) short, que armazena um inteiro de 16 bit. Os
resultados das operacoes da CM, tanto intermedios como finais, sao escritos em ficheiros, novamente
em formato string (ASCII), cujo conteudo e processado em MATLAB.
Este procedimento e feito de forma analoga para todos os ficheiros que contem dados de entrada
do sistema, sejam sinais, coeficientes de filtros ou de polinomios ou valores tabelados de funcoes. Na
tabela 4.2 e possıvel verificar quais os ficheiros lidos pelo sistema, os valores entre os quais os mesmos
variam e a notacao Qn escolhida para os representar.
37
Entrada Valores Notacao
Sinal de entrada [π2 ; −π2 ] Q14
Coeficientes dos dois filtros de Hilbert ]− 1; 1[ Q15
Coeficientes da aproximacao da funcao exponencial ] 18! ; 1] Q15
Coeficientes do filtro pos AEM ]− 1; 1[ Q15
Valores tabelados de sin amostrado a 48 kHz ]− 1; 1[ Q15
Tabela 4.2: Ficheiros de entrada do sistema e respectivos formatos em vırgula fixa.
4.5 Transformada de Hilbert e interpolacao
Dado que neste bloco se pretende nao so calcular a transformada de Hilbert como efectuar uma
interpolacao com factor R = 8, este estagio, a semelhanca do bloco no modelo em MATLAB, con-
siste num filtro FIR com estrutura polifasica de 8 estagios com 128 coeficientes cada um, e por fim
na multiplicacao do sinal de saıda por 8, para repor a energia original do sinal em banda de base,
espalhada no espectro pela interpolacao. O esquema completo deste bloco pode ser visto na figura
4.3:
Figura 4.3: Esquema de implementacao do bloco da transformada de Hilbert e interpolacao.
Os coeficientes utilizados foram os mesmos, expressos em (3.1) e (3.2) e convertidos para o formato
Q15 ja que o seu valor varia entre −1 e 1. Apesar de no contexto do programa nao se poder mudar
a frequencia de amostragem real dos sinais a ser processados, o efeito e emulado, dado que cada
amostra de saıda do filtro e resultado do calculo da convolucao das amostras do sinal com um dos
estagios.
Apesar de em termos teoricos so se poder aplicar transformadas de Hilbert a sinais passa-banda
[Oppenheim and Schafer], e por causa disso a caracterıstica dos filtros que calculam a transformada
nao poder ter componente DC, optou-se por projectar neste modelo filtros cujo modulo da resposta em
frequencia e uma caracterıstica passa-baixo, abrangendo DC, sem implicacoes no bom funcionamento
do algoritmo. Tal sucede por duas razoes: a primeira porque o sinal de entrada pode ser controlado
para nunca conter componentes abaixo de uma certa frequencia, como sucedeu em todos os testes
efectuados, que no caso de aplicacoes audio e normalmente convencionada para 20 Hz; a segunda
porque uma caracterıstica passa-banda em que a frequencia inferior e muito proxima de DC implicaria
uma banda de transicao inferior com declive muito acentuado, aumentando o numero de coeficientes
ou a banda de atenuacao de tal forma que impossibilita a sua implementacao pratica.
38
Nas figuras 4.4 e 4.5 podem ser vistos, respectivamente, os modulos das respostas em frequencia
dos filtros com coeficientes h1(n) e h2(n). Constata-se que a frequencia de corte normalizada a -3 dB
e de sensivelmente 0.115π rad/amostra, tanto num caso como noutro, o que corresponde aproximada-
mente a 22 kHz, tal como previsto na subseccao 3.4.2.
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2
−90
−80
−70
−60
−50
−40
−30
−20
−10
0
Normalized Frequency (relative to fs / 2)
Mag
nitu
de (
dB)
Figura 4.4: Modulo da resposta em frequencia de h1(n).
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2
−80
−70
−60
−50
−40
−30
−20
−10
0
Normalized Frequency (relative to fs / 2)
Mag
nitu
de (
dB)
Figura 4.5: Modulo da resposta em frequencia de h2(n).
Como consequencia do sinal de entrada estar em formato Q14 e os coeficientes do filtro estarem
em formato Q15, o resultado da filtragem – que consiste em convolucoes discretas (multiplicacoes e
acumulacoes) – encontra-se em Q14 (ver tabela 4.1). Os sinais de saıda dos filtros, f(n) e f(n),
sao posteriormente multiplicados por 8, atraves de um shift right de 3 bit, para realizar a ja referida
compensacao da perda de energia da interpolacao. Esta operacao ainda e efectuada sobre uma
variavel temporaria de 32 bit, para que, aquando da posterior conversao para 16 bit, nao haja perda de
resolucao no resultado. A juncao destes dois deslocamentos resulta num shift right final de 13 bit sobre
as variaveis de 32 bit que armazenam os resultados das convolucoes. Esta ultima operacao produz os
sinais de saıda deste bloco.
39
4.6 Modulador exponencial analıtico e filtragem
A implementacao deste bloco tem a mesma estrutura do bloco do modelo em MATLAB, ou seja,
consiste na conjugacao do resultado da operacao (2.9). Divide-se em duas partes distintas: a primeira
e a producao do sinal z∗(n) e a segunda e a filtragem das suas partes real e imaginaria. O esquema
completo deste bloco encontra-se na figura 4.6.
Figura 4.6: Esquema da implementacao do bloco AEM.
A primeira parte trata-se da exponenciacao complexa de um sinal analıtico que e, por conseguinte,
complexo. Por isso tem de se proceder ao calculo das partes real e imaginaria de z(n), respectivamente
x(n) e y(n), em separado. Com recurso a uma manipulacao algebrica simples, e partindo da equacao
(3.3), tem-se:
z∗(n) = ef(n)+jf(n) = ef(n) · ejf(n) = ef(n)︸ ︷︷ ︸e1
·(Reejf(n)+ jImejf(n)
)︸ ︷︷ ︸
e2
. (4.9)
Tal como foi feito no modelo em MATLAB, no caso de e1, dado tratar-se de uma exponencial real, foi
utilizado o equivalente discreto da equacao (2.11) com N = 8. Foi feito um agrupamento de factores e
parcelas em blocos de Horner (ax + b), expressos em (4.10), de modo a facilitar a sua implementacao
em hardware, nomeadamente em FPGA.
ef(n) ≈ 1 + f(n) +
[1
2!+
1
3!f(n)
][f(n)]2 +
[(1
4!+
1
5!f(n)
)+
(1
6!+
1
7!f(n)
)[f(n)]2
][f(n)]4. (4.10)
Os coeficientes 1k! sao constantes lidas de um ficheiro no inıcio do programa, convertidos para
inteiros de 16 bit no formato Q15. Como as amostras de f(n) variam entre π2 e −π2 , o valor de ef(n)
varia entre e−π2 ≈ 0, 21 e e
π2 ≈ 4, 81, pelo que o formato em vırgula fixa adequado para armazenar o
seu valor e Q12.
O desenho do programa foi feito de forma a que so sejam realizadas operacoes basicas com dois
operandos, sendo em cada passo avaliada a aritmetica do resultado e decidida (ou nao) a sua trunca-
tura de 32 para 16 bit. Dada a quantidade de operacoes envolvidas, serao apenas detalhadas no corpo
40
principal deste texto as opcoes que adquirem maior relevancia ou que nao sejam de facil compreensao.
Para o calculo de e2, uma exponencial complexa, foi utilizado tambem a aproximacao da exponencial
em serie de MacLaurin com N = 8, ou seja:
ejf(n) =
7∑k=0
(jf(n))k
k!= 1+ jf(n)− [f(n)]2
2!− j [f(n)]3
3!+
[f(n)]4
4!+ j
[f(n)]5
5!− [f(n)]6
6!− j [f(n)]7
7!, (4.11)
onde as parcelas reais foram separadas das parcelas imaginarias, ficando agrupadas na forma
ejf(n) = 1− [f(n)]2
2!+
[f(n)]4
4!− [f(n)]6
6!︸ ︷︷ ︸Reejf(n)=cos f(n)
+j
(f(n)− [f(n)]3
3!+
[f(n)]5
5!− [f(n)]7
7!
)︸ ︷︷ ︸
Imejf(n)=sin f(n)
. (4.12)
Consequentemente, foram criadas duas funcoes para aproximar as partes real e imaginaria da
exponencial complexa. Ao contrario da funcao utilizada para calcular a aproximacao da exponencial
real, o resultado de ambas as funcoes encontra-se no formato Q15. Como o calculo equivale ao calculo
de duas funcoes trigonometricas, cos no caso da parte real e sin no caso da parte imaginaria, tanto um
como outro tem como contradomınio o intervalo [−1; 1[.
Apos o calculo de e1 e das duas componentes de e2, a expressao final de (4.9) pode ser desenvolvida
de forma a separar o calculo das partes real e imaginaria, finalizando assim a aproximacao a funcao
exponencial:
z(n) = ef(n) ·(Ree−jf(n)+ jIme−jf(n)
)= ef(n)Ree−jf(n)+ j
(ef(n)Ime−jf(n)
). (4.13)
Em cada parcela da forma final da expressao (4.13), a multiplicacao contem um factor no formato
Q12 e outro no formato Q15, pelo que o resultado com 16 bit vira no formato Q12.
A segunda parte, que consiste na filtragem passa-baixo das partes real e imaginaria de z(n), faz
uso da funcao firls do MATLAB para gerar 512 coeficientes, usados em ambos os filtros, em que
as especificacoes de frequencia ideias foram a de ganho linear e unitario na banda de passagem, ate
sensivelmente 22 kHz, e ganho 0 na banda de atenuacao, a partir dos 24 kHz. A funcao de transferencia
do filtro encontra-se na figura 4.7.
A semelhanca dos casos anteriores, os coeficientes possuem valores entre −1 e 1, pelo que a
aritmetica escolhida para os representar foi Q15. Como as duas componentes de z(n) se encontram em
Q12, o resultado da multiplicacao dos coeficientes pelas amostras, apos a eliminacao do bit de sinal em
duplicado e a truncatura de 32 bit para 16 bit, tem como formato final Q12, tanto para xf (n) como para
yf (n), que constituem a saıda deste bloco.
41
0 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2
−100
−80
−60
−40
−20
0
Normalized Frequency (relative to fs / 2)
Mag
nitu
de (
dB)
Figura 4.7: Funcao de transferencia do filtro passa-baixo pos AEM.
4.7 Modulador em quadratura
Este bloco compreende a realizacao da operacao (2.14), e e bastante simples de implementar.
Consiste na soma de duas parcelas, que sao a multiplicacao dos sinais de saıda do filtro pos AEM,
xf (n) e yf (n), por cos Ωpn e sin Ωpn, respectivamente, com Ωp = 2πfp rad/s, fp = 24 kHz. O esquema
completo deste bloco pode ser visto na figura 4.8:
Figura 4.8: Esquema de implementacao do bloco modulador em quadratura.
Os valores dos sinais sinusoidais foram obtidos atraves da amostragem do sinal contınuo sin Ωpt,
com frequencia de amostragem igual a do sinal a ser processado na cadeia da CM, ou seja, 384 kHz.
Dado que se trata de um sinal periodico, ao dividir-se a frequencia de amostragem por fp obtem-se
o numero de amostras por perıodo necessarias para representar o sinal, neste caso 16. Como tal,
foi criado em MATLAB um script que gera estes 16 valores e escreve-os para um ficheiro em formato
decimal, sendo estes lidos no inıcio do programa em C e armazenados num vector em formato de
vırgula fixa Q15. Como os valores para sin e cos sao os mesmos, diferindo apenas na fase inicial,
e apenas utilizado um vector para guardar os valores de ambos, diferindo apenas o valor inicial da
variavel que indexa a sua posicao: no caso do sin e 0 e no caso do cos e 4. Essa variavel de indexacao
e incrementada no final de cada ciclo de processamento, e assim que atinge a ultima posicao do vector
e posta novamente a zero, reiniciando-se um ciclo que percorre novamente todos os valores.
Em relacao a aritmetica, as amostras de cos Ωpn e sin Ωpn estao em Q15 e os sinais xf (n) e yf (n)
42
estao em Q12. Por conseguinte, apos a eliminacao do bit de sinal em duplicado e a passagem de 32
bit para 16 bit, o resultado vira em formato Q12, que garante o correcto armazenamento dos valores da
operacao. Por fim, os dois sinais sao somados, com o formato do resultado a poder ser armazenado em
Q12 sem risco de overflow, pois a multiplicacao por sin e cos diminui para metade a amplitude em ambos
os sinais. O resultado da soma constitui o sinal s(n), sobre o qual vao ser procurados os instantes de
passagem por zero.
4.8 Passagem por zero
4.8.1 Aspectos gerais
Este bloco tem por objectivo determinar os instantes de passagem por zero do sinal de saıda do
modulador em quadratura, s(n). Os valores obtidos, em conjunto com os valores dos zeros da onda
portandora cos Ωpn, determinarao os instantes de da onda PWM q(t), a ser gerada posteriormente. O
esquema completo deste bloco pode ser visto na figura 4.9:
Figura 4.9: Esquema de implementacao do bloco passagem por zero.
E oportuno recordar que, conforme referido na seccao 2.1.4, se for cumprida a condicao |f(n)| ≤ π2 ,
cada zero de s(n) esta situado entre um zero da onda portadora que e multiplicada pela parte imaginaria
de zf (n), yf (n), neste caso cos Ωpn. As passagens por zero de sinais sinusoidais, nomeadamente da
funcao cos Ωpn, estao bem determinadas: ocorrem duas vezes por perıodo, ou seja, tem a frequencia
de 2fp = 48 kHz. Tendo estes dois factos em conta, para produzir uma onda do tipo PWM basta
associar ao flanco ascendente o zero de cos Ωpn, com tempos bem definidos, e ao flanco descendente
a passagem por zero de s(n), cujo instante pode ser determinado em relacao ao do flanco ascendente
de forma relativa. O resultado obtido determina, com uma resolucao de 16 bit (neste caso), o valor da
duracao relativa do ciclo de trabalho de uma onda rectangular com um perıodo de 48 kHz. Na figura
4.10 e apresentada uma ampliacao de um exemplo dos dois sinais s(n) e cos Ωpn, onde e possıvel
verificar o entrelacamento dos zeros de cada onda.
De acordo com a explicacao da seccao 4.7, a onda cos Ωpn possui exactamente 16 pontos por
perıodo, ou seja, 8 pontos entre dois zeros consecutivos (contando com o instante de um dos zeros).
No programa em C, no momento em que e detectada uma passagem por zero de cos Ωpn e reinicializado
43
6880 6885 6890 6895 6900 6905 6910 6915 6920 6925
−1.5
−1
−0.5
0
0.5
1
1.5A
mpl
itude
Figura 4.10: Amostras de s(n) (vermelho) e cos Ωpn (azul): ampliacao de exemplo.
uma variavel (inc) com a funcao de contador que tem um valor mınimo de 0 e um valor maximo de 7
(3 bit), que e incrementada cada vez que e produzida uma amostra de s(n). Quando e detectada uma
passagem por zero de s(n) o valor dessa variavel e guardado, iniciando-se uma processo de procura do
instante de passagem por zero com maior resolucao, que tem essencialmente duas fases. Na primeira,
sao utilizadas 4 amostras consecutivas de s(n), duas negativas e duas positivas, para se produzir uma
funcao que aproxime s(n) para valores entre amostras. A forma escolhida para o fazer foi o polinomio
interpolador de Lagrange, e a explicacao para tal escolha e apresentada na subseccao 4.8.2. Na
segunda, e utilizado o metodo da bisseccao para calcular a posicao da raiz com a precisao de 16 bit. A
justificacao e explicacao desta opcao sao detalhadas na subseccao 4.8.3.
O resultado final do valor do ciclo de trabalho, com a resolucao de 16 bit, e composto, nos tres bits
mais significativos, pelo valor da variavel inc, sendo os restantes 13 bits correspondentes aos 13 bits
mais significativos do resultado da aplicacao do metodo da bisseccao.
4.8.2 Polinomio interpolador de Lagrange
Qualquer metodo iterativo de procura de raızes a partir de um sinal discreto tem necessidade de
estimar valores entre as amostras que o compoem. Tal e conseguido, entre outras opcoes, atraves de
polinomios interpoladores. No contexto deste trabalho, nomeadamente tendo em conta os requisitos de
implementacao em hardware e em tempo real, existem duas limitacoes a ter em conta na escolha dos
polinomios: evitar a operacao de divisao e minimizar a complexidade e latencia no calculo de um valor
pedido.
Para a interpolacao de s(n), e de forma a tirar proveito de algumas particularidades do sinal em
causa, foi escolhido implementar o polinomio interpolador de Lagrange de grau 3. Partindo de 4 amos-
tras do sinal s(n), s−1 = s(n−1), s0 = s(n0), s1 = s(n1) e s2 = s(n2), um valor intermedio x e calculado
atraves de
44
p(x) =
2∑k=−1
skl′k(x) = s−1l
′−1(x) + s0l
′0(x) + s1l
′1(x) + s2l
′2(x), (4.14)
em que l′k(x) sao polinomios de Lagrange, que toma cada um a forma
l′j(x) =∏
−1≤m≤k,m 6=k
x− xmxj − xm
. (4.15)
Para cada intervalo entre amostras temos uma resolucao de 16 bit, o que corresponde a 216 inter-
valos. Estes tem a particularidade de serem equiespacados, dado que a frequencia de amostragem e
uniforme. Por conseguinte, tendo em conta que so necessitamos do valor relativo do instante e esse
esta situado entre duas amostras consecutivas de sinais diferentes (s0 e s1), podemos convencionar
que os instantes em que estas ocorrem, respectivamente n0 e n1, correspondem aos valores relativos
0 e 1, ou 0 e 65535 em inteiros de 16 bit (em binario correspondem aos bits todos a 0 ou todos a 1). Es-
tendendo esta convencao aos restantes instantes, tem-se n−1 = −1 e n2 = 2, pelo que se substituirmos
esses valores nas varias formas de (4.15) obtemos
l′−1(x) =(x− n0)(x− n1)(x− n2)
(x−1 − n0)(x−1 − n1)(x−1 − n2)= K−1 (x− 1)(x2 − 2x)︸ ︷︷ ︸
l−1(x)
,K−1 = −1
6(4.16a)
l′0(x) =(x− n−1)(x− n1)(x− n2)
(x0 − n−1)(x0 − n1)(x0 − n2)= K0 (x+ 1)(x− 1)(x− 2)︸ ︷︷ ︸
l0(x)
,K0 =1
2, (4.16b)
l′1(x) =(x− n−1)(x− n0)(x− n2)
(x1 − n−1)(x1 − n0)(x1 − n2)= K1 (x+ 1)(x2 + 2x)︸ ︷︷ ︸
l1(x)
,K1 = −1
2, (4.16c)
l′2(x) =(x− n−1)(x− n0)(x− n1)
(x2 − n−1)(x2 − n0)(x2 − n0)= K2 x(x2 − 1)︸ ︷︷ ︸
l2(x)
,K2 =1
6. (4.16d)
Para o calculo de cada lk foi criada uma funcao especıfica, onde eram reproduzidas as operacoes
de (4.16) na forma final, exceptuando a multiplicacao pela respectiva constante Kj . Por fim, o calculo
final do resultado da interpolacao e feito na funcao interpol, onde sao invocadas todas as funcoes
lk(x), multiplicadas pelo respectivo valor Kj e, por fim, adicionadas, conforme a equacao (4.14). O
retorno da funcao corresponde a uma variavel de 16 bit em formato Q12 o que esta de acordo com o
intervalo de valores que s(n) pode assumir.
O agrupamento dos factores em (4.16) foi desenhado para que todos os resultados, tanto os pro-
visorios como os finais, necessitassem do formato com menor numero de bits para representar a parte
inteira, isto e, tentando maximizar o n em Qn. Para tal, foi feito um pequeno programa em MATLAB
que, para cada polinomio lk, produzia graficos com diversos resultados resultantes das diferentes
organizacoes dos factores. Esses graficos encontram-se nas figuras 4.11 a 4.14.
Conforme e possıvel constatar pelos valores das figuras anteriores, a aritmetica adequada para
representar os resultados dos polinomios l−1(x) e l2(x) e Q15 e para l0(x) e l1(x) e Q14. Aquando
da multiplicacao de cada lk(x) pela respectiva constante Kj , nao e logo feita a truncatura para 16 bit.
45
0 0.5 1−1
−0.5
0x−1
0 0.5 1−1
−0.5
0x2 − 2x
0 0.5 10
0.2
0.4
l−1
= (x−1)(x2−2x)
0 0.5 1−0.4
−0.2
0x2−x
0 0.5 1−2
−1.5
−1x−2
0 0.5 10
0.2
0.4
l−1
= (x2−x)(x−2)
Figura 4.11: Estudo de agrupamentos diferentes de l−1.
0 0.5 1−1
−0.5
0x−1
0 0.5 1−2.5
−2(x+1)(x−2)
0 0.5 10
1
2
l0 = (x−1)(x+1)(x−2)
0 0.5 11
1.5
2x+1
0 0.5 10
1
2(x−1)(x−2)
0 0.5 10
1
2
l0 = (x−1)(x+1)(x−2)
0 0.5 1−2
0
23x−2
0 0.5 10
1
2x2−(3x−2)
0 0.5 10
1
2
l0 = (x−1)(x2−(3x−2))
Figura 4.12: Estudo de agrupamentos diferentes de l0.
O formato do resultado em 32 bit e para todos Q28 (o equivalente a Q12 em 16 bit). Por ultimo, sao
somadas duas a duas as parcelas de (4.14) e, sem mudar de formato, o resultado final e truncado para
16 bit, ficando no formato Q12, no qual qualquer valor de s(n) e representavel.
4.8.3 Metodo da bisseccao
Uma vez garantida a possibilidade de obter uma aproximacao da funcao sem recurso a operacoes
de divisao, e aplicado o metodo da bisseccao na procura da raiz do polinomio. Foram investigados
bastantes metodos para esta parte final do algoritmo, entre eles o metodo da bisseccao, interpolacao
quadratica inversa, secante, Newton, Ridders, Muller, e metodos que se constituem como combinacao
de varios outros, como Brent-Dekker [Press et al., 1996].
46
0 0.5 10
0.5
1x3
0 0.5 10
2
4x2 + 2x
0 0.5 1−2
−1
0
l1 = x3 − x2 − 2x
0 0.5 1−0.4
−0.2
0x(x−1)
0 0.5 1−2.5
−2x(x−1)−2
0 0.5 1−2
−1
0
l1 = x(x(x−1)−2)
0 0.5 10
0.5
1x2
0 0.5 1−2
−1
0−2x
0 0.5 1−2
−1
0
l1 = (x+1)(x2−2x)
Figura 4.13: Estudo de agrupamentos diferentes de l1.
0 0.5 10
0.5
1x3
0 0.5 10
0.5
1x
0 0.5 1−0.4
−0.2
0
l2 = x3−x
0 0.5 1−1
−0.5
0x2−1
0 0.5 10
0.5
1x
0 0.5 1−0.4
−0.2
0
l2 = (x2−1)x
Figura 4.14: Estudo de agrupamentos diferentes de l2.
O criterio de maior peso que ditou a escolha do metodo da bisseccao foi o facto de, entre todos os
metodos estudados, este ser o unico em que a unica operacao de divisao que e necessario efectuar
durante a sua execucao e uma divisao por 2, ou seja, pode ser executada com recurso a um shift
right, sem necessidade de utilizar um bloco divisor. De facto, apesar de todos os outros metodos
apresentarem uma convergencia mais rapida, necessitam de efectuar, no mınimo, uma divisao, na qual
o divisor pode tomar qualquer valor. Numa implementacao pratica do circuito, a necessidade de uma
divisao tornaria o algoritmo irrealizavel, visto ser preciso pelo menos uma por cada iteracao, o que
aumentaria o numero de ciclos de relogio por amostra para valores impraticaveis. Apesar do metodo da
bisseccao possuir convergencia linear [Press et al., 1996], a convergencia para o resultado e garantida,
pelo que o metodo e estavel.
47
A aplicacao do metodo da bisseccao e feita atraves de uma funcao propria, que tem como argumen-
tos as quatro amostras na vizinhanca imediata da passagem por zero de s(n). Comeca-se por definir os
valores iniciais do intervalo [a, b] sobre o qual se vai aplicar o metodo como sendo a = 0 e b = 1 (valores
decimais). De seguida, e calculada a aproximacao para o valor de zero (curr zero) como sendo o ponto
medio do intervalo onde esta contido, com recurso a um shift right de 1 bit:
curr zero = (a+ b) 1. (4.17)
Sao tambem calculados os valores de p(a) e p(curr zero), recorrendo a chamada da funcao interpol,
sobre os quais e feito o teste crucial do metodo: se o sinal de p(a) for diferente do sinal de p(curr zero),
pela aplicacao directa do teorema de Bolzano, e tendo em conta a monotonia de p(t) nesse intervalo,
podemos concluir que existe um unico zero entre a e curr zero. O valor limite superior do intervalo
e entao actualizado, passando o novo intervalo a ser [a, currzero]. Se o sinal de p(curr zero) fosse
diferente do sinal de b, era o limite inferior do intervalo a ser actualizado, passando a ser a = curr zero,
e o intervalo [curr zero, b]. Tambem estao previstos, apesar da baixa probabilidade, os casos em que
o instante de aproximacao coincide com o instante do zero. Por fim, e em cada iteracao, o valor da
aproximacao para o instante de zero e guardado. Nas iteracoes seguintes repete-se este procedi-
mento. A condicao de paragem do algoritmo e testada antes da chamada a funcao de interpolacao: se
a aproximacao para o valor de zero da iteracao anterior for igual a da presente iteracao, tal significa que
o instante esta encontrado. Nesta implementacao, cada determinacao de instante de zero demora no
maximo 16 ciclos de relogio, visto que em cada iteracao se define no mınimo 1 bit do resultado.
O valor de retorno da funcao corresponde entao a um inteiro de 16 bit, cujos 13 bit mais significativos
sao concatenados, ja na funcao principal do programa, com os 3 bits da variavel inc. Este resultado,
que constitui o produto final do programa, corresponde a um valor do ciclo de trabalho da onda q(t) com
16 bit de resolucao.
Resumindo, um sinal de entrada colocado a entrada do sistema produz um conjunto de ciclos de
trabalho calculados atraves do processo descrito anteriormente, ciclos esses que sao utilizados para
produzir posteriormente a onda q(t) no programa MATLAB, onde tambem e analisado o seu espectro.
48
Capıtulo 5
Resultados
5.1 Introducao
Neste capıtulo serao apresentados os resultados dos blocos descritos no capıtulo 4. Nas seccoes
5.2 a 5.5 sao exibidos e comentados os resultados obtidos em cada bloco da implementacao, tendo
cada um como sinal de entrada o resultado do bloco anterior. O sinal f(n) escolhido como entrada do
sistema para produzir os resultados bloco a bloco encontra-se na expressao (5.1), e o seu espectro
na figura 5.1. Como f(n) e um sinal digital amostrado a 48 kHz, a Fast Fourier Transform (FFT) do
mesmo possui harmonicas do sinal em multiplos inteiros da frequencia de amostragem: 48±1 kHz, 96±
1 kHz, 144 ± 1 kHz, 192 − 1 kHz - o limite do eixo de frequencias. Foram geradas 5120 amostras, um
numero suficiente para conter varios perıodos do sinal.
f(n) = A · sin(2πfinn), A = 1, fin = 972.6563 Hz (5.1)
101
102
103
104
105
106
−400
−350
−300
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.1: Modulo da transformada de Fourier do sinal de entrada (≈ 1 kHz).
49
A razao pela qual fin nao e exactamente 1 kHz prende-se com o facto de ser necessario produzir
uma transformada de Fourier discreta, atraves do algoritmo de FFT , que seja coerente, ou seja, que
nao possua espalhamento espectral, para que este nao interfira na interpretacao do correcto funcio-
namento do circuito. Para tal, introduz-se esta pequena correccao, calculada atraves de uma rotina
em MATLAB. A amplitude do sinal escolhida nao foi A = π2 pois perto da sua amplitude maxima a
modulacao pode apresentar alguma distorcao [Logan, 1984a], principalmente para frequencias mais
proximas do limite da largura de banda de um sinal audio. Por essa razao, foi determinado como valor
maximo de amplitude A = 1.
E feito para cada bloco uma comparacao com os resultados obtidos pelo modelo em MATLAB, ja
testado e validado. Na seccao 5.6 apresentam-se resultados da modulacao com sinais de entrada com
frequencias diferentes do sinal expresso em (5.1), bem como um sinal multi-tom.
5.2 Transformada de Hilbert e interpolacao
Nas figuras 5.2 e 5.4 e possıvel ver o espectro dos dois sinais de saıda deste bloco, correspondentes
as partes real e imaginaria de fA(n). Nas figuras 5.3 e 5.5 reproduzem-se os espectros dos sinais no
modelo em MATLAB, para efeitos de comparacao com os sinais anteriores. Em ambos os espectros
do modelo em C (figuras 5.2 e 5.4) sao visıveis dois tipos de harmonicas: um dentro da banda de base
do sinal, ate 24 kHz, que corresponde a multiplos inteiros da frequencia do sinal de entrada dentro da
banda de interesse do sinal; outro fora da banda de interesse do sinal, que corresponde a replicas de
f(n) em multiplos inteiros da frequencia de amostragem. Em qualquer dos casos, o resultado da FFT
apresenta um patamar de ruıdo bem abaixo dos -100 dB, na ordem dos -120 dB, sendo a diferenca
para o patamar de ruıdo do modelo em MATLAB atribuıda a resolucao dos operandos em causa: 16 bit
em vırgula fixa no caso do primeiro e 64 bit de vırgula flutuante no caso deste ultimo. a diferenca desta
magnitude esta presente em todos os blocos ate ao modulador em quadratura (inclusive).
101
102
103
104
105
106
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.2: Modelo em C: modulo da transformada de Fourier de f(n) (≈ 1 kHz).
50
101
102
103
104
105
106
−400
−350
−300
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.3: Modelo em MATLAB: modulo da transformada de Fourier de f(n) (≈ 1 kHz).
101
102
103
104
105
106
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.4: Modelo em C: modulo da transformada de Fourier de f(n) (≈ 1 kHz).
101
102
103
104
105
106
−450
−400
−350
−300
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.5: Modelo em MATLAB: modulo da transformada de Fourier de f(n) (≈ 1 kHz).
51
5.3 Modulador exponencial analıtico e filtragem
A semelhanca da seccao anterior, nas figuras 5.6 e 5.8 e possıvel ver o espectro dos dois sinais
de saıda deste bloco, x(n) e y(n), correspondentes as partes real e imaginaria de e−fA(n). Nas figuras
5.7 e 5.9 reproduzem-se os espectros dos mesmos sinais no modelo em MATLAB, para efeitos de
comparacao com os sinais anteriores. A diferenca do modelo em C para o modelo em MATLAB assenta
principalmente no patamar de ruıdo, que se deve, conforme referido na seccao anterior, a resolucao dos
operandos.
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x 105
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
20
Freq [Hz]
MA
G [d
B]
Figura 5.6: Modelo em C: modulo da transformada de Fourier de x(n) (≈ 1 kHz).
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x 105
−400
−350
−300
−250
−200
−150
−100
−50
0
50
Freq [Hz]
MA
G [d
B]
Figura 5.7: Modelo em MATLAB: modulo da transformada de Fourier de x(n) (≈ 1 kHz).
52
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x 105
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.8: Modelo em C: modulo da transformada de Fourier de y(n) (1 kHz).
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x 105
−400
−350
−300
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.9: Modelo em MATLAB: modulo da transformada de Fourier de y(n) (≈ 1 kHz).
Nas figuras 5.10 e 5.12 e possıvel ver o espectro dos dois sinais de saıda deste bloco, correspon-
dentes as partes real e imaginaria de e−fA(n) depois da passagem pelo filtro passa-baixo. Nas figuras
5.11 e 5.13 reproduzem-se os espectros dos mesmos sinais no modelo em MATLAB. E tambem de
salientar que, no modelo em C, os componentes de sinal em torno dos multiplos inteiros da frequencia
de amostragem inicial nao sao visıveis devido ao patamar de ruıdo, ao contrario do modelo em MA-
TLAB, onde estao presentes. No entanto, como em qualquer dos casos sao bastante atenuadas, a sua
influencia nao se faz sentir no resultado do sinal PWM final, como se vera.
53
101
102
103
104
105
106
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.10: Modelo em C: modulo da transformada de Fourier de xf (n) (≈ 1 kHz).
101
102
103
104
105
106
−400
−350
−300
−250
−200
−150
−100
−50
0
50
Freq [Hz]
MA
G [d
B]
Figura 5.11: Modelo em MATLAB: modulo da transformada de Fourier de xf (n) (≈ 1 kHz).
101
102
103
104
105
106
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.12: Modelo em C: modulo da transformada de Fourier de yf (n) (≈ 1 kHz).
54
101
102
103
104
105
106
−400
−350
−300
−250
−200
−150
−100
−50
0
50
Freq [Hz]
MA
G [d
B]
Figura 5.13: Modelo em MATLAB: modulo da transformada de Fourier de yf (n) (≈ 1 kHz).
5.4 Modulador em quadratura
A FFT do sinal de saıda deste bloco, s(n), encontra-se na figura 5.14, e na figura 5.15 encontra-se o
espectro do mesmo sinal produzido com o modelo em MATLAB. A semelhanca das figuras anteriores,
o patamar de ruıdo encontra-se em torno de -120 dB, que corresponde a resolucao de 16 bit que o sinal
possui. Este sinal corresponde a soma de duas parcelas, sendo cada uma a multiplicacao de um sinal,
xf (n) ou yf (n), por um sinal sinusoidal, cos(2πfpn) e sin(2πfpn), respectivamente). No domınio da
frequencia, essas operacoes correspondem a um deslocamento do centro de cada um dos espectros
de zf (n) para fp = 24 kHz.
101
102
103
104
105
106
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.14: Modelo em C: modulo da transformada de Fourier de s(n) (≈ 1 kHz).
55
101
102
103
104
105
106
−350
−300
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.15: Modelo em MATLAB: modulo da transformada de Fourier de s(n) (≈ 1 kHz).
5.5 Passagem por zero
Por fim, neste bloco, depois da determinacao das raızes no programa em C e escrito para um ficheiro
o valor dos ciclos de trabalho que compoem a onda q(t). Esses valores sao lidos no MATLAB, onde
tambem e gerada a respectiva onda rectangular, simulando desta forma um circuito gerador de PWM
numa posterior implementacao em circuito. Na figura 5.16 e apresentado o modulo da transformada
de Fourier de q(t) gerado a partir do modelo em C e na figura 5.17 encontra-se o espectro de q(t)
produzido a partir do modelo em MATLAB, ambos tendo como sinal de entrada o sinal sinusoidal de 1
kHz referido na expressao (5.1).
101
102
103
104
105
106
107
108
109
−200
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.16: Modelo em C: modulo da transformada de Fourier de q(t) (≈ 1 kHz).
56
101
102
103
104
105
106
107
108
109
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.17: Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 1 kHz).
Como se pode constatar comparando as duas figuras, o patamar de ruıdo e o mesmo, aproximada-
mente -120 dB, pois tanto num modelo como noutro foi tomado como resolucao para a determinacao
das raızes o valor de 16 bit. De resto, as mesmas sao bastante semelhantes, principalmente no que
toca a principal caracterıstica da modulacao: o isolamento da banda de interesse do sinal dos compo-
nentes de alta frequencia por elas geradas. De facto, conforme previsto teoricamente, e de acordo com
figura 2.1, entre 20 kHz e, aproximadamente, 23 kHz, nao existe conteudo espectral relevante, pelo
que o filtro de desmodulacao pode conter uma banda de transicao nao muito selectiva, dado que tem
disponıvel esta gama de frequencias.
No caso do modelo em C, na figura 5.16, constata-se a presenca de harmonicas de sinal em torno
de 24 kHz, ao contrario do que sucede na figura 5.17, em que as harmonicas mais proximas da banda
do sinal aparecem com significado apenas em torno de 48 kHz. No entanto, de 20 kHz a 23 kHz nao
sao encontradas harmonicas acima do patamar de -100 dB. Adicionalmente, ainda que com pouca
expressao, a harmonica do sinal de entrada f(t) a 2 kHz surge ligeiramente acima do patamar de -100
dB. Conclui-se desta forma que o sinal gerado pelo modelo em C comprova o seu bom funcionamento.
5.6 Outros sinais
De forma a testar o bom funcionamento do modelo em C da CM para sinais com outra ordem de
grandeza (mais perto do limite da banda audio) e com outras caracterısticas (multi-tom), foram gerados
mais dois sinais sinusoidais puros, com frequencias de fin = 10 kHz e fin = 20 kHz, este ultimo com
amplitude de 0.5. Tambem foi gerado o sinal multi-tom expresso em 5.2:
fmulti(n) = A1 · sin(2πf1n) +A2 · sin(2πf2n), A1 = A2 = 0.5, f1 = 1kHz, f2 = 2kHz. (5.2)
Nas figuras 5.18 e 5.19 apresentam-se respectivamente os espectros do sinal com fin = 10 kHz do
modelo em C e do modelo em MATLAB, e nas figuras 5.20 e 5.21 sao mostrados os espectros de q(t)
para o sinal de entrada com fin = 20 kHz. A semelhanca do caso de fin = 1 kHz, tambem a frequencia
dos sinais de entrada para os casos anteriores foi ligeiramente alterada para que as FFTs produzidas
sejam coerentes.
57
101
102
103
104
105
106
107
108
109
−200
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.18: Modelo em C: modulo da transformada de Fourier de q(t) (≈ 10 kHz).
101
102
103
104
105
106
107
108
109
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.19: Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 10 kHz).
Numa analise as figuras 5.18 e 5.19, no modelo em C sao visıveis 4 harmonicas (nas frequencias
aproximadas de 2, 4, 8 e 16 kHz) ligeiramente acima de -100 dB, sendo que ha uma separacao signi-
ficativa entre a componente de sinal e o conteudo de alta frequencia (frequencias iguais ou superiores
a 24 kHz). O comportamento do modelo em MATLAB e semelhante, embora as harmonicas possuam
valores de magnitude ligeiramente inferiores aos do modelo em C. O efeito destas componentes pode
explicar-se pela amplitude do sinal de entrada que, ja sendo relativo a uma frequencia relativamente alta
na banda audio, com um valor alto de magnitude deste valor, introduz na banda de interesse harmonicas
do produto de sinais com frequencias distintas aquando da modulacao em quadratura. No entanto, o
efeito dessas harmonicas na qualidade do sinal e praticamente desprezavel face a amplitude do pico a
10 kHz.
Apesar disso, o patamar de ruıdo continua estavel nos -120 dB, tanto num caso como noutro. A
aparente maior ondulacao na resposta em baixa frequencia deve-se ao modo como e apresentada a
FFT . Dado que a escala no eixo horizontal e logarıtmica, partindo do seu valor maximo e a medida
58
que nos vamos aproximando de valores cada vez mais proximos de DC, o numero de pontos utilizados
para a producao da figura diminui, provocando uma imprecisao na apresentacao da resposta. Para a
producao de um espectro com resposta mais exacta em escala logarıtmica seria necessario um numero
de pontos que impossibilitaria a computacao do grafico.
101
102
103
104
105
106
107
108
109
−200
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.20: Modelo em C: modulo da transformada de Fourier de q(t) (≈ 20 kHz).
101
102
103
104
105
106
107
108
109
−300
−250
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.21: Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 20 kHz).
Os espectros presentes nas figuras 5.20 e 5.21, que dizem respeito ao sinal de entrada de 20 kHz,
tem um desempenho melhor do que no caso das figuras 5.18 e 5.19, ja que as harmonicas referidas
anteriormente existem mais atenuadas, provocando aliasing, ou nao existem de todo. O patamar de
ruıdo continua estavel nos -120 dB e tanto o resultado do modelo em MATLAB como o modelo em
C apresentam uma separacao significativa entre a componente de sinal e as componentes de alta
frequencia, apesar da proximidade entre ambos.
Por fim, apresentam-se os espectros de qmulti(t) gerados pelo sinal fmulti(n) definido em (5.2),
cujas frequencias constituem um teste standard na area. O resultado do modelo em C encontra-se na
figura 5.22 e resultado do modelo em MATLAB na figura 5.23.
59
101
102
103
104
105
106
107
108
109
−200
−180
−160
−140
−120
−100
−80
−60
−40
−20
0
Freq [Hz]
MA
G [d
B]
Figura 5.22: Modelo em C: modulo da transformada de Fourier de q(t) (≈ 1 + ≈ 2 kHz).
101
102
103
104
105
106
107
108
109
−200
−150
−100
−50
0
Freq [Hz]
MA
G [d
B]
Figura 5.23: Modelo em MATLAB: modulo da transformada de Fourier de q(t) (≈ 1 + ≈ 2 kHz).
O resultado do modelo em MATLAB nao possui harmonicas dentro da banda de interesse do sinal,
apresentando as primeiras componentes de alta frequencia em torno de 48 kHz. O modelo em C
apresenta 3 harmonicas a 3, 4 e 5 kHz ligeiramente acima dos -100 dB. No entanto, para alem das
mencionadas, ate as componentes apos os 24 kHz, ja fora da banda de audio, a resposta continua com
uma magnitude na ordem dos -120 dB.
5.7 Consideracoes finais
Para informacao adicional em relacao aos resultados da implementacao foram produzidas duas
tabelas. A tabela 5.1 contem a informacao dos erros mınimo, medio e maximo de cada sinal produzido
nos varios blocos da implementacao. A 5.2 apresenta resultados quantitativos relevantes para a analise
de um sistema audio, o Signal-to-Noise Ratio (SNR) e a Total Harmonic Distortion (THD), relativos aos
sinais resultantes dos varios sinais de entrada que serviram de teste a esta implementacao.
60
Erros mınimos Erros medios Erros maximosParte real Parte imaginaria Parte real Parte imaginaria Parte real Parte imaginaria
Hilbert −0.0143 −0.0189 −2.0017 · 10−5 2.3414 · 10−5 0.0143 0.0189AEM −0.0337 −0.0395 1.2 · 10−3 2 · 10−3 0.0385 0.0177
LP pos-AEM −0.0320 −0.0367 6.8617 · 10−4 1.8 · 10−3 0.0356 0.0169QUAD −0.0381 −2.1274 · 10−4 0.0376PWM −4.4 · 10−3 −4.061 · 10−5 4.6 · 10−3
Tabela 5.1: Erros absolutos entre resultados do modelo em C e do modelo em MATLAB.
A partir da analise dos erros maximos da tabela 5.1 conclui-se que, apesar dos erros absolutos
nas amplitudes dos sinais de saıda dos blocos anteriores a formacao da onda q(t) estarem na casa
dos 10−2, o erro absoluto neste ultimo bloco diminui uma ordem de grandeza, pois a determinacao
das raızes do sinal nao e grandemente afectada pela amplitude do sinal s(n), mas sim pelo metodo de
procura e precisao dos seus zeros. Por essa razao, a implementacao deste ultimo bloco (passagem por
zero) e de vital importancia para o desempenho do algoritmo, ja que a sua relativa independencia em
relacao aos restantes pode compensar alguma falta de precisao nos calculos intermedios.
SNR [dB] THD [dB]MATLAB C MATLAB C
1 kHz 104.00 104.90 −95.49 −86, 1210 kHz 103.51 105.18 −82.13 −67.7320 kHz 93.85 96.26 − −
1+2 kHz 104.00 104.90 −95.15 −93.33
Tabela 5.2: SNR e THD do modelo em C e do modelo em MATLAB.
Tambem atraves da analise da tabela 5.2 podemos concluir que os resultados os quatro sinais uti-
lizados para testar a modulacao, que sao representativos das varias ordens de grandeza e das carac-
terısticas dos sinais de audio, produziram bons resultados, passıveis de serem utilizados em contextos
de audio de alta fidelidade.
61
62
Capıtulo 6
Conclusoes
6.1 Trabalho desenvolvido
Nesta dissertacao foi desenvolvido e apresentado um modulo de processamento de sinal que im-
plementou a CM em linguagem C, em tempo real, com operandos e operacoes de vırgula fixa. Os
resultados de todos os blocos foram comparados com o modelo ja existente em MATLAB, e foi confir-
mado o seu bom funcionamento.
Possuir uma descricao do algoritmo neste formato proporciona a futuros projectos uma base versatil
importante, na medida em que contem as operacoes matematicas da modulacao em algebra de Boole.
Tal caracterıstica permite que a modulacao possa ser transposta de forma directa para qualquer tipo
de linguagem de descricao de hardware, para DSPs com capacidade de interpretar linguagem C de
vırgula fixa ou para qualquer outro meio de sıntese de circuitos digitais.
O bloco de Hilbert e interpolacao foi implementado com um filtro FIR com estrutura polifasica de
forma a agrupar a transformda de Hilbert e a interpolacao. Para o bloco AEM foi utilizada a aproximacao
da exponencial por serie de Maclaurin, tanto para uma exponencial real como para as partes real e
imaginaria de uma exponencial complexa. A filtragem posterior e feita recorrendo novamente a um FIR.
O bloco modulador em quadratura consiste na multiplicacao das partes real e imaginaria da saıda do
filtro por, respectivamente, sin(Ωpn) e cos(Ωpn), sendo ambos somados no final. Por ultimo, no bloco de
passagem por zero e feita uma interpolacao polinomial de grau 3 em torno do zero de s(n) com recurso
ao polinomio interpolador de Lagrange, e e calculada a sua raiz atraves da aplicacao do metodo da
bisseccao. As operacoes algebricas do algoritmo correspondem a somas, subtraccoes, multiplicacoes
e divisoes em que o divisor e uma potencia de base 2, de forma a facilitar a sua execucao.
Conforme demonstrado no capıtulo 5, a implementacao foi bem sucedida e os resultados obtidos
foram bons, tanto para sinais de entrada sinusoidais puros como para sinais multi-tom. Os valores
de erro obtidos nos varios blocos do processamento, bem como os de SNR e THD comprovam que
esta implementacao da modulacao pode ser utilizada nos contextos de audio de alta fidelidade, pois
apresentou caracterısticas bastante mais competitivas que as modulacoes concorrentes, tais como a
banda de guarda entre a banda de audio e as altas frequencias, e a baixa frequencia de comutacao da
63
onda PWM produzida. Por conseguinte, conclui-se que foi concluıda com sucesso mais uma etapa do
projecto que serve de base ao trabalho futuro.
6.2 Trabalho futuro
Antes da implementacao da CM em circuito integrado e necessario testar o seu funcionamento em
FPGA. Antes do seu projecto em circuito, deve ser criado um ficheiro com ciclos de trabalho gerado
a partir do programa em C, e o seu funcionamento testado de forma offline num click player, ou seja,
um circuito gerador de ondas rectangulares, de forma a confirmar experimentalmente que o programa
produz os resultados previstos.
Para o projecto em hardware configuravel foi iniciada ja no decorrer desta dissertacao a conversao
do algoritmo de vırgula fixa em C para Verilog, uma linguagem de descricao de hardware, com recurso a
uma ferramenta da Xilinx, o Vivado High-Level Sinthesis. Foi concluıda com sucesso a implementacao
automatica dos blocos individuais, com resultados testados e validados bloco a bloco, ficando a faltar a
interligacao dos mesmos para o funcionamento integral do circuito. Apesar dos resultados da sıntese
automatica terem sido iguais aos do algoritmo em vırgula fixa, dado que a ferramenta disponibilizada
e relativamente recente, o projecto deve ser supervisionado recorrendo-se, se necessario, a sıntese
individual e personalizada dos blocos. Nas condicoes descritas anteriormente, uma FPGA da famılia
das Virtex-7 era suficiente para implementar os recursos computacionais necessarios, o que sugere
que a sıntese do algoritmo para hardware configuravel numa so placa esta proximo da concretizacao.
Pode ainda proceder-se ao estudo detalhado do erro de calculo em cada passo do processo, e
nao apenas bloco a bloco, como foi feito. Esse estudo permitiria detalhar as operacoes em que seria
necessario introduzir maior precisao nos calculos intermedios. Adicionalmente, numa fase posterior,
pode estudar-se com mais detalhe o aparecimento no espectro da onda final de componentes que
resultaram de aliasing, isto e, harmonicas de sinal de entrada que sao detectadas na banda de interesse
do sinal por terem valores superiores a fs2 . Apesar desta componente de distorcao nao se revelar de
forma relevante nos resultados obtidos, pode em certas condicoes constituir um problema, pelo que
merece ser estudado de forma a melhorar a implementacao da modulacao.
64
Bibliografia
AES. 51st international conference report: Loudspeakers and headphones. Journel of the Audio Engi-
neering Society, 61(10), August 2013. http://www.aes.org/events/reports/51stConference.pdf.
T. Domingues and P. Braga. Click modulation matlab model. Advanced Communications and Multimedia
Electronic Systems, 2013.
T. Domingues, M. Santos, and G. Tavares. Low frequency pwm modulation for high efficiency class-d
audio driving. In Design of Circuits and Integrated Circuits (DCIS), 2014 Conference on, pages 1–5.
IEEE, 2014.
T. Domingues, M. Santos, and G. Tavares. A click modulation audio player. Design of Circuits and
Integrated Circuits (DCIS), 2015 Conference on, November 2015.
B. F. Logan. Information in the zero crossings of bandpass signals. Bell System Technical Journal, 56
(4):487–510, 1977. ISSN 1538-7305. doi: 10.1002/j.1538-7305.1977.tb00522.x. URL http://dx.
doi.org/10.1002/j.1538-7305.1977.tb00522.x.
B. F. Logan. Theory of analytic modulation systems. Bell System Technical Journal, 57(3):491–576,
1978. ISSN 1538-7305. doi: 10.1002/j.1538-7305.1978.tb00595.x. URL http://dx.doi.org/10.
1002/j.1538-7305.1978.tb00595.x.
B. F. Logan. Click modulation. AT&T Bell Laboratories Technical Journal, 63(3):401–423, 1984a.
ISSN 1538-7305. doi: 10.1002/j.1538-7305.1984.tb00011.x. URL http://dx.doi.org/10.1002/
j.1538-7305.1984.tb00011.x.
B. F. Logan. Signals designed for recovery after clipping—i. localization of infinite products. AT&T Bell
Laboratories Technical Journal, 63(2):261–285, 1984b. ISSN 1538-7305. doi: 10.1002/j.1538-7305.
1984.tb00094.x. URL http://dx.doi.org/10.1002/j.1538-7305.1984.tb00094.x.
B. F. Logan. Signals designed for recovery after clipping—ii. fourier transform theory of recovery.
AT&T Bell Laboratories Technical Journal, 63(2):287–306, 1984c. ISSN 1538-7305. doi: 10.1002/
j.1538-7305.1984.tb00095.x. URL http://dx.doi.org/10.1002/j.1538-7305.1984.tb00095.x.
B. F. Logan. Signals designed for recovery after clipping—iii: Generalizations. AT&T Bell Laboratories
Technical Journal, 63(3):379–399, 1984d. ISSN 1538-7305. doi: 10.1002/j.1538-7305.1984.tb00010.
x. URL http://dx.doi.org/10.1002/j.1538-7305.1984.tb00010.x.
65
A. Oliva, E. Paolini, and S. S. Ang. A new audio file format for low-cost, high-fidelity, portable digital
audio amplifiers. 2005.
A. V. Oppenheim and R. W. Schafer. Digital Signal Processing, chapter 7.
W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery. Numerical recipes in C, volume 2.
Cambridge university press Cambridge, 1996.
A. S. Sedra and K. C. Smith. Microelectronic Circuits International Student Edition, chapter 14. Oxford
University Press, Inc., 5th edition, 2004.
K. P. Sozanski. A digital click modulator for a class-d audio power amplifier. Elektronika: konstrukcje,
technologie, zastosowania, 51(3):84–88, 2010.
L. Stefanazzi, E. Paolini, and A. Oliva. Click modulation: an off-line implementation. In Circuits and
Systems, 2008. MWSCAS 2008. 51st Midwest Symposium on, pages 946–949. IEEE, 2008.
L. Stefanazzi, A. R. Oliva, and E. E. Paolini. Alias-free digital click modulator. Industrial Informatics,
IEEE Transactions, 9(2):1074–1083, 2013.
M. Streitenberger and W. Mathis. A novel coding topology for digital class-d audio power amplifiers with
very low pulse-repetition rate. In Solid-State Circuits Conference, 2002. ESSCIRC 2002. Proceedings
of the 28th European, pages 515–518, Sept 2002.
M. Streitenberger, F. Felgenhauer, H. Bresch, and W. Mathis. Class-d audio amplifiers with separated
baseband for low-power mobile applications. In Circuits and Systems for Communications, 2002.
Proceedings. ICCSC ’02. 1st IEEE International Conference on, pages 186–189, 2002. doi: 10.1109/
OCCSC.2002.1029076.
G. Tavares and M. Piedade. Digital number representation. Instituto Superior Tecnico, 2006.
66
Apendice A
Apendice
A.1 Estrutura do programa em C (pseudo-codigo)
while ( f i c h e i r o de entrada nao vazio )
/∗ colocacao da amostra mais recente na p r ime i ra posicao do vec to r ∗ /
datamove ( amostras ) ; amostras [ 0 ] = amostra mais recente ;
/∗ rows = estag ios da e s t r u t u r a p o l i f a s i c a do f i l t r o ∗ /
for ( rws = 0; rws < 8; rws++)
/∗ c l s = i n d i c e da amostra de cada es tag io do f i l t r o ∗ /
for ( c l s = 0 ; c l s < 127; c l s ++)
/∗ TRANSFORMADA DE HILBERT , FILTRAGEM E INTERPOLACAO ∗ /
/∗ convolucao ent re os vectores de amostras e de c o e f i c i e n t e s ∗ /
/∗ or ig inam as par tes r e a l e imag inar ia do s i n a l a n a l i t i c o ∗ /
h i l b e r t o u t r e a l += amostras [ c l s ] ∗ h1 [ rws ] [ c l s ] ;
h i l b e r t o u t i m a g += amostras [ c l s ] ∗ h2 [ rws ] [ c l s ] ;
/∗ compensacao da energ ia perd ida na in te rpo lacao ∗ /
h i l b e r t o u t r e a l = h i l b e r t o u t r e a l ∗8;
h i l b e r t o u t i m a g = h i l b e r t o u t i m a g ∗8;
/∗ escreve os resu l tados deste bloco para um f i c h e i r o ∗ /
f p r i n t f ( h i l b e r t o u t r e a l ) ;
f p r i n t f ( h i l b e r t o u t i m a g ) ;
/∗ AEM: APROXIMACAO ’A EXPONENCIAL ∗ /
/∗ chamada a funcoes que rea l izam as operacoes necessar ias ∗ /
exponenc ia l rea l = ex ( h i l b e r t o u t r e a l ) ;
67
exponenc ia l imag par te rea l = e j y r e a l ( h i l b e r t o u t i m a g ) ;
exponenc ia l imag par te imag = e j y r e a l ( h i l b e r t o u t i m a g ) ;
aem out rea l = exponenc ia l rea l ∗ exponenc ia l imag par te rea l ;
aem out imag = exponenc ia l rea l ∗exponenc ia l imag par te imag ;
/∗ escreve os resu l tados deste bloco para um f i c h e i r o ∗ /
f p r i n t f ( aem out rea l ) ;
f p r i n t f ( aem out imag ) ;
/∗ colocacao da amostra mais recente na p r ime i ra posicao do vec to r ∗ /
datamove ( amostras LP real ) ; amostras LP real [ 0 ] = aem out rea l ;
datamove ( amostras LP imag ) ; amostras LP imag [ 0 ] = aem out imag ;
/∗ FILTRAGEM POS AEM ∗ /
for ( c l s = 0 ; c l s < N LP coefs ; c l s ++)
LP ou t rea l += LP samples real [ c l s ] ∗ LP coefs [ c l s ] ;
LP out imag += LP samples imag [ c l s ] ∗ LP coefs [ c l s ] ;
/∗ escreve os resu l tados deste bloco para um f i c h e i r o ∗ /
f p r i n t f ( LP ou t rea l ) ;
f p r i n t f ( LP out imag ) ;
/∗ MODULADOR EM QUADRATURA ∗ /
quad cos rea l = LP ou t rea l ∗Q sin va lues [ i ndex s in ] ;
quad sin imag = LP out imag∗Q sin va lues [ index cos ] ;
/∗ soma das par tes r e a l e imag inar ia do modulador ∗ /
quad soma = quad sin imag + quad s in rea l ;
/∗ escreve os resu l tados deste bloco para um f i c h e i r o ∗ /
f p r i n t f ( quad cos rea l ) ;
f p r i n t f ( quad cos rea l ) ;
f p r i n t f ( quad soma ) ;
/∗ colocacao da amostra mais recente na p r ime i ra posicao ∗ /
/∗ de um vec to r que armazena as u l t imas 4 amostras quad soma ∗ /
datamove ( quad out ) ; quad out [ 0 ] = quad soma ;
/∗ DETECCAO E DETERMINACAO DAS RAIZES ∗ /
i f ( quad out [2]>0 && quad out [1]<=0 | | quad out [2]<=0 && quad out [1]>0 )
68
zero = f i n d z e r o ( quad out ) ;
/∗ escreve os resu l tados deste bloco para um f i c h e i r o ∗ /
f p r i n t f ( zero ) ;
i c o s ++; i f ( i c o s == 16) i c o s = 0;
i s i n ++; i f ( i s i n == 16) i s i n = 0 ;
/∗ ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ l 2 ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
DESCRIPTION : evaluates the value o f l 2 o f the Lagrange Polynomial I n t e r p o l a t i o n
PARAMETERS: x ( sho r t ) i n Q15 ( [ 0 ; 1 [ )
RETURN VARIABLES : l 2 ( shor t ) i n Q15
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗ ∗ /
short l 2 ( short x )
short x square = 0 , mac1 = 0 , mac3 = 0 , mac4 = 0 , res = 0 , one = 1 ∗ alpha 1 ;
i n t mac2 = 0 , mac3 tmp = 0;
/∗ −−−−−−−−−−−− x ˆ2 i n Q15 −−−−−−−−−−−− ∗ /
/∗ << 1 to e l i m in a t e ex t ra s ign b i t ∗ /
/∗ >> 16 to conver t i n t to shor t ∗ /
x square = ( ( x∗x ) >> 15 ) ;
/∗ −−−−−−−−−− x ˆ2 − 1 i n Q15 −−−−−−−−− ∗ /
/∗ x ˆ2 and one i n Q15 ∗ /
mac1 = ( x square − one ) ;
/∗ −−−−−−−−−− l 2 i n Q15 −−−−−−−−− ∗ /
/∗ ( xˆ2−1) and x i n Q15 ∗ /
res = ( ( mac1∗x ) >> 15 ) ;
return res ;
69