Implementação de controladores em DSP de ponto-fixo

Propaganda
SISTEMAS DE ARMAS E MUNIÇÕES
Implementação de controladores em
DSP de ponto-fixo
CC(EN) Paulo Henrique da Rocha, M.Sc
Centro Tecnológico da Marinha em São Paulo – CTMSP
Divisão de Projetos Eletro-Eletrônicos
E-mail: [email protected]
Eng. Michael Cláudio Porsch, M.Sc
Centro Tecnológico da Marinha em São Paulo – CTMSP
Divisão de Projetos Eletro-Eletrônicos
E-mail: [email protected]
Prof. Henrique Cezar Ferreira, M.Sc
Escola Politécnica da Universidade de São Paulo – USP
Departamento de Engenharia de Telecomunicações e Controle
Universidade Estadual Paulista Júlio de Mesquita Filho – UNESP
Engenharia de Controle e Automação – Campus de Sorocaba
E-mail: [email protected]
Prof. Roberto Moura Sales, Ph.D.
Escola Politécnica da Universidade de São Paulo – USP
Departamento de Engenharia de Telecomunicações e Controle
E-mail: [email protected]
Resumo
O objetivo deste trabalho é analisar alguns aspectos
relativos à implementação de algoritmos de controle
embarcados em processadores de ponto-fixo. A sua
principal contribuição é o desenvolvimento de um
procedimento de conversão de uma rotina implementada em
ponto-flutuante para ponto-fixo, que foi posteriormente
implementada como firmware num processador de 32 bits em
ponto-fixo, da Texas Instruments.
Palavras-chave
DSP. Ponto-fixo. IEEE-754. Controle digital. Wordlength.
Controle embarcado. Sistema embarcado.
Abstract
This work analyses some topics about implementation of
control algorithms in fixed-point processors. The main
contribution is the development of a conversion routine,
which was originally floating-point to fixed-point, and then
programmed as firmware in a 32 bits fixed-point processor
from Texas Instruments.
Keywords
DSP. Fixed-point. IEEE-754. Digital control. Wordlength.
Embedded control. Embedded system.
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
1. INTRODUÇÃO
Muitos algoritmos de controle são,
inicialmente, implementados em ferramentas
computacionais usando ponto-flutuante
(Matlab/Simulink, Mapple, etc...) que, via de regra,
faz com que o projetista do controlador não se
preocupe com a resolução finita dos
registradores de um hardware específico onde
esse controlador será embarcado durante a fase
de projeto.
Por outro lado, visando baixar custos, aumentar
a velocidade de processamento e diminuir o
consumo, processadores de ponto-fixo são
largamente utilizados durante a implementação
do controlador e, sendo assim, os projetistas
de hardware/firmware têm um duro caminho de
adaptação de um controlador que,
inicialmente, foi concebido em ponto-flutuante
para um controlador de ponto-fixo e de menor
resolução.
Por essa razão, nos últimos anos, diversas
técnicas de otimização foram propostas para
transformar algoritmos implementados em
ponto-flutuante
para
algoritmos
implementados em ponto-fixo, sem com isso
degradar a performance do controlador
[4][2][1]. Neste contexto, fabricantes de
ferramentas computacionais desenvolveram e
adaptaram soluções práticas para minimizar o
árduo trabalho de transformar algoritmos em
ponto-flutuante em algoritmos em ponto-fixo,
como por exemplo os ToolBox de ponto-fixo
no Matlab/Simulink (da Matworks) e a biblioteca
IQMath (da Texas Instruments) [6].
Neste trabalho são apresentados os principais
conceitos envolvendo a representação binária
de um número em ponto-flutuante e em pontofixo, com resolução finita, os problemas
9
PAULO HENRIQUE DA ROCHA, MICHAEL CLÁUDIO PORSCH, HENRIQUE CEZAR FERREIRA, ROBERTO MOURA SALES
numéricos envolvendo operações matemáticas
em ponto-fixo e alguns aspectos práticos para,
a partir de um código de programa em Matlab
(usando ponto-flutuante), transformá-lo em
código de programa que utiliza o ToolBox de
ponto-fixo do Matlab, para, posteriormente,
transformá-lo em um código C-ANSI, para DSP
(Digital Signal Processors), que utiliza a biblioteca
IQMath disponibilizada pela Texas Instruments.
Também é apresentado um procedimento
prático para transformação de um algoritmo
em ponto-flutuante em ponto-fixo, utilizandose a minimização de norma l∞ do erro devido à
conversão. Também é feita uma comparação
com o método proposto por Fang [4], que
utilizou propriedades das normas l1 e l∞ para
sistemas lineares e invariantes no tempo. Uma
das principais vantagens na utilização da norma
l∞, proposta neste trabalho, em relação ao
sugerido por Fang [4], é o fato de esse
procedimento ser também aplicado para o caso
de controladores não-lineares.
2. REPRESENTAÇÃO NUMÉRICA EM
PONTO-FLUTUANTE
Conforme proposto por Viana [12], considere
um sistema de ponto-flutuante dado por
F (b, t , ς , M ), que representa um subconjunto
dos números reais, onde b ≥ 2 é a base de
representação, t ≥ 1 é a precisão, e ς e M são
respectivamente o menor e o maior expoente.
Desta forma, esse subconjunto ( F ⊂ ℜ)
contém números reais da forma
x = ( −1) s ⋅ b e ⋅ (0 ⋅ d1d 2 d 3 Λ d t ) , sendo s o
sinal (0 se for positivo e 1 se for negativo), e o
expoente (ς ≤ e ≤ M , com ς < 0 , M > 0
e ς ≅ M ) e di são dígitos da mantissa na base-b
(0 ≤ d i ≤ b − 1, ∀i,1 ≤ i ≤ t ).
A representação que será apresentada nesta
seção será baseada na norma IEEE-754. Nesta
forma de representação, o ponto decimal está
implicitamente entre os dígitos d1 e d2 (forma
normalizada), o que permite o armazenamento
10
de mais um dígito da mantissa. Esse bit
armazenado na mantissa também é conhecido
como bit escondido.
Na norma IEEE-754, na precisão simples
(single), têm-se 8 bits para o expoente e 23 bits
para a mantissa, não contando com o bit
escondido. Os expoentes são representados
sem sinal. A faixa de expoentes varia de -127 a
+128. O fator de escala dos expoentes é -127,
isto é, o campo de bits na palavra E = e + 127,
onde e é o valor efetivo do expoente, pois a
representação usada na norma IEEE-754 é a
representação de excesso [9].
Na figura 1 é representado um número de
acordo com a norma IEEE-754 na precisão
simples.
FIGURA 1
Representação de um número com a Norma IEEE-754
Como um exemplo, um número em precisão
simples tem a forma:
(−1) s ⋅ m ⋅ 2e
(eq. 1)
Sendo que a mantissa normalizada tem a forma
representada na figura 2.
FIGURA 2
Representação da mantissa normalizada - Norma IEEE754
A título de exemplo, a figura 3 mostra os passos
para transformar o número 23.62510 para o
padrão IEEE-754.
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
SISTEMAS DE ARMAS E MUNIÇÕES
FIGURA 4
Representação binário de um número em ponto-fixo
FIGURA 3
Exemplo: Transformação de número na base 10 para a
Norma IEEE-754
3. REPRESENTAÇÃO NUMÉRICA EM
PONTO-FIXO
Quando se utiliza um processador em pontofixo, o grande problema que o projetista do
firmware irá enfrentar advém do fato de o
processador não manter um registro da posição
da vírgula virtual. De uma maneira mais
simplificada e direta, o processador nem sabe,
nem toma conhecimento de onde o projetista
definiu a posição da vírgula virtual. Desta
forma, fica claro que, durante a implementação
do firmware em ponto-fixo, o projetista deverá
criar uma forma de gerenciar todas as operações
matemáticas que envolvem as vírgulas virtuais
para evitar erros durante os cálculos.
Uma forma bastante utilizada para representar
números mistos, isto é, que possuem partes
inteiras e fracionárias é por meio de uma
notação
denominada
formato
Q i.
Normalmente, o comprimento da palavra
corresponde ao comprimento da palavra de
dados que o processador pode tratar, salvar ou
recuperar em uma única operação. [10]
Um registro de ponto-fixo no formato Qi é um
número binário em complemento de dois de
N bits com três partes: sinal – parte inteira e
parte fracionária, conforme ilustrado na
figura 4.
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
Por exemplo, considerando um processador de
16 bits e utilizando o formato Q9 para sua
notação, sua faixa dinâmica será dada conforme
mostrado na figura 5.
Nesse exemplo, o valor mínimo negativo será
dado por 100.0000.0000.00002, que é igual a 6410, e o valor máximo positivo será dado por:
0111.1111.1111.1111 2 = 63.99804688 10 . A
resolução entre os números binários no
formato Q9 é de 2-9 = 0.001953125.
FIGURA 5
Representação binária de um número no formato Q9
Sendo assim, baseado neste exemplo, é possível
criar uma tabela que mostra a faixa dinâmica e
a resolução para um processador de 16 bits, nos
diferentes tipos de formato Q i, conforme
mostrado na tabela 1, a seguir.
Dependendo da faixa dinâmica de um
determinado operando, Oi, o projetista do
firmware do controlador define qual é o formato
Qi que irá utilizar, de modo a minimizar os erros
de truncamento durante a transformação de um
algoritmo em ponto-flutuante em um algoritmo
em ponto-fixo. Com isso, para implementação
de um controlador embarcado em um DSP de
ponto-fixo, a transformação da formulação em
11
PAULO HENRIQUE DA ROCHA, MICHAEL CLÁUDIO PORSCH, HENRIQUE CEZAR FERREIRA, ROBERTO MOURA SALES
ponto-fixo consiste na verificação da faixa
dinâmica utilizando a menor resolução
possível, determinando assim o comprimento
da palavra inteira IWL - Integer Word Length e da
palavra fracionária, FWL - Fractional Word Length,
de cada operando Oi, i = 0,1,..., (N-1), onde N é
o número de operandos para serem
transformados. O comprimento total da
palavra, WL - Word Length, para cada operando
é obtido como segue, [1]:
On α WLn = IWLn + FWLn + si
(eq. 2)
onde o bit si=1, se o operando é negativo ou
positivo, quando se utiliza o formato
complemento de dois. Caso contrário, si=0.
O comprimento da palavra WLi deve ser maior
do que 0. Dado IWLi e FWLi, o número em
ponto-fixo representa um valor compreendido
numa faixa R com passo de quantização ∆,
como segue:
− 2 IWLi ≤ R ≤ 2 IWLi , utilizando-se sinal
0 ≤ R ≤ 2 IWLi , sem sinal,
(eq. 3)
onde
∆ = 2− FWLi
(eq. 4)
Deste modo, IWLi e FWLi são definidos para
evitar saturação do operando Oi. Normalmente,
a estimação do comprimento da palavra WLi é
por intermédio da definição de IWLi, mediante
a definição da faixa dinâmica do operando Oi,
como segue:
IWLi ≥ log 2 Ri

max 
,
(eq. 5)
onde x  é o menor inteiro que é maior ou igual
a x.
O valor de Ri max pode ser estimado pela
verificação do máximo e mínimo valor do
operando, ou a média e o desvio padrão do sinal
[8 - 9]. Considerando-se que um processador
12
TABELA 1
Número binário representado no formato Q15
Formato Qi
Q15
Q14
Q13
Q12
Q11
Q10
Q9
Q8
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Faixa
0.99996948
1.999938965
3.99987793
7.999755859
15.99951172
31.99902344
63.99804687
127.9960937
255.9921875
511.984375
1023.96875
2047.9375
4095.875
8191.75
16383.5
32768
Resolução
0.000030517
0.000061035
0.000122070
0.000244140
0.000488281
0.000976562
0.001953125
0.00390625
0.0078125
0.015625
0.03125
0.0625
0.12
0.25
0.5
1
possui o número de bits fixos, uma vez definido
IWLi, FWLi é definido automaticamente. Tal
afirmação não é valida caso o controle
embarcado estivesse em um FPGA, onde os
tamanhos dos registradores podem variar.
Como neste trabalho é proposta a utilização
de um DSP, cujos registradores são fixos, ou
seja, WLi = constante, basta obter IWLi por meio
da equação (5) para se definir o comprimento
de FWLi.
4. TRANSFORMAÇÃO DE ALGORITMO
EM PONTO-FLUTUANTE EM
ALGORITMO EM PONTO-FIXO
Nesta seção é apresentado um procedimento
para transformação de um algoritmo em pontoflutuante em ponto-fixo, utilizando-se a
minimização de norma l∞ do erro devido à
conversão. Também é feita uma comparação
com o método proposto por Fang [4], que
utilizou propriedades das normas l1 e l∞ para
sistemas lineares e invariantes no tempo. A
principal vantagem na utilização desse método
de minimização da norma l∞ em relação ao
proposto por aquele autor [4] é fato desse
procedimento ser também aplicado para o caso
de controladores não-lineares.
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
SISTEMAS DE ARMAS E MUNIÇÕES
4.1. Deter minação do comprimento da
palavra em um DSP de ponto-fixo
Nesta seção é apresentada uma forma de
determinação do comprimento de FWL i ,
proposto por Fang [4], que utilizou resposta
impulsiva e propriedades de normas. Esse
método foi comparado, neste trabalho, com o
método de minimização de norma l∞ que pode
ser otimizado para um sinal de entrada
especificado pelo projetista.
Há duas principais fontes de erro na saída, y,
de um filtro devido à quantização de um sistema
de controle, nominalmente [4]:
• O erro ∆y 0 introduzido pela resolução
limitada do conversor A/D e
• O erro ∆ytrunc introduzido pelo truncamento
em cada soma de uma variável calculada do
sistema.
Esses erros podem ser representados como
entradas exógenas de perturbação para sistemas
lineares. Desta forma, considerando-se um
sistema linear, conforme mostrado na figura 6,
há dois lugares nos quais os erros de
quantização são introduzidos: e 0 e e 1. A
perturbação e0 representa o erro de quantização
do A/D e a perturbação e1 representa o erro de
truncamento no somatório. Para um sistema
linear com m somatórios, é usada a notação ei
para representar uma perturbação devido ao
erro de truncamento no somatório para o
cálculo da variável vi, para i = 1,2,...m [4]. Sendo
assim, é possível definir que a saída do erro é
regida pela limitação [3]:
Portanto, g yei é uma constante e ei ∞ é o
máximo erro introduzido na fonte de
quantização. Uma vez que essa proposta feita
por Fang [4] é para sistemas lineares e
invariantes no tempo, erros provenientes de
outras fontes podem ser superpostos para
determinar o efeito total sobre a saída y. O erro
total, ∆y, na saída é definido como:
m
∆y ∞ = ∆y0 + ∆ytrunc ∞ ≤ ∑ g ye1 ⋅ ei ∞
1
i =0
(eq. 7)
Exemplo 1: Para exemplificar o que foi
proposto por Fang [1], será considerada a
equação (10) de Rocha [11], originalmente
aplicada em um sistema de levitação magnética,
que possui a seguinte equação de diferença,
obtida a partir da aproximação bilinear de Tustin
a uma taxa de amostragem fs = 5kHz:
y (k ) = 0.002u (k ) + 0.002u (k − 1) + 0.999 y (k − 1) , (eq. 8)
com a representação na Forma Direta II
apresentada na Fig. 6, sendo que e0 é o erro
introduzido pela resolução do A/D e que e1 é o
erro introduzido pelo truncamento no
somatório.
(eq. 6)
FIGURA 6
Representação de W1 na forma direta II (a=0.002,
b=0.002 e c=0.999)
onde g yei é a resposta impulsiva do sistema de
ei para y, enquanto que ⋅ ∞ e ⋅ 1 representam
as normas l∞ e l1, respectivamente, definidas
como
sendo x ∞ ≡ sup k x(k )
e
∞
x 1 ≡ ∑ k =0 x ( k ) .
É utilizado um A/D de 12 bits (usando
complemento de 2), com uma faixa tensão de
entrada unipolar de 0 – 3 Volts. Supondo que 3
bits serão usados para a parte inteira (incluindo
o bit de sinal), os 9 bits restantes deverão ser
∆yi ∞ ≤ g yei ⋅ ei ∞
1
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
13
PAULO HENRIQUE DA ROCHA, MICHAEL CLÁUDIO PORSCH, HENRIQUE CEZAR FERREIRA, ROBERTO MOURA SALES
usados como fracionários, significando que o
pior caso de erro devido à resolução do A/D é
e0 ∞ = 2−10Volts . A norma l 1 da resposta
impulsiva pode ser aproximada usando uma
soma finita da seqüência gerada por meio do
comando do Matlab “dimpulse”. Deste modo,
g yei = sum(dim pulse ([0.002 0.002],[1 − 0.999])) , o
1
que resulta que g yei ≅ 79.5. Utilizando-se a
1
equação
(6),
é
possível
−10
determinar ye0 = 79.5 ⋅ 2
= 0.077 Volts. Para
se definir o erro e 1, provocado devido ao
truncamento na soma, baseado na Fig. 6, é
possível determinar que a saída y em função do
erro e1 é definida com a seguinte função de
transferência:
z
G ye1 =
z − 0.999
(eq. 9)
Deste modo, g yei 1 = sum(dim pulse([1 0],[1 − 0.999])) ,
o que resulta que g yei 1 ≅ 9933. Assumindo que
o resultado do somador é truncado depois de f
bits fracionários, o erro máximo que pode ser
atingido será de e1 ∞ = 2− f Volts. Portanto,
utilizando-se novamente a equação (6), porém
agora para o erro e 1 , é possível definir
que ye1 = 9933 ⋅ 2− f Volts. Como o sistema é
linear e invariante no tempo, é possível utilizarse da equação (7), o que resulta em:
yerror = ye0 + ye1
(eq. 10)
yerror = 0.077 + 9933 ⋅ 2− f
(eq. 11)
Conforme Fang sugere [1], escolhe-se a
condição de que o segundo termo da equação
(11) não deveria ser superior a 10% do primeiro,
ou seja, 9933 ⋅ 2− f ≤ (10%) ⋅ 0.077 . Esta
condição implica que: f = 21 bits fracionários
são requeridos, isto é, formato Q21.
14
4.2. Determinação do comprimento da
palavra em DSP de ponto-fixo por meio de
minimização da norma l∞
Nesta seção é apresentado um método para
determinação do comprimento de FWLi, por
meio da minimização de uma Função Custo, J,
definida a partir da norma l∞ do erro devido à
conversão. Conforme já comentado, esta é uma
das contribuições deste trabalho. A forma
escolhida para minimização de J foi por
intermédio de algoritmo genético.
Seja o seguinte operando polinomial de ordem
3 (N=3):
N N −m
Oj = ∑
N −n−m
⋅ V2m − nV1n,
∑ amn ⋅ V1
m =0 n =0
(eq. 12)
onde m, n, j ∈ Ν + e V(1m,2,3) , amn ∈ ℜ e
representam, respectivamente, as variáveis do
sistema a serem definidas no formato Qi e os
coeficientes relacionados a cada variável, cujo
formato Qi já foi previamente definido pelo
projetista do firmware, considerando-se a melhor
resolução.
Desta forma, para cada variável V (1,2,3) é
necessário definir o seu IWLj e FWLj. Como
neste trabalho é utilizado um DSP de 32 bits
em ponto-fixo, o comprimento total da palavra
(WLj) de cada operação é constante. Sendo
assim, para cada variável V(1,2,3) basta determinar
seu FWLj que o seu IWLj fica pré-definido (IWLj
= WLj - FWLj - si).
Considerando-se a equação (12), o processo de
otimização do FWLj de cada operação consiste
em determinar o formato Qi mais adequado para
o conjunto de variáveis do sistema, uma vez
que os formatos Qi dos coeficientes foram
previamente definidos pelo projetista do
firmware.
A técnica para a definição do comprimento do
FWLj foi a de minimização da norma l∞, com
método de otimização baseado em algoritmo
genético. Para descrição dessa técnica,
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
SISTEMAS DE ARMAS E MUNIÇÕES
considere, sob o ponto de vista da teoria de
algoritmo genético, que é possível definir o
seguinte cromossomo:
V
V
V
V
cromossomo = (Qi 1 , Qi 2 , Qi 3 ,L , Qi j ),
(eq. 13)
com i = (1,2,…, 30), pois o DSP utilizado possui
32 bits em complemento de dois.
A partir de resultados de simulação em pontoflutuante, é possível definir a faixa de variação
de cada QiVm e então gerar randomicamente
uma população inicial de cromossomos.
Cada gene é representado por um QiVm. A
aplicação da técnica de algoritmo genético
começa com um conjunto de soluções,
representado pelos cromossomos, que é
chamado de população inicial. Cada indivíduo
da população inicial é avaliado por meio de
uma Função Custo. Aqueles que resultam em
maior mérito têm mais chances de continuar
no conjunto de soluções (população) na
iteração seguinte. Assim, sucessivamente, um
conjunto de possíveis soluções é refinado de
forma a melhor atender ao critério de
otimização. A figura 7 ilustra o mecanismo de
evolução artificial e as operações às quais os
indivíduos são submetidos.
Geração da população Inicial: A partir da
definição da faixa de variação das variáveis QiVm,
baseando-se em dados de simulação em pontoflutuante, os cromossomos serão gerados
randomicamente, criando-se assim a população
inicial. Cada gene expressa um tipo de formato
Qi de uma determinada variável.
A Função Custo (J): Nesta etapa, cada
indivíduo da população é avaliado para que seja
dado o seu grau de adaptação. Para isso, a
Função Custo é baseada na comparação entre
o Operando em ponto-flutuante Oifloat− point e
o Operando em ponto-fixo Oifixed− point para o
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
FIGURA 7
Fluxograma do Algoritmo Genético [5]
cromossomo (indivíduo) selecionado. Sendo
assim, é possível definir a Função Custo como
sendo:
J=
Oifixed − point − Oifloat − point
∞ (eq. 14)
Q1,Q2 ,L ,Qi
min
Seleção → Cruzamento → Mutação: Neste
trabalho, a reprodução e a seleção são realizadas
entre os indivíduos mais adaptados. A
quantificação dessa adaptação de cada indivíduo
é feita a partir da Função Custo.
Critério de Parada: Quando o número de
geração atinge M, o processo de iteração é
finalizado.
Exemplo 2: Para exemplificar esse método
determinação do comprimento de FWLi por
meio de minimização da norma l∞, é utilizada a
mesma equação de diferença usada no exemplo
1. Deste modo, a equação (8) passa a ser
considerada como um caso particular da
equação (12). Considere que os formatos Qi dos
coeficientes a=0.002, b=0.002 e c=0.999 foram
15
PAULO HENRIQUE DA ROCHA, MICHAEL CLÁUDIO PORSCH, HENRIQUE CEZAR FERREIRA, ROBERTO MOURA SALES
definidos pelo projetista do firmware como sendo
Q 30, melhor resolução. A partir da faixa
dinâmica das variáveis y(k) e u(k), obtidos por
intermédio de simulação em ponto-flutuante,
o projetista define todos os possíveis formatos
Qi para cada par de gene (Qiy , Qiu ), que gera o
cromossomo. Com isso, é possível definir a
população inicial randomicamente e, então,
aplicar o algoritmo genético. Para esse exemplo,
a população inicial foi estipulada em 30
cromossomos. Conforme a equação (14), a
Função Custo é definida como sendo:
J = min yifixed − point − yifloat − point
y
∞ (eq. 15)
Q ,Qu
i
i
Após a aplicação do algoritmo genético,
passadas 10 gerações (M=10), todos os
indivíduos da população inicial convergiram
y
u
para o par de gene ( Q28
, Q30 ).
Com esse exemplo, foi possível constatar que
a determinação de FWLj pelo método proposto
por Fang [4] e o apresentado neste trabalho
produziram resultados semelhantes. A grande
vantagem do método aqui apresentado, que
utiliza minimização de norma l∞,, é que ele pode
ser usado tanto para controladores lineares
quanto para controladores não-lineares e, ainda,
para diferentes sinais de entrada.
TABELA 2
Conversão de Matlab para código C-ANSI
Código em Matlab
usando ponto-flutuante
5. ASPECTOS PRÁTICOS PARA
TRANSFORMAR UM ALGORITMO EM
PONTO-FLUTUANTE
EM
UM
ALGORITMO EM PONTO-FIXO
Nesta seção é apresentado um procedimento
prático para realizar a transformação de um
programa em ponto-flutuante em ponto-fixo,
usando o ToolBox de ponto-fixo do Matlab e a
biblioteca IQMath disponibilizada pela Texas
Instruments.
Usando o comando fi do Toolbox de ponto-fixo
(Matlab), é possível verificar, por simulação, se
os valores de FWLn e IWLn de cada operando
foram adequadamente determinados antes da
implementação do firmware do DSP (em CANSI). O comando fi aceita como entrada
valores, com ou sem sinal, definição do
comprimento total da palavra e da parte
fracionária, nesta ordem. Por exemplo:
fi(2.9998, 1, 32, 16) transforma o número 2.9998
em um número em ponto-fixo com 32 bits de
comprimento, 16 bits de parte fracionária, 15
bits de parte inteira e 1 bit de sinal. A biblioteca
IQMath (da Texas Instruments) inclui uma coleção
de funções matemáticas otimizadas para serem
usadas no programa em C-ANSI, o qual pode
ser diretamente usado (IQNmpy, IQNmpyIQX,
etc.) no algoritmo de controle [6]. Essas
ferramentas computacionais podem encurtar
significativamente o tempo de desenvolvimento
do firmware. A tabela 2 mostra uma pequena
Código em Matlab
Usando ToolBox de ponto-fixo
Código do DSP C-ANSI
usando biblioteca IQMath
# define GLOBAL_Q 30
# include <IqmathLib.h>
IQ = 30;
_iq30 aW1, bW1, cW1;
16
aW1 = 0.002;
bW1 =0.002;
cW1 = 0.9998;
aW1 = fi(0.002, 1, 32, IQ);
bW1 = fi(0.002, 1, 32, IQ);
cW1 = fi(0.9998, 1, 32, IQ);
aW1 = _IQ30(0.002);
bW1 = _IQ30(0.002);
cW1 = _IQ30(0.9998);
x3_k = aW1*u1_k +
bW1*u1_k_1 +
cW1*x3_k_1;
x3_k_1 = x3_k;
u1_k_1 = u1_k;
x3_k = fi(fi(aW1*u1_k, 1, 32, IQ) +
fi(bW1*u1_k_1, 1, 32, IQ) +
fi(cW1*x3_k_1, 1, 32, IQ), 1, 32, IQ);
x3_k_1 = x3_k;
u1_k_1 = u1_k;
x3_k = IQ30mpyIQX(aW1, 30, u1_k, 30) +
IQ30mpyIQX(bW1, 30, u1_k_1, 30) +
IQ30mpyIQX(cW1, 30, x3_k, 30);
x3_k_1 = x3_k;
u1_k_1 = u1_k;
x = x3_k;
x = x3_k.double;
x = x3_k;
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
SISTEMAS DE ARMAS E MUNIÇÕES
parte de um código de programa que ilustra a
conversão de um código de programa feito no
Matlab para o código C-ANSI do DSP.
6. CONCLUSÃO
Este artigo teve como objetivo descrever um
procedimento para transformação de um
algoritmo em ponto-flutuante em ponto-fixo,
utilizando-se a minimização da norma l¥ , por
meio de algoritmo genético. Para isso, foi
descrita uma forma prática e rápida de
implementação de controladores embarcados,
usando o Matlab, por intermédio de seu Toolbox
de ponto-fixo e a biblioteca IQMath,
disponibilizada pela Texas Instruments. O resumo
prático aqui apresentado para implementação
de algoritmos embarcados em DSP de pontofixo vem se mostrando muito útil em diversos
trabalhos/projetos desenvolvidos pelos
autores.
Espera-se que as contribuições deste artigo
facilitem o uso prático de DSP de ponto-fixo
durante a fase de prototipagem de sistemas de
controle digital embarcados.
REFERÊNCIAS
1. CANTIM, M. A. et al. A metric for automatic wordlength deter mination of hardware datapaths. IEEE
Transaction on Computer-Aided Design of Integrated Circuits
and System, v. 25(10), p. 2228-2231, 2006.
2. CONSTANTINIDES, G. A.; CHEUNG, P. Y. K.; LUK.
W. Wordlength optimization for linear digital signal
processing. IEEE Trans. on Computer-Aided Design of
Integrated Circuits and System, v. 22(10), p. 1432-1442, 2003.
3. DOYLE, J.; FRANCIS, B.; TANNENBAUM, A.
Feedback Control Theory. New York, US: Macmillan, 1992.
4. FANG, Z.; CARLETTA, J. E.; VEILLETTE, R. J.. A
methodology for FPGA-based control implementation.
IEEE Transactions on Control System Technology, v. 13, n.
6, p. 977-987, 2005.
5. GOLDBERG, D. E. Genetic Algorithms in Search,
Optimization and Machine Learning. Reading, MA: AddisonWesley, 1989.
6. INSTRUMENTS, T. T. IQMath Library - A Virtual
Floating-Point Engine. Dallas, US: TI - SPRC87, 2002.
7. KIM, S.; SUNG, W. A Floating-point to Fixed-point
assembly program translator for TMS320C25. IEEE
Transaction on Circuits and Systems, v. 41(11), p. 730-739,
1994.
8. KIM, S.; KUM, K.; SUNG, W. Fixed-point optimization
utility for c and c++ based digital signal processing
programs. IEEE Transaction on Circuits and Systems, v.
45(11), p. 1455-1464, 1998.
9. MURDOCCA, M.; HEURING, V. Introdução à
arquitetura de computadores. Rio de Janeiro - RJ: Editora
Campus, 2001.
10. PORTELINHA, F. M. Programação Avançada para
Processadores de Ponto-Fixo utilizando o Code Composer
Studio. Santa Rita do Sapucaí - MG: DSP Telecomunicações
Ltda, 2007.
11. ROCHA, P.H.; FERREIRA, H.C.; PORSCH, M.C.;
SALES, R.M. Fixed-Point DSP Implementation of
Nonlinear H-infinity Controller for Large Gap
Electromagnetic Suspension System. 17th IFAC World
Congress, Seoul - Korea, 2008.
12. VIANA, G. Padrão IEEE-754 para aritmética binária
de ponto-flutuante. Revista CT, v. 1(1), p. 29-33, 1999.
REVISTA PESQUISA NAVAL, BRASÍLIA, N. 20, P. 9-17
17
Download