Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Inzicht in digitale filtering met ingebouwde microcontrollers

Leer meer over de veelgebruikte methoden voor het filteren en verwerken van gegevensmonsters in het tijdsdomein terwijl u de Dual Biquad IIR-engine van de PowerQuad-eenheid nader bekijkt in de LPC55S69 MCU.

Bij het omgaan met gegevensmonsters die in de loop van de tijd of in het tijddomein zijn verzameld, is een van de meest elementaire bewerkingen het "filteren" van de gegevens. Het is belangrijk om algemene manieren te begrijpen waarop gegevens digitaal kunnen worden gefilterd om de beste resultaten te bereiken en een CPU vrij te maken om andere taken uit te voeren, vooral als het gaat om embedded microcontrollers.

In dit artikel leert u over de veelgebruikte methoden voor het filteren en verwerken van gegevensmonsters in het tijdsdomein. Bekijk ook eens de Dual Biquad IIR-engine van de PowerQuad-eenheid in de LPC55S69 MCU — een veelzijdige DSP-bouwsteen die in veel gevallen van filtering nuttig is.

Algemene filters voor continu gesamplede gegevens

Bij het bemonsteren van gegevens in het tijdsdomein worden gegevens continu verzameld met een bekende, vaste snelheid. Tijddomeinfilters accepteren deze gegevens als invoer en geven een nieuw signaal af dat op de een of andere manier is gewijzigd. De uitvoer van een filter is gewoon een ander tijddomeinsignaal, dat verder kan worden verwerkt of kan worden overgedragen naar een digitaal-naar-analoogomzetter (DAC).

We benaderen filters vaak in termen van hoe ze reageren op sinusgolven. Als we een ingangssignaal beschouwen als een eenvoudige sinusgolf, kan het filter zowel de amplitude van de ingang als de fase aanpassen. Wanneer een complex signaal op het filter wordt toegepast, worden de amplitude en fase van de sinusvormige componenten van het signaal aangepast. Hoe het filter zich over een reeks frequenties gedraagt, wordt de frequentierespons genoemd.

Een standaardbewerking in het tijdsdomein wordt uitgevoerd door de zogenaamde Finite Impulse Response (FIR)-filters, die de meest recente gegevenssteekproef mengen met de eerder verzamelde elementen om de volgende uitvoersteekproef te verkrijgen.

Figuur 1. Monster voor monster filterverwerking met behulp van een geschiedenis van de invoer.

Een manier om zo'n filter te implementeren is om eerdere samples op te slaan in een array en ze te combineren met behulp van een eenvoudige vergelijking:

x[n] // De meest recente invoer
x[n-1], x[n-2] // De twee vorige invoervoorbeelden
y[n] // De volgende uitvoer voorbeeld

y[n] =b0 * x[n] + b1 * x[n-1] + b2 * x[n-2]

Dit specifieke pseudo-codefragment combineert het meest recente voorbeeld met de twee eerdere gegevensmonsters. Het vermenigvuldigt elk gegevensmonster met een afzonderlijke constante coëfficiënt voordat de resultaten worden opgeteld om het volgende uitvoermonster te verkrijgen. Samengevat vertegenwoordigt dit een eenvoudige bewerking van vermenigvuldigen en accumuleren, waarbij de constante coëfficiënten en de lengte van de geschiedenis de frequentierespons van het filter bepalen.

Door de juiste waarden voor de coëfficiënten te kiezen, is het mogelijk om verschillende soorten filters te construeren. Als het filter hoge frequenties dempt, werkt het als een laagdoorlaatfilter. Door lage frequenties te verzwakken, zal het resulterende filter werken als een hoogdoorlaatfilter. Het is ook mogelijk om de twee benaderingen te combineren, wat zal resulteren in een banddoorlaatfilter.

FIR-filters zijn conceptueel eenvoudig, maar kunnen nogal wat eerdere gegevensmonsters vereisen om nauwkeurige controle over de frequentierespons te bereiken. Hoewel dit filter gemakkelijk te begrijpen en te implementeren is, kan het omslachtig zijn om het op een conventionele CPU uit te voeren, vooral met een geschiedenis van gemiddelde grootte. Dit komt omdat elk monster veel vermenigvuldigings- en optelbewerkingen vereist om de uitvoer te bepalen.

Een methode om de benodigde hoeveelheid geschiedenis te verminderen, is om de eerder bepaalde filteruitgangen te gebruiken bij het berekenen van het volgende uitgangsmonster. Dit is de basis van een andere klasse van digitale filters die Infinite Impulse Response-filters (IIR) worden genoemd:

// Dit voorbeeld gebruikt de eerder vastgestelde naamgevingsconventies
y[n] =b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y [n-1] + a1 * y[n-2]

Het bovenstaande voorbeeld is een speciaal geval van het IIR-filter dat bekend staat als een biquad-filter - een veelgebruikte bouwsteen die kan worden gecascadeerd om grotere filters te construeren. Deze benadering vereist minder coëfficiënten in vergelijking met een FIR-filter om de gewenste frequentierespons te bereiken. Er zijn speciale afwegingen waarmee u rekening moet houden bij het gebruik van deze benadering. Het gebruik van feedback kan ervoor zorgen dat filters gaan oscilleren als de coëfficiënten niet correct worden gekozen.

Er bestaan ​​ook veel tools die automatisch de coëfficiënten kunnen genereren voor alle veelvoorkomende use-cases. Het is gebruikelijk om "kookboeken" te vinden om de filtercoëfficiënten te berekenen.

Figuur 2. Een van de vele tools die automatisch coëfficiënten genereren.

De PowerQuad IIR Biquad-engines gebruiken

De LPC55S69 PowerQuad-eenheid bevat speciale hardware voor het berekenen van IIR biquad-filters. Door de PowerQuad te gebruiken voor het filteren van de verzamelde data-samples, blijft de CPU vrij om andere taken uit te voeren.

Zoals hierboven besproken, zijn de filteralgoritmen niet ingewikkeld om te implementeren, maar ze kunnen veel CPU-tijd opslokken. De PowerQuad-eenheid van de LPC55S69 MCU bevat speciale hardware die is geoptimaliseerd voor veel filteren en complexe wiskundige bewerkingen. Het is verbonden via de AHB-bus en de Arm® Cortex®-M33 coprocessor-interface.

De standaard ontwikkelomgeving voor de LPC55S69 is de gratis op eclipse gebaseerde IDE MCUXpresso. De LPC55S69 SDK bevat veel nuttige voorbeelden, waaronder enkele PowerQuad-voorbeeldtoepassingen.

Figuur 3. Het PowerQuad digitale filtervoorbeeld selecteren.

Het voorbeeldproject ‘powerquad_filter’ bevat enkele voorbeelden van verschillende filterconfiguraties. Het bestand 'powerquad_filter.c' heeft verschillende functies die basisfilterinstellingen demonstreren.

Eerder besprak het artikel een filter dat 'Direct Form I' gebruikt, wat de meest eenvoudige implementatie is. De PowerQuad herschikt echter de stroom van vermenigvuldigings- en optelbewerkingen zonder het resultaat te veranderen, wat leidt tot 'Direct Form II', waarbij de geschiedenis van zowel invoer als uitvoer niet hoeft te worden opgeslagen. In plaats daarvan wordt een tussengeschiedenis v[n] opgeslagen, ook wel een filterstatus genoemd.

Een handvol registers op de AHB-bus worden gebruikt voor het opslaan van de status en coëfficiënten om de PowerQuad in te stellen voor IIR-filterbewerkingen. In de SDK-voorbeelden wordt de status van het filter geïnitialiseerd in de functie PQ_BiquadRestoreInternalState.

Zodra dat is voltooid, is het filter klaar om gegevensmonsters te verwerken. Dit wordt gedaan in de functie PQ_VectorBiquadDf2F32 in fsl_powerquad_filter.c:

Figuur 4. Gevectoriseerde IIR-filterimplementatie

Deze functie is ontworpen om blokken invoersamples in veelvouden van acht te verwerken. Gegevens kunnen worden overgedragen van een register van de belangrijkste verwerkingskern van de LPC55S69 naar een aangesloten co-processor, in dit geval de PowerQuad, met behulp van de MCR-instructie.

De PowerQuad zal dan het filterwerk doen - een veel efficiëntere manier om veel vermenigvuldigings- en optelbewerkingen uit te voeren dan op een van de Cortex-M33-kernen van de LPC55S69. Zodra de PowerQuad klaar is, kan het resultaat worden geopend met MCR-instructie, die gegevens van een co-processor terug naar een intern CPU-register verplaatst.

De Dual Biquad IIR-engine voor digitale filtering

De LPC55S69 MCU wordt geleverd met een PowerQuad-eenheid (die twee afzonderlijke biquad-engines bevat) die kunnen helpen bij het versnellen van filtering en complexe wiskundige bewerkingen. AHB-busregisters worden gebruikt om PowerQuad IIR-functies te configureren en de gegevens worden uitgewisseld tussen de PowerQuad- en Cortex-M33-kernen via de coprocessorinterface.

De LPC55S69 SDK in MCUXpresso is een goed startpunt. De code is echter niet geoptimaliseerd omdat deze gemakkelijk te begrijpen moet zijn. Houd er rekening mee dat hoewel de PowerQuad filtertoepassingen aanzienlijk kan versnellen, de CPU nog steeds gegevens van en naar de PowerQuad-co-processor moet overbrengen.

NXP heeft een handige IIR Biquad Filter Design &Visualization Tool om te helpen bij het configureren van software. De communitypagina van NXP biedt ook een diepgaand inzicht in de PowerQuad-eenheid van de LPC55S69 MCU en zijn mogelijkheden.

Industrieartikelen zijn een vorm van inhoud waarmee branchepartners nuttig nieuws, berichten en technologie kunnen delen met lezers van All About Circuits op een manier waarop redactionele inhoud niet goed geschikt is. Alle brancheartikelen zijn onderworpen aan strikte redactionele richtlijnen met de bedoeling de lezers nuttig nieuws, technische expertise of verhalen te bieden. De standpunten en meningen in brancheartikelen zijn die van de partner en niet noodzakelijk die van All About Circuits of zijn schrijvers.


Ingebed

  1. Digitale logica met feedback
  2. Waarom digitaal?
  3. Een kort overzicht van IC-technologie voor microcontrollers en ingebedde systemen
  4. Sneller en verder gaan met Fieldbus
  5. Wat moet ik doen met de gegevens?!
  6. Digitale transformatie versnellen met IoT-gegevens, dankzij Cisco en IBM
  7. Onderhoud in de digitale wereld
  8. Digitale productieteams machtigen met kennis
  9. Industriële software integreert met IT
  10. GE Digital:operationele inzichten met gegevens en analyses
  11. De digitale fabriek aansturen met realtime MES-gegevens