Friday 23 November 2018

Movimentação média filtro hardware


O cientista e os coordenadores guia para processamento de sinal digital Por Steven W. Smith, Ph. D. Capítulo 4: Velocidade de Execução do Software DSP: Hardware O poder de computação está aumentando tão rapidamente, qualquer livro sobre o assunto será obsoleto antes de ser publicado. Seu pesadelo de autores O PC IBM original foi introduzido em 1981, baseado em torno do microprocessador 8088 com um clock de 4,77 MHz e um barramento de dados de 8 bits. Isto foi seguido por uma nova geração de computadores pessoais sendo introduzido a cada 3-4 anos: 8088 rarr 80286 8594 80386 8594 80486 8594 80586 (Pentium). Cada um desses novos sistemas impulsionou a velocidade de computação em um fator de cerca de cinco sobre a tecnologia anterior. Em 1996, a velocidade de relógio tinha aumentado para 200 MHz, eo barramento de dados para 32 bits. Com outras melhorias, isso resultou em um aumento no poder de computação de quase mil em apenas 15 anos Você deve esperar outro fator de mil nos próximos 15 anos. A única maneira de obter informações atualizadas neste campo em rápida mudança é diretamente dos fabricantes: anúncios, folhas de especificação, listas de preços, etc Esqueça os livros de dados de desempenho, procure em revistas e seu jornal diário. Esperar que a velocidade computacional bruta será mais do que dobrar a cada dois anos. Aprender sobre o estado atual da energia do computador simplesmente não é suficiente, você precisa entender e controlar como ele está evoluindo. Tendo isso em mente, podemos saltar para uma visão geral de como a velocidade de execução é limitada pelo hardware do computador. Como os computadores são compostos de muitos subsistemas, o tempo necessário para executar uma determinada tarefa dependerá de dois fatores principais: (1) a velocidade dos subsistemas individuais e (2) o tempo que leva para transferir dados entre esses blocos. A Figura 4-5 mostra um diagrama simplificado dos componentes de limitação de velocidade mais importantes em um computador pessoal típico. A Unidade Central de Processamento (CPU) é o coração do sistema. Conforme descrito anteriormente, consiste em uma dúzia de registros, cada um capaz de conter 32 bits (em computadores de pessoal de geração atual). Também está incluído na CPU a eletrônica digital necessária para operações rudimentares, como mover bits ao redor e aritmética de ponto fixo. A matemática mais envolvida é tratada transferindo os dados para um circuito especial de hardware chamado co-processador matemático (também chamado de unidade de lógica aritmética ou ALU). O co-processador matemático pode estar contido no mesmo chip da CPU, ou pode ser um dispositivo eletrônico separado. Por exemplo, a adição de dois números de ponto flutuante exigiria que a CPU transferisse 8 bytes (4 para cada número) para o coprocessador matemático e vários bytes que descrevessem o que fazer com os dados. Após um curto tempo computacional, o co-processador matemático passaria quatro bytes de volta para a CPU, contendo o número de ponto flutuante que é a soma. Os sistemas de computador mais baratos não têm um coprocessador de matemática, ou fornecem apenas como uma opção. Por exemplo, o microprocessador 80486DX tem um co-processador matemático interno, enquanto o 80486SX não. Estes sistemas de baixo desempenho substituem o hardware por software. Cada uma das funções matemáticas é dividida em operações binárias elementares que podem ser tratadas diretamente dentro da CPU. Enquanto isso fornece o mesmo resultado, o tempo de execução é muito mais lento, digamos, um fator de 10 a 20. A maioria dos softwares de computadores pessoais podem ser usados ​​com ou sem um coprocessador matemático. Isso é feito por ter o compilador gerar código de máquina para lidar com ambos os casos, todos armazenados no programa executável final. Se um co-processador matemático estiver presente no computador particular que está sendo usado, uma seção do código será executada. Se um co-processador matemático não estiver presente, a outra seção do código será usada. O compilador também pode ser direcionado para gerar código para apenas uma dessas situações. Por exemplo, ocasionalmente você encontrará um programa que requer que um coprocessador matemático esteja presente e falhe se for executado em um computador que não tenha um. Aplicativos como o processamento de texto geralmente não se beneficiam de um coprocessador matemático. Isso ocorre porque eles envolvem mover dados em torno da memória, não o cálculo de expressões matemáticas. Da mesma forma, os cálculos envolvendo variáveis ​​de ponto fixo (inteiros) não são afetados pela presença de um coprocessador matemático, uma vez que são manipulados dentro da CPU. Por outro lado, a velocidade de execução de DSP e outros programas computacionais usando cálculos de ponto flutuante pode ser uma ordem de magnitude diferente com e sem um coprocessador matemático. A CPU ea memória principal estão contidas em chips separados na maioria dos sistemas de computador. Por razões óbvias, você gostaria que a memória principal fosse muito grande e muito rápida. Infelizmente, isso torna a memória muito cara. A transferência de dados entre a memória principal ea CPU é um gargalo muito comum para a velocidade. A CPU solicita a memória principal para as informações binárias em um endereço de memória específico e, em seguida, deve aguardar para receber as informações. Uma técnica comum para contornar esse problema é usar um cache de memória. Esta é uma pequena quantidade de memória muito rápida usada como um buffer entre a CPU ea memória principal. Algumas centenas de kilobytes são típicas. Quando a CPU solicita a memória principal para fornecer os dados binários em um endereço particular, eletrônica digital de alta velocidade copia uma seção da memória principal em torno deste endereço para o cache de memória. A próxima vez que a CPU solicitar informações de memória, é muito provável que ele já estará contido no cache de memória, tornando a recuperação muito rápida. Isso se baseia no fato de que os programas tendem a acessar locais de memória que são vizinhos próximos de dados previamente acessados. Em aplicações de computador de pessoal típicas, a adição de um cache de memória pode melhorar a velocidade geral por várias vezes. O cache de memória pode estar no mesmo chip que o CPU, ou pode ser um dispositivo eletrônico externo. A taxa na qual os dados podem ser transferidos entre subsistemas depende do número de linhas de dados paralelas fornecidas e da taxa máxima que os sinais digitais que podem ser transmitidos ao longo de cada linha. Os dados digitais podem geralmente ser transferidos a uma taxa muito mais elevada dentro de um único chip em comparação com a transferência de dados entre os chips. Do mesmo modo, caminhos de dados que devem passar através de conectores eléctricos para outras placas de circuito impresso (isto é, uma estrutura de barramento) serão ainda mais lentos. Esta é uma forte motivação para encher tanto eletrônicos quanto possível dentro da CPU. Um problema particularmente desagradável para a velocidade do computador é a compatibilidade com versões anteriores. Quando uma empresa de informática introduz um novo produto, digamos um cartão de aquisição de dados ou um programa de software, eles querem vendê-lo para o maior mercado possível. Isso significa que ele deve ser compatível com a maioria dos computadores atualmente em uso, que poderia abranger várias gerações de tecnologia. Isso freqüentemente limita o desempenho do hardware ou software para o de um sistema muito mais antigo. Por exemplo, suponha que você compre uma placa IO que se conecta ao barramento de seu computador pessoal Pentium 200 MHz, fornecendo oito linhas digitais que podem transmitir e receber dados um byte por vez. Em seguida, você escreve um programa de montagem para transferir rapidamente dados entre o computador e algum dispositivo externo, como uma experiência científica ou outro computador. Muito para sua surpresa, a taxa máxima de transferência de dados é apenas cerca de 100.000 bytes por segundo, mais de mil vezes mais lento do que a taxa de clock do microprocessador O vilão é o ônibus ISA, uma tecnologia que é compatível com os computadores do início dos anos 1980. A Tabela 4-6 fornece tempos de execução para várias gerações de computadores. Obviamente, você deve tratar estes como aproximações muito ásperas. Se você quiser entender seu sistema, faça medições em seu sistema. É muito fácil escrever um loop que executa um milhão de alguma operação, e usar o relógio para o tempo quanto tempo leva. Os três primeiros sistemas, o 80286, o 80486 eo Pentium, são os computadores pessoais de secretária padrão de 1986, 1993 e 1996, respectivamente. O quarto é um microprocessador de 1994 projetado especialmente para tarefas DSP, o Texas Instruments TMS320C40. O Pentium é mais rápido do que o sistema 80286 por quatro razões: (1) a maior velocidade de clock, (2) mais linhas no barramento de dados, (3) a adição de um cache de memória e (4) um design interno mais eficiente, Exigindo menos ciclos de relógio por instrução. Se o Pentium fosse um Cadillac, o TMS320C40 seria um Ferrari: menos conforto, mas velocidade ofuscante. Este chip é representativo de vários micro-processadores especificamente projetados para diminuir o tempo de execução dos algoritmos DSP. Outros nesta categoria são o Intel i860, ATampT DSP3210, Motorola DSP96002, eo Analog Devices ADSP-2171. Estes geralmente passam pelo nome: microprocessador DSP. Ou RISC (computador com conjunto de instruções reduzido). Este último nome reflete que a velocidade aumentada resulta de menos instruções de nível de montagem disponibilizadas ao programador. Em comparação, microprocessadores mais tradicionais, como o Pentium, são chamados CISC (Complex Instruction Set Computer). Os microprocessadores DSP são usados ​​de duas maneiras: como módulos escravos sob o controle de um computador mais convencional, ou como um processador embutido em uma aplicação dedicada, como um telefone celular. Alguns modelos apenas lidar com números de ponto fixo, enquanto outros podem trabalhar com ponto flutuante. A arquitetura interna usada para obter o aumento da velocidade inclui: (1) lotes de memória cache muito rápida contida dentro do chip, (2) ônibus separados para o programa e dados, permitindo que os dois sejam acessados ​​simultaneamente (chamados de Arquitetura de Harvard) (3) hardware rápido para cálculos matemáticos contidos diretamente no microprocessador, e (4) um projeto de pipeline. Uma arquitetura de pipeline quebra o hardware necessário para uma determinada tarefa em vários estágios sucessivos. Por exemplo, a adição de dois números pode ser feita em três estágios de pipeline. A primeira etapa do pipeline não faz nada, mas buscar os números a serem adicionados de memória. A única tarefa da segunda etapa é juntar os dois números. A terceira etapa não faz nada, mas armazenar o resultado na memória. Se cada estágio pode completar sua tarefa em um único ciclo de clock, todo o procedimento levará três ciclos de clock para executar. A principal característica da estrutura do pipeline é que outra tarefa pode ser iniciada antes que a tarefa anterior seja concluída. Neste exemplo, poderíamos começar a adição de outros dois números assim que a primeira etapa estiver ociosa, no final do primeiro ciclo de clock. Para um grande número de operações, a velocidade do sistema será citada como uma adição por ciclo de relógio, mesmo que a adição de quaisquer dois números requer três ciclos de relógio para ser concluída. Pipelines são grandes para a velocidade, mas eles podem ser difíceis de programar. O algoritmo deve permitir que um novo cálculo comece, mesmo que os resultados de cálculos prévios não estejam disponíveis (porque eles ainda estão no pipeline). O cientista e engenheiros guia para processamento de sinal digital Por Steven W. Smith, Ph. D. Capítulo 6: Convolução Vamos resumir este modo de entender como um sistema altera um sinal de entrada para um sinal de saída. Primeiro, o sinal de entrada pode ser decomposto em um conjunto de impulsos, cada um dos quais pode ser visto como uma função delta escalada e deslocada. Em segundo lugar, a saída resultante de cada impulso é uma versão escalonada e deslocada da resposta ao impulso. Em terceiro lugar, o sinal de saída global pode ser encontrado adicionando estas respostas de impulso escalonadas e deslocadas. Em outras palavras, se conhecemos uma resposta de impulso de sistemas, então podemos calcular qual será a saída para qualquer possível sinal de entrada. Isso significa que sabemos tudo sobre o sistema. Não há nada mais que se possa aprender sobre as características de um sistema linear. (No entanto, em capítulos posteriores mostraremos que essas informações podem ser representadas em diferentes formas). A resposta ao impulso passa por um nome diferente em algumas aplicações. Se o sistema considerado é um filtro. A resposta ao impulso é chamada de kernel do filtro. O núcleo da convolução. Ou simplesmente, o kernel. No processamento de imagem, a resposta ao impulso é chamada de função de propagação de pontos. Embora esses termos sejam usados ​​de maneiras ligeiramente diferentes, todos significam a mesma coisa, o sinal produzido por um sistema quando a entrada é uma função delta. Convolução é uma operação matemática formal, assim como multiplicação, adição e integração. A adição toma dois números e produz um terceiro número. Enquanto convolução leva dois sinais e produz um terceiro sinal. Convolução é usado na matemática de muitos campos, tais como probabilidade e estatística. Em sistemas lineares, a convolução é usada para descrever a relação entre três sinais de interesse: o sinal de entrada, a resposta de impulso e o sinal de saída. A Figura 6-2 mostra a notação quando a convolução é usada com sistemas lineares. Um sinal de entrada, x n, entra em um sistema linear com uma resposta de impulso, h n, resultando em um sinal de saída, y n. Na forma de equação: x n h n y n. Expressa em palavras, o sinal de entrada convoluído com a resposta ao impulso é igual ao sinal de saída. Assim como a adição é representada pelo mais,, ea multiplicação pela cruz, vezes, a convolução é representada pela estrela,. É lamentável que a maioria das linguagens de programação também usam a estrela para indicar a multiplicação. Uma estrela em um programa de computador significa multiplicação, enquanto uma estrela em uma equação significa convolução. A Figura 6-3 mostra a convolução sendo usada para filtragem passa-baixa e passa-alta. O sinal de entrada de exemplo é a soma de dois componentes: três ciclos de uma onda senoidal (representando uma alta freqüência), mais uma rampa lentamente crescente (composta de baixas freqüências). Em (a), a resposta de impulso para o filtro passa-baixo é um arco liso, resultando apenas na forma de onda de rampa que varia lentamente sendo passada para a saída. Similarmente, o filtro de passagem alta, (b), permite que apenas a sinusóide com mudança mais rápida passe. A Figura 6-4 ilustra dois exemplos adicionais de como a convolução é usada para processar sinais. O atenuador inversor, (a), inverte o sinal de cima para baixo e reduz a sua amplitude. A derivada discreta (também chamada de primeira diferença), mostrada em (b), resulta em um sinal de saída relacionado com a inclinação do sinal de entrada. Observe os comprimentos dos sinais nas Figs. 6-3 e 6-4. Os sinais de entrada são de 81 amostras de comprimento, enquanto que cada resposta de impulso é composta de 31 amostras. Na maioria dos aplicativos DSP, o sinal de entrada é de centenas, milhares ou mesmo milhões de amostras de comprimento. A resposta ao impulso é geralmente muito mais curta, por exemplo, alguns pontos para algumas centenas de pontos. A matemática por trás convolução doesnt restringir quanto tempo esses sinais são. No entanto, especifica o comprimento do sinal de saída. O comprimento do sinal de saída é igual ao comprimento do sinal de entrada, mais o comprimento da resposta ao impulso, menos um. Para os sinais nas Figs. 6-3 e 6-4, cada sinal de saída é: 81 31 - 1 111 amostras de comprimento. O sinal de entrada é executado da amostra 0 a 80, a resposta de impulso da amostra 0 a 30 eo sinal de saída da amostra 0 a 110. Agora chegamos à matemática detalhada da convolução. Conforme utilizado no Processamento de Sinal Digital, a convolução pode ser entendida de duas formas distintas. O primeiro analisa a convolução do ponto de vista do sinal de entrada. Isso envolve analisar como cada amostra no sinal de entrada contribui para muitos pontos no sinal de saída. A segunda via analisa a convolução do ponto de vista do sinal de saída. Isso examina como cada amostra no sinal de saída recebeu informações de muitos pontos no sinal de entrada. Tenha em mente que essas duas perspectivas são maneiras diferentes de pensar sobre a mesma operação matemática. O primeiro ponto de vista é importante porque fornece uma compreensão conceitual de como a convolução pertence ao DSP. O segundo ponto de vista descreve a matemática da convolução. Isso simboliza uma das tarefas mais difíceis que você encontrará no DSP: fazer com que seu entendimento conceitual se encaixe com a confusão da matemática usada para comunicar as idéias. A média móvel exponencial (EMA) Explicada Como dissemos na lição anterior, as médias móveis simples podem ser Distorcida por picos. Vamos começar com um exemplo. Let8217s dizem que traçamos um SMA de 5 períodos no gráfico diário do EURUSD. Os preços de fechamento para os últimos 5 dias são os seguintes: A média móvel simples seria calculada da seguinte forma: (1.3172 1.3231 1.3164 1.3186 1.3293) 5 1.3209 Simplesmente, certo Bem, e se houvesse um noticiário no dia 2 que faz com que o euro Para cair através da placa. Isso faz com que o EURUSD mergulhe e feche em 1.3000. Vamos ver o efeito que isso teria sobre o período 5 SMA. A média móvel simples seria calculada da seguinte forma: O resultado da média móvel simples seria muito menor e lhe daria a noção de que o preço estava realmente diminuindo, quando, na realidade, o Dia 2 era apenas um evento único Causado pelos maus resultados de um relatório econômico. O ponto que estamos tentando fazer é que às vezes a média móvel simples pode ser muito simples. Se só houvesse uma maneira que você poderia filtrar esses picos para que você wouldn8217t obter a idéia errada. Hmm8230 Espere um minuto8230 Sim, há uma maneira It8217s chamado Exponential Moving Average Médias móveis exponenciais (EMA) dar mais peso para os períodos mais recentes. Em nosso exemplo acima, a EMA colocaria mais peso nos preços dos dias mais recentes, que seriam os dias 3, 4 e 5. Isso significaria que o pico no dia 2 seria de menor valor e não teria tão grande Um efeito sobre a média móvel como seria se tivéssemos calculado para uma média móvel simples. Se você pensar nisso, isso faz muito sentido porque o que isso faz é colocar mais ênfase no que os comerciantes estão fazendo recentemente. A média móvel móvel exponencial (EMA) ea média móvel simples (SMA) de lado a lado Let8217s dão uma olhada no gráfico de 4 horas do USDJPY para destacar como uma média móvel simples (SMA) e média móvel exponencial (EMA) iria olhar lado a lado Em um gráfico. Observe como a linha vermelha (a EMA 30) parece ser preço mais próximo do que a linha azul (a 30 SMA). Isso significa que representa com mais precisão a ação de preço recente. Você provavelmente pode adivinhar por que isso acontece. It8217s porque a média móvel exponencial coloca mais ênfase no que tem acontecido ultimamente. Ao negociar, é muito mais importante ver o que os comerciantes estão fazendo AGORA, em vez do que eles estavam fazendo na semana passada ou no mês passado. Salve seu progresso fazendo login e marcando a lição completa

No comments:

Post a Comment