Tuesday, 21 January 2020

Fixed point moving average filter


O Guia de cientistas e engenheiros para processamento de sinal digital Por Steven W. Smith, Ph. D. Capítulo 28: Processadores de sinal digital corrigidos versus o processamento de sinal digital de ponto flutuante podem ser divididos em duas categorias, ponto fixo e ponto flutuante. Referem-se ao formato usado para armazenar e manipular números dentro dos dispositivos. Os DSP de ponto fixo geralmente representam cada número com um mínimo de 16 bits, embora um comprimento diferente possa ser usado. Por exemplo, a Motorola fabrica uma família de DSPs de ponto fixo que usam 24 bits. Há quatro formas comuns de que esses 2 16 65536 padrões de bits possíveis podem representar um número. Em inteiro não assinado. O número armazenado pode assumir qualquer valor inteiro de 0 a 65.535. Da mesma forma, o inteiro assinado usa dois complementos para tornar o intervalo incluir números negativos, de -32,768 para 32,767. Com a notação de fração não assinada, os 65.536 níveis são distribuídos uniformemente entre 0 e 1. Por fim, o formato de fração assinado permite números negativos, igualmente espaçados entre -1 e 1. Em comparação, os DSP de ponto flutuante normalmente usam um mínimo de 32 bits para armazenar cada valor. Isso resulta em muitos mais padrões de bits do que para ponto fixo, 2 32 4,294,967,296 para ser exato. Uma característica chave da notação de ponto flutuante é que os números representados não estão uniformemente espaçados. No formato mais comum (ANSIIEEE Std. 754-1985), os números maiores e menores são plusmn3.4times10 38 e 1.210 -38. respectivamente. Os valores representados estão desigualmente espaçados entre esses dois extremos, de modo que a diferença entre dois números é cerca de dez milhões de vezes menor do que o valor dos números. Isso é importante porque coloca grandes lacunas entre grandes números, mas pequenas lacunas entre pequenos números. A notação de ponto flutuante é discutida em mais detalhes no Capítulo 4. Todos os DSPs de ponto flutuante também podem lidar com números de ponto fixos, uma necessidade de implementar contadores, loops e sinais provenientes do ADC e indo para o DAC. No entanto, isso não significa que a matemática de ponto fixo será realizada tão rapidamente quanto as operações de ponto flutuante depende da arquitetura interna. Por exemplo, os DSP SHARC são otimizados para operações de ponto flutuante e pontos fixos, e os executa com igual eficiência. Por esse motivo, os dispositivos SHARC são freqüentemente designados como DSPs de 32 bits, em vez de apenas pontos flutuantes. A Figura 28-6 ilustra os trade-offs primários entre DSPs de ponto flutuante e fixo. No Capítulo 3, enfatizamos que a aritmética do ponto fixo é muito mais rápida que o ponto flutuante em computadores de propósito geral. No entanto, com os DSPs, a velocidade é aproximadamente a mesma, resultado de o hardware ser altamente otimizado para operações de matemática. A arquitetura interna de um DSP de ponto flutuante é mais complicada do que para um dispositivo de ponto fixo. Todos os registos e buses de dados devem ter 32 bits de largura, em vez de apenas 16, o multiplicador e a ALU devem poder executar rapidamente a aritmética de ponto flutuante, o conjunto de instruções deve ser maior (para que eles possam lidar com números de ponto flutuante e fixo) e em breve. O ponto flutuante (32 bits) possui uma precisão melhor e um alcance dinâmico maior do que o ponto fixo (16 bits). Além disso, os programas de ponto flutuante muitas vezes têm um ciclo de desenvolvimento mais curto, uma vez que o programador geralmente não precisa se preocupar com problemas como transbordamento, sub-fluxo e erro de arredondamento. Por outro lado, os DSP de ponto fixo têm sido tradicionalmente mais baratos do que os dispositivos de ponto flutuante. Nada muda mais rapidamente do que o preço da eletrônica. Tudo o que você encontrar em um livro estará desatualizado antes de ser impresso. No entanto, o custo é um fator chave para entender como os DSPs estão evoluindo e precisamos dar uma idéia geral. Quando este livro foi concluído em 1999, os DSP de ponto fixo vendidos para entre 5 e 100, enquanto os dispositivos de ponto flutuante estavam no intervalo de 10 a 300. Essa diferença de custo pode ser vista como uma medida da complexidade relativa entre os dispositivos. Se você quiser descobrir quais são os preços hoje em dia. Você precisa olhar hoje. Agora, vamos voltar a atenção para o desempenho, o que um sistema de ponto flutuante de 32 bits pode fazer com um ponto fixo de 16 bits. A resposta a esta pergunta é a relação sinal-ruído. Suponha que nós armazenamos um número em um formato de ponto flutuante de 32 bits. Conforme mencionado anteriormente, a diferença entre este número e seu vizinho adjacente é de cerca de dez milhões de dólares do valor. Para armazenar o número, deve ser arredondado para cima ou para baixo por um máximo de metade do tamanho da lacuna. Em outras palavras, cada vez que armazenamos um número na notação de ponto flutuante, adicionamos ruído ao sinal. O mesmo acontece quando um número é armazenado como um valor de ponto fixo de 16 bits, exceto que o ruído adicionado é muito pior. Isso ocorre porque as lacunas entre os números adjacentes são muito maiores. Por exemplo, suponha que armazenamos o número 10.000 como um inteiro assinado (executando de -32.768 para 32.767). A diferença entre os números é um dez milésimo do valor do número que estamos armazenando. Se quisermos armazenar o número 1000, a diferença entre números é apenas um milésimo de valor. O ruído nos sinais geralmente é representado pelo seu desvio padrão. Isso foi discutido em detalhes no Capítulo 2. Para aqui, o fato importante é que o desvio padrão desse ruído de quantificação é cerca de um terço do tamanho da lacuna. Isso significa que a relação sinal-ruído para armazenar um número de ponto flutuante é de cerca de 30 milhões para um, enquanto que para um número de ponto fixo é apenas cerca de dez mil para um. Em outras palavras, o ponto flutuante tem cerca de 30.000 vezes menos ruído de quantificação do que o ponto fixo. Isso traz uma maneira importante de que os DSPs sejam diferentes dos microprocessadores tradicionais. Suponhamos implementar um filtro FIR em ponto fixo. Para fazer isso, rooteamos cada coeficiente, multiplique-o pela amostra apropriada do sinal de entrada e adicione o produto a um acumulador. É o problema. Nos microprocessadores tradicionais, este acumulador é apenas outra variável de ponto fixo de 16 bits. Para evitar transbordamentos, precisamos escalar os valores que estão sendo adicionados e, adicionalmente, adicionar o ruído de quantização em cada etapa. No pior dos casos, esse ruído de quantificação irá simplesmente adicionar, diminuindo significativamente a relação sinal-ruído do sistema. Por exemplo, em um filtro FIR de 500 coeficientes, o ruído em cada amostra de saída pode ser 500 vezes o ruído em cada amostra de entrada. A relação sinal-ruído de dez mil para um caiu para um horrível vinte para um. Embora este seja um caso extremo, ele ilustra o ponto principal: quando muitas operações são realizadas em cada amostra, é ruim, realmente ruim. Consulte o Capítulo 3 para obter mais detalhes. DSPs lidar com esse problema usando um acumulador de precisão estendida. Este é um registro especial que tem 2-3 vezes mais bits que os outros locais de memória. Por exemplo, em um DSP de 16 bits, ele pode ter 32 a 40 bits, enquanto no SHARC DSPs contém 80 bits para uso em ponto fixo. Esta faixa estendida elimina praticamente o ruído de arredondamento enquanto a acumulação está em andamento. O único erro de arredondamento sofrido é quando o acumulador é dimensionado e armazenado na memória de 16 bits. Esta estratégia funciona muito bem, embora limite como alguns algoritmos devem ser realizados. Em comparação, o ponto flutuante tem um ruído de quantização tão baixo que essas técnicas geralmente não são necessárias. Além de ter um menor ruído de quantização, os sistemas de ponto flutuante também são mais fáceis de desenvolver algoritmos para. A maioria das técnicas DSP baseiam-se em multiplicações e adições repetidas. Em ponto fixo, a possibilidade de um transbordamento ou subfluxo deve ser considerada após cada operação. O programador precisa entender continuamente a amplitude dos números, como os erros de quantificação estão se acumulando, e o que a escala precisa realizar. Em comparação, estas questões não surgem em ponto flutuante, os números cuidam de si mesmos (exceto em casos raros). Para lhe dar uma melhor compreensão desta questão, a Fig. 28-7 mostra uma tabela do manual do usuário SHARC. Isso descreve as formas em que a multiplicação pode ser realizada tanto para formatos de ponto fixo como flutuante. Primeiro, veja como os números de ponto flutuante podem ser multiplicados, existe apenas uma maneira, isto é, Fn Fx Fy, onde Fn, Fx e Fy são um dos 16 registros de dados. Não poderia ser mais simples. Em comparação, veja todos os comandos possíveis para a multiplicação de ponto fixo. Estas são as muitas opções necessárias para lidar eficientemente com os problemas de arredondamento, escala e formato. Na Fig. 28-7, Rn, Rx e Ry referem-se a qualquer um dos 16 registros de dados, e MRF e MRB são acumuladores de 80 bits. As linhas verticais indicam opções. Por exemplo, a entrada de cima para a esquerda nesta tabela significa que todos os seguintes comandos são válidos: Rn Rx Ry, MRF Rx Ry e MRB Rx Ry. Em outras palavras, o valor de dois registros pode ser multiplicado e colocado em outro registrador, ou em um dos acumuladores de precisão estendida. Esta tabela também mostra que os números podem ser assinados ou não assinados (S ou U) e podem ser fracionários ou inteiros (F ou I). As opções RND e SAT são formas de controlar o arredondamento e o excesso de registro. Existem outros detalhes e opções na tabela, mas eles não são importantes para a nossa discussão atual. A importante idéia é que o programador de ponto fixo deve compreender dezenas de maneiras de realizar a tarefa muito básica de multiplicação. Em contraste, o programador de ponto flutuante pode gastar seu tempo concentrando-se no algoritmo. Dado estes compromissos entre ponto fixo e ponto flutuante, como você escolhe o que usar. Aqui estão algumas coisas a considerar. Primeiro, veja quantos bits são usados ​​no ADC e no DAC. Em muitas aplicações, 12-14 bits por amostra é o cruzamento para usar o ponto fixo versus o ponto flutuante. Por exemplo, a televisão e outros sinais de vídeo normalmente usam ADC e DAC de 8 bits, e a precisão do ponto fixo é aceitável. Em comparação, as aplicações de áudio profissionais podem ser amostradas com até 20 ou 24 bits, e quase certamente precisam de ponto flutuante para capturar o grande alcance dinâmico. A próxima coisa a observar é a complexidade do algoritmo que será executado. Se for relativamente simples, pense ponto fixo se for mais complicado, pense em ponto flutuante. Por exemplo, a filtragem FIR e outras operações no domínio do tempo requerem apenas algumas dúzias de linhas de código, tornando-as adequadas para o ponto fixo. Em contraste, algoritmos de domínio de freqüência, como análise espectral e convolução FFT, são muito detalhados e podem ser muito mais difíceis de programar. Enquanto eles podem ser escritos em ponto fixo, o tempo de desenvolvimento será muito reduzido se o ponto flutuante for usado. Por fim, pense no dinheiro: quão importante é o custo do produto e a importância do custo do desenvolvimento. Quando o ponto fixo é escolhido, o custo do produto será reduzido, mas o custo de desenvolvimento provavelmente será maior devido a Os algoritmos mais difíceis. De maneira inversa, o ponto flutuante geralmente resultará em um ciclo de desenvolvimento mais rápido e mais barato, mas um produto final mais caro. A Figura 28-8 mostra algumas das principais tendências nos DSPs. A Figura (a) ilustra o impacto que os Processadores de Sinal Digital tiveram no mercado incorporado. Estas são aplicações que utilizam um microprocessador para operar e controlar diretamente algum sistema maior, como um telefone celular, microondas ou painel de exibição de instrumentos automotivos. O microcontrolador conhecido é freqüentemente usado para se referir a esses dispositivos, para distingui-los dos microprocessadores usados ​​em computadores pessoais. Conforme mostrado em (a), cerca de 38 designers embutidos já começaram a usar DSPs, e outros 49 estão considerando a mudança. O alto rendimento e o poder computacional dos DSPs muitas vezes os torna uma escolha ideal para projetos incorporados. Conforme ilustrado em (b), cerca de dois vezes o número de engenheiros atualmente usa o ponto fixo como uso de DSPs de ponto flutuante. No entanto, isso depende muito da aplicação. O ponto fixo é mais popular em produtos de consumo competitivos onde o custo da eletrônica deve ser mantido muito baixo. Um bom exemplo disso é os telefones celulares. Quando você está em concorrência para vender milhões de seu produto, uma diferença de custo de apenas alguns dólares pode ser a diferença entre sucesso e falha. Em comparação, o ponto flutuante é mais comum quando é necessário um maior desempenho e o custo não é importante. Por exemplo, suponha que você esteja projetando um sistema de imagem médica, como um scanner de tomografia computadorizada. Apenas algumas centenas do modelo serão vendidos, a um preço de várias centenas de mil dólares cada. Para esta aplicação, o custo do DSP é insignificante, mas o desempenho é crítico. Apesar do maior número de DSPs de ponto fixo serem usados, o mercado de ponto flutuante é o segmento de crescimento mais rápido. Conforme mostrado em (c), mais de metade dos engenheiros que usam dispositivos de 16 bits planejam migrar para ponto flutuante em algum momento no futuro próximo. Antes de deixar esse tópico, devemos ressaltar que o ponto flutuante e o ponto fixo costumam usar 32 bits e 16 bits, respectivamente, mas nem sempre. Por exemplo, a família SHARC pode representar números em ponto fixo de 32 bits, um modo que é comum em aplicações de áudio digital. Isso faz com que os 2 32 níveis de quantificação espaçados uniformemente em um intervalo relativamente pequeno, digamos, entre -1 e 1. Em comparação, a notação de ponto flutuante coloca os 2 32 níveis de quantificação logaritmicamente em uma grande faixa, tipicamente plusmn3.4times10 38. Isto dá 32 - bit ponto fixo melhor precisão. Ou seja, o erro de quantização em qualquer amostra será menor. No entanto, o ponto flutuante de 32 bits possui um alcance dinâmico maior. O que significa que existe uma maior diferença entre o maior número e o menor número que pode ser representado. Documentação dfilt. latticearma O mais importante é a posição do rótulo no diagrama, que identifica onde o formato se aplica. Como um exemplo, veja a etiqueta LatticeProdFormat, que sempre segue um elemento de multiplicação de coeficientes no fluxo de sinal. O rótulo indica que os coeficientes de rede deixam o elemento de multiplicação com o comprimento da palavra e o comprimento da fração associados às operações do produto que incluem coeficientes. Da revisão da tabela, você vê que o LatticeProdFormat se refere às propriedades ProductWordLength. LatticeProdFracLength. E ProductMode que definem totalmente o formato do coeficiente após várias operações (ou produto). Propriedades Nesta tabela, você vê as propriedades associadas à implementação de rede vertical auto - ressiva de objetos dfilt. Observação A tabela lista todas as propriedades que um filtro pode ter. Muitas das propriedades são dinâmicas, o que significa que elas existem apenas em resposta às configurações de outras propriedades. Você pode não ver todas as propriedades listadas o tempo todo. Para visualizar todas as propriedades de um filtro a qualquer momento, use onde hd é um filtro. Para obter mais informações sobre as propriedades deste filtro ou qualquer objeto dfilt, consulte Propriedades do filtro de ponto fixo. Define o modo usado para responder a condições de transbordamento em aritmética de ponto fixo. Escolha a partir de saturação (limite a saída para o maior valor representável positivo ou negativo) ou envolva (defina valores de transbordamento para o valor representável mais próximo usando aritmética modular). A escolha que você faz afeta apenas a acumulação e a aritmética de saída. Coeficiente e aritmética de entrada sempre satura. Finalmente, os produtos nunca transbordam8212, eles mantêm uma precisão total. Para a saída de uma operação de produto, isso define o tamanho da fração usado para interpretar os dados. Esta propriedade torna-se gravável (você pode alterar o valor) quando você define ProductMode para SpecifyPrecision. Determina como o filtro manipula a saída das operações do produto. Escolha a partir da precisão total (FullPrecision) ou se manter o bit mais importante (KeepMSB) ou o bit menos significativo (KeepLSB) no resultado quando precisar encurtar as palavras de dados. Para que você possa definir a precisão (o comprimento da fração) usado pela saída das multiplicações, você define ProductMode para SpecifyPrecision. Especifica o comprimento da palavra a ser usado para resultados da operação de multiplicação. Esta propriedade torna-se gravável (você pode alterar o valor) quando você define ProductMode para SpecifyPrecision. Especifica se deseja redefinir os estados de filtro e a memória antes de cada operação de filtragem. Permite decidir se o seu filtro mantém estados de filtragem anterior. False é a configuração padrão. Define o modo que o filtro usa para quantificar valores numéricos quando os valores se situam entre valores representáveis ​​para o formato de dados (comprimento de palavra e fração). Ceil - Redonda em direção ao infinito positivo. Convergente - Reduzir para o inteiro representável mais próximo. Retarda os laços até o inteiro inteiro armazenado mais próximo. Este é o menos tendencioso dos métodos disponíveis neste software. Corrigir - Rodar em direção a zero. Andar - em direção ao infinito negativo. Mais próximo - Ronda em direção a mais próximo. Os laços se aproximam do infinito positivo. Rodada - em direção a mais próximo. Os laços se aproximam do infinito negativo para números negativos e para o infinito positivo para números positivos. A escolha que você faz afeta apenas a acumulação e a aritmética de saída. Coeficiente e aritmética de entrada sempre redondo. Finalmente, os produtos nunca transbordam 8212 eles mantêm precisão total. Especifica se o filtro usa coeficientes de ponto fixo assinados ou não assinados. Somente os coeficientes refletem essa configuração de propriedade. Escolha o seu país

No comments:

Post a Comment