Compreendendo a filtragem digital com microcontroladores incorporados
Aprenda sobre os métodos amplamente usados para filtrar e processar amostras de dados no domínio do tempo enquanto examina mais de perto o mecanismo Dual Biquad IIR da unidade PowerQuad no MCU LPC55S69.
Ao lidar com amostras de dados coletados ao longo do tempo, ou no domínio do tempo, uma das operações mais básicas é “filtrar” os dados. É importante entender as maneiras comuns pelas quais os dados podem ser filtrados digitalmente para obter os melhores resultados e liberar uma CPU para realizar outras tarefas, especialmente quando se trata de microcontroladores incorporados.
Neste artigo, aprenda sobre os métodos amplamente usados para filtrar e processar amostras de dados no domínio do tempo. Além disso, dê uma olhada mais de perto no mecanismo Dual Biquad IIR da unidade PowerQuad no LPC55S69 MCU - um versátil bloco de construção de DSP útil em muitos casos de uso de filtragem.
Filtros comuns para dados de amostragem contínua
Ao amostrar dados no domínio do tempo, os dados são continuamente coletados a uma taxa fixa conhecida. Os filtros no domínio do tempo aceitam esses dados como uma entrada e produzem um novo sinal que é modificado de alguma forma. A saída de um filtro é apenas outro sinal no domínio do tempo, que pode ser processado posteriormente ou transferido para um conversor digital para analógico (DAC).
Normalmente abordamos os filtros em termos de como eles respondem às ondas senoidais. Se considerarmos um sinal de entrada como uma onda senoidal simples, o filtro pode ajustar a amplitude da entrada, bem como ajustar sua fase. Ao aplicar um sinal complexo ao filtro, ele ajustará a amplitude e a fase dos componentes senoidais do sinal. O modo como o filtro se comporta em uma faixa de frequências é chamado de resposta de frequência.
Uma operação padrão no domínio do tempo é realizada pelos chamados filtros Finite Impulse Response (FIR), que misturam a amostra de dados mais recente com os elementos coletados anteriormente para obter a próxima amostra de saída.
Figura 1. Amostra por processamento de filtro de amostra usando um histórico da entrada.
Uma maneira de implementar esse filtro é armazenar amostras anteriores em uma matriz e combiná-las usando uma equação direta:
x [n] // A entrada mais recente
x [n-1], x [n-2] // As duas amostras de entrada anteriores
y [n] // A próxima saída amostra
y [n] =b0 * x [n] + b1 * x [n-1] + b2 * x [n-2]
Este fragmento de pseudo-código específico combina a amostra mais recente com as duas amostras de dados anteriores. Ele multiplica cada amostra de dados com um coeficiente constante separado antes de somar os resultados para obter a próxima amostra de saída. Em resumo, isso representa uma operação simples de multiplicação e acumulação, onde os coeficientes constantes e o comprimento do histórico controlam a resposta em frequência do filtro.
Ao escolher os valores apropriados para os coeficientes, é possível construir vários tipos de filtros. Se o filtro atenuar as altas frequências, ele atua como um filtro passa-baixa. Ao atenuar as baixas frequências, o filtro resultante funcionará como um filtro passa-altas. Também é possível combinar as duas abordagens, o que resultará em um filtro passa-banda.
Os filtros FIR são conceitualmente simples, mas podem exigir algumas amostras de dados anteriores para obter um controle preciso sobre sua resposta de frequência. Embora esse filtro seja fácil de entender e implementar, executá-lo em uma CPU convencional pode ser complicado, especialmente com um histórico de tamanho moderado. Isso ocorre porque cada amostra requer muitas operações de multiplicação e adição para determinar a saída.
Um método para reduzir a quantidade de histórico necessária é usar as saídas de filtro determinadas anteriormente ao calcular a próxima amostra de saída. Esta é a raiz de outra classe de filtros digitais chamados filtros Infinite Impulse Response (IIR):
// Este exemplo usa as convenções de nomenclatura estabelecidas anteriormente
y [n] =b0 * x [n] + b1 * x [n-1] + b2 * x [n-2] + a1 * y [n-1] + a1 * y [n-2]
O exemplo acima é um caso especial do filtro IIR conhecido como filtro biquad - um bloco de construção comum que pode ser colocado em cascata para construir filtros maiores. Esta abordagem requer menos coeficientes em comparação com um filtro FIR para atingir a resposta de frequência desejada. Existem compensações especiais a serem consideradas ao usar essa abordagem. O uso de feedback pode fazer os filtros oscilarem se os coeficientes não forem escolhidos corretamente.
Além disso, existem muitas ferramentas que podem gerar automaticamente os coeficientes para todos os casos de uso comuns. É comum encontrar “livros de receitas” para calcular os coeficientes do filtro.
Figura 2. Uma das muitas ferramentas que geram coeficientes automaticamente.
Usando os motores PowerQuad IIR Biquad
A unidade PowerQuad LPC55S69 incorpora hardware dedicado para a computação de filtros biquad IIR. Empregar o PowerQuad para filtrar as amostras de dados coletadas deixará a CPU livre para realizar outras tarefas.
Conforme discutido acima, os algoritmos de filtro não são complicados de implementar, mas podem consumir muito tempo da CPU. A unidade PowerQuad do LPC55S69 MCU contém hardware dedicado otimizado para muitos filtros e operações matemáticas complexas. Ele é conectado por meio do barramento AHB e da interface do coprocessador Arm® Cortex®-M33.
O ambiente de desenvolvimento padrão para o LPC55S69 é o IDE MCUXpresso baseado em eclipse gratuito. O SDK LPC55S69 contém muitos exemplos úteis, alguns dos quais são aplicativos de exemplo PowerQuad.
Figura 3. Selecionando o exemplo de filtro digital PowerQuad.
O projeto de exemplo ‘powerquad_filter’ contém alguns exemplos de diferentes configurações de filtro. O arquivo ‘powerquad_filter.c’ tem várias funções que demonstram configurações básicas de filtro.
Anteriormente, o artigo discutiu um filtro que usa "Formulário direto I", que é a implementação mais direta. No entanto, o PowerQuad reorganiza o fluxo de operações de multiplicação e adição sem alterar o resultado, levando ao ‘Formulário direto II’, que não exige que o histórico de entradas e saídas seja armazenado. Em vez disso, um histórico intermediário v [n] é armazenado, também conhecido como estado de filtro.
Vários registradores no barramento AHB são usados para armazenar o estado e os coeficientes para configurar o PowerQuad para operações de filtro IIR. Nos exemplos do SDK, o estado do filtro é inicializado na função PQ_BiquadRestoreInternalState.
Depois de concluído, o filtro está pronto para processar amostras de dados. Isso é feito na função PQ_VectorBiquadDf2F32 em fsl_powerquad_filter.c:
Figura 4. Implementação de filtro IIR vetorizado
Esta função foi projetada para processar blocos de amostras de entrada em múltiplos de oito. Os dados podem ser transferidos de um registrador do núcleo de processamento principal do LPC55S69 para um coprocessador conectado, que é o PowerQuad neste caso, com a ajuda da instrução MCR.
O PowerQuad fará o trabalho de filtragem - uma maneira muito mais eficiente de realizar muitas operações de multiplicação e adição do que teria sido em qualquer um dos núcleos Cortex-M33 do LPC55S69. Uma vez que o PowerQuad é feito, o resultado pode ser acessado com a instrução MCR, que move os dados de um coprocessador de volta para um registro interno da CPU.
Motor Dual Biquad IIR para filtragem digital
O MCU LPC55S69 vem com uma unidade PowerQuad (que contém dois motores biquad separados) que pode ajudar a acelerar a filtragem e operações matemáticas complexas. Os registros de barramento AHB são usados para configurar funções do PowerQuad IIR e os dados são trocados entre os núcleos PowerQuad e Cortex-M33 pela interface do coprocessador.
O LPC55S69 SDK no MCUXpresso é um bom ponto de partida. O código, no entanto, não é otimizado porque deve ser fácil de entender. Lembre-se de que, embora o PowerQuad possa acelerar significativamente os aplicativos de filtragem, a CPU ainda deve transferir dados de e para o coprocessador PowerQuad.
A NXP tem uma ferramenta de design e visualização de filtro IIR Biquad útil para auxiliar na configuração do software. A página da comunidade do NXP também oferece uma visão detalhada da unidade PowerQuad do MCU LPC55S69 e seus recursos.
Artigos do setor são uma forma de conteúdo que permite aos parceiros do setor compartilhar notícias, mensagens e tecnologia úteis com os leitores do All About Circuits de uma forma que o conteúdo editorial não é adequado. Todos os artigos da indústria estão sujeitos a diretrizes editoriais rígidas com a intenção de oferecer aos leitores notícias úteis, conhecimentos técnicos ou histórias. Os pontos de vista e opiniões expressos nos Artigos da Indústria são do parceiro e não necessariamente da All About Circuits ou de seus redatores.
Integrado
- Lógica digital com feedback
- Por que digital?
- Um resumo sobre tecnologia IC para microcontroladores e sistemas incorporados
- O que eu faço com os dados ?!
- Acelerando a transformação digital com IoT Data, graças à Cisco e IBM
- Manutenção no mundo digital
- Capacitando equipes de manufatura digital com conhecimento
- Software industrial se integra à TI
- GE Digital:Insights operacionais com dados e análises
- Conduzindo a fábrica digital com dados MES em tempo real