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