0

Advanced Solutions Nederland is blij te kunnen aankondigen dat het ASN Filter Designer Arm MDK5 software pack nu via Keil beschikbaar is om te downloaden! Het filterpakket biedt MDK-gebruikers een eenvoudige manier om het IP van ASN te gebruiken.

Keil MDK is de meest uitgebreide oplossing voor software-ontwikkeling voor Arm-gebaseerde microcontrollers. Voor MDK worden extra softwarecomponenten en ondersteuning voor microcontroller devices geleverd door softwarepakketten. Download hier

0
0

UI experience 2020 pack

Na het downloaden van de ASN Filter Designer willen de meeste mensen gewoon met de tool spelen, om een gevoel te krijgen of het voor hen werkt. Maar hoe ga je aan de slag met de ASN Filter Designer? Op basis van goede gebruikersfeedback wordt ASNFD v4.4 nu geleverd met het UI experience 2020-pakket. Dit pakket bevat gedetailleerde coachingstips, een verbeterde gebruikerservaring en stap-voor-stap instructies om je op weg te helpen met je ontwerp.

Een snel overzicht van de ASN Filter Designer v4.4 vindt je hieronder, een geweldige tool voorDSP IIR/FIR digitaal filterdesign!

De ASN Filter Designer heeft een snelle, intuïtieve gebruikersinterface. Ontwerp interactief, valideer en implementeer jouw uw digitale filter binnen enkele minuten in plaats van uren. Het kan echter moeilijk zijn om een eerste begin te maken met DSP-filterontwerp, vooral wanneer je geen diepgaande kennis hebt van digitale signaalverwerking. De meeste mensen willen gewoon experimenteren met een tool om een gevoel te krijgen of het voor hen werkt (ja, natuurlijk zijn er tutorials en video’s). Maar waar begin je dan?

Start onmiddellijk met experimenteren met het filterontwerp

Daarom hebben we het UI Experience 2020-pakket ontwikkeld. Op basis van de feedback van de gebruikers hebben we gedetailleerde tooltips en animaties van de belangrijkste functionaliteiten gemaakt. Binnen enkele minuten krijgt u een kickstart in functionaliteiten zoals chart zoom, panning en design markers.

This image has an empty alt attribute; its file name is methods_TP-3.png

Coachingstips, verbeterde gebruikerservaring, stap-voor-stap instructies

Gebaseerd op de feedback van de gebruiker bevat het UI Experience 2020-pakket:

  • Uitgebreide coachingtips
  • Gedetailleerde uitleg over ontwerpmethoden en soorten filters
  • Verbeterde gebruikerservaring:
    • cursors
    • animaties
    • visuele effecten
  • Links naar gedetailleerde werkende oplossingen, tutorials en stap-voor-stap instructies
This image has an empty alt attribute; its file name is Coaching-Tip3.png
This image has an empty alt attribute; its file name is Information-FD3.png

De feedback van de gebruikersgemeenschap is zeer positief! Door het verstrekken van gedetailleerde tooltips en animaties van de belangrijkste functionaliteit, is de eerste stap van het ontwerpen van een filter met jouw gewenste specificaties aanzienlijk vereenvoudigd.

Begin dus meteen met de ASN Filterontwerper en bespaar tot 75% op jouw ontwikkelingskosten!

ASN Filter Designer box
ASN Filter Designer box, the powerful DSP Filter Designer platform
0
0

DSP voor ingenieurs: de ASN Filter Designer is de ideale tool om de sensordata snel te analyseren en te filteren. Maak een algoritme binnen enkele uren in plaats van dagen. Wanneer u met sensorgegevens werkt, herkent u deze uitdagingen waarschijnlijk:

  • Mijn sensordatasignalen zijn te zwak om zelfs maar een analyse te maken. Daarom heb ik versterking van de signalen nodig
  • Waar ik een vlakke lijn zou verwachten, zien de gegevens eruit als een puinhoop door interferentie en andere vervuiling. Ik moet de gegevens eerst opschonen voordat ik ze analyseer.
Sensor data: wanted components, desired signals (DC components), and unwanted components (50HZ sine powerline interference, white noise). Filter sensor data DSP

Waarschijnlijk heb je tot nu toe dagen of zelfs weken gewerkt aan signaalanalyse en filtering. Het ontwikkelingstraject is over het algemeen langzaam en zeer pijnlijk. Denk maar eens aan het aantal uren dat je had kunnen besparen als je een ontwerptool had gehad die alle algoritmische details voor jou beheerde. ASN Filter Designer is een standaardoplossing voor de industrie die wordt gebruikt door duizenden professionele ontwikkelaars die wereldwijd aan iot-projecten werken.

Onze nauwe samenwerking met Arm en ST zorgt ervoor dat alle ontworpen filters 100% compatibel zijn met alle Arm Cortex-M processoren, zoals de populaire STM32-familie van ST.

This image has an empty alt attribute; its file name is Arm_b203_h178.png

Uitdagingen voor ingenieurs

  • 90% van IoT smart sensors zijn gebaseerd op Arm Cortex-M processor technologie
  • Sensor signal processing is moeilijk
  • Sensoren hebben moeite met interferentie en allerlei ongewenste componenten
  • Hoe ontwerp ik een filter dat voldoet aan mijn requirements?
  • Hoe kan ik mijn ontworpen filter controleren op testdata?
  • Voor betere product performance is schone sensor data nodig
  • Tijdrovend proces om een filter op een embedded processor te implementeren
  • Tijd is geld!

Ontwerpers verzanden vaak met traditionele tooling. Deze vereist meestal een iteratieve, trial and error aanpak of deskundige kennis. Met deze aanpak gaat kostbare tijd verloren. ASN Filter Designer helpt u met een interactieve ontwerpmethode. Hierbij voert de tool automatisch de technische specificaties in op basis van eisen die de gebruiker grafisch heeft ingevoerd.

Snelle ontwikkeling van het DSP-algoritme

  • Volledig gevalideerd filterontwerp: geschikt voor toepassing in DSP, microcontroller, FPGA, ASIC of PC-toepassing
  • Automatische gedetailleerde ontwerpdocumentatie: de Filter Designer helpt je met documenatie, waardoor je de peer review kunt versnellen en projectrisico’s verlaagt
  • Eenvoudige overdracht: projectdossier, documentatie en testresultaten bieden een gemakkelijk manier voor overdracht aan collega’s of andere teams
  • Gemakkelijk in te passen in nieuwe scenario’s: het ontwerp kan eenvoudig worden aangepast aan andere eisen en scenario’s, zoals 60Hz interferentieonderdrukking op de voedingslijn, in plaats van de Europese 50Hz.

ASN Filter Designer: de snelle en intuitieve filter designer

De ASN Filter Designer is het ideale hulpmiddel om sensorgegevens snel te analyseren en filteren. Indien nodig kun je jouw gegevens eenvoudig naar tools als Matlab en Python exporteren voor verdere analyse. Daarom is het ideaal voor ingenieurs die een krachtige tool voor signaalanalyse nodig hebben en een datafilter voor hun IOT-toepassing moeten maken. Zeker als je af en toe een datafilter moet maken. Vergeleken met andere tools creeer je een algoritme binnen enkele uren in plaats van dagen.

Exporteer jouw algoritmes eenvoudig naar Matlab, Python, C++ en Arm

Je kunt veel tijd besparen doordat je met ASN Filter Designer algoritmes eenvoudig kunt implementeren in Matlab, Python, C++ of direct op een arm-microcontroller omdat de Filter Designer automatisch code generateert.

Onmiddelijke verlichting

Denk eens aan het aantal uren dat je had kunnen besparen als je een ontwerptool had gehad die alle algoritmische details voor je beheerde.

ASN Filter Designer is een standaardoplossing in de sector die wordt gebruikt door duizenden professionele ontwikkelaars die wereldwijd aan ivd-projecten werken. Onze nauwe samenwerking met Arm en ST zorgt ervoor dat alle filters 100% compatibel zijn met alle Arm Cortex-M processoren.

Hoeveel pijnverzachting kun je voor 125 Euro kopen?

Omdat veel technici onze ASN Filterontwerper voor korte tijd nodig hebben, is een licentie van 125 euro voor slechts 3 maanden mogelijk!

Vraag jezelf maar af: is 125 Euro een eerlijke prijs om te betalen voor onmiddellijke pijnverlichting en resultaat? Wij denken van wel. Bovendien hebben we een licentie voor 1 jaar en zelfs een eeuwigdurende licentie. Download de demo om het zelf te zien of neem contact met ons op voor meer informatie

 

 

Download demo

Prijzen en licenties

0
0

Hoewel het ontwerp van FIR-filters met lineaire fase een eenvoudige opgave is, geldt dit zeker niet voor IIR-filters die meestal een zeer niet-lineaire faserespons hebben, vooral rond de afsnijfrequenties van het filter. Dit artikel bespreekt waarvoor lineairde eigenschappen die nodig zijn om een digitaal filter een lineaire fase te laten hebben en hoe de passband fase van een IIR filter kan worden aangepast om een lineaire fase te bereiken met behulp van all-pass equalisatie filters.

Waarvoor zijn lineaire fase filters bedoeld?

Digitale filters met lineaire fase hebben het voordeel dat ze alle frequentiecomponenten met dezelfde hoeveelheid vertragen, d.w.z. dat ze de faseverhoudingen van het ingangssignaal behouden. Dit behoud van fase betekent dat het gefilterde signaal de vorm van het oorspronkelijke ingangssignaal behoudt. Deze eigenschap is essentieel voor audiotoepassingen, omdat de signaalvorm van het grootste belang is voor het behoud van de high fidelity in het gefilterde geluid. Nog een ander toepassingsgebied waar dit is vereist, is de ECG biomedische golfvormanalyse, omdat eventuele artefacten die door het filter worden geïntroduceerd, verkeerd kunnen worden geïnterpreteerd als hartafwijkingen.

De volgende grafiek toont de filterprestaties van een Chebyshev type I lowpass IIR op ECG-gegevens – invoergolfvorm (weergegeven in blauw) verschoven door 10 samples (\(\small \Delta=10\)) om de groepsvertraging van het filter ongeveer te compenseren. Merk op dat het gefilterde signaal (in rood weergegeven) de oscillaties rond de ECG-piek heeft verzwakt, verbreed en toegevoegd, wat ongewenst is.

Figure 1: IIR lowpass filtering result with phase distortion

Om een digitaal filter een lineaire fase te laten hebben, moet de impulsrespons van een digitaal filter een conjugaat-even of conjugaat-odd-symmetrie hebben rond het midden van het filter. Dit is gemakkelijk te zien voor een FIR-filter,

\(\displaystyle H(z)=\sum\limits_{k=0}^{L-1} b_k z^{-k}\tag{1} \)

Met het volgende constraint op zijn coëfficiënten

\(\displaystyle b_k=\pm\, b^{\ast}_{L-1-k}\tag{2} \)

welke leidt tot

\(\displaystyle z^{L-1}H(z) = \pm\, H^\ast (1/z^\ast)\tag{3} \)

Naar Eqn. 3 kijkend, zien we dat wortels (nullen) van \(\small H(z)\) ook de nullen moeten zijn van  \(\small H^\ast (1/z^\ast)\). Dit betekent dat de wortels van \(\small H(z)\) moet voorkomen in geconjugeerde wederzijdse paren. Bijvoorbeeld wanneer \(\small z_k\) een nul is van \(\small H(z)\), dan moet \(\small H^\ast (1/z^\ast)\) ook een nul zijn.

Waarom hebben IIR filters geen lineaire fase?

Van een digitaal filter wordt gezegd dat het een gebonden ingang, gebonden uitgang stabiel (oftewel: BIBO (Bounded Input, Boundend Output) stabiel), als elke gebonden ingang aanleiding geeft tot een gebonden uitgang. Alle IIR-filters hebben ofwel polen ofwel beide polen en nullen, en moeten BIBO stabiel zijn, d.w.z.

\(\displaystyle \sum_{k=0}^{\infty}\left|h(k)\right|<\infty \tag{4}\)

Hierbij is \(\small h(k)\) de impulsrespons van het filter. Bij het analyseren van Eqn. 4 moet duidelijk zijn dat aan het BIBO-stabiliteitscriterium alleen wordt voldaan als de polen van het systeem binnen de eenheidscirkel liggen, aangezien de eenheidscirkel in het ROC (gebied van convergentie) van het systeem moet worden opgenomen. Het is dus voldoende om te zeggen dat een begrensd ingangssignaal altijd een begrensd uitgangssignaal zal produceren als alle polen binnen de eenheidscirkel liggen.

De nullen daarentegen worden niet beperkt door deze eis en kunnen daardoor overal op het z-vlak liggen, omdat ze niet direct van invloed zijn op de stabiliteit van het systeem. Daarom kan een systeemstabiliteitsanalyse worden uitgevoerd door eerst de wortels van de transferfunctie te berekenen (d.w.z. de wortels van de teller- en noemerpolynomialen) en vervolgens de corresponderende polen en nullen op het z-vlak te plotten.

Door de ontwikkelde logica toe te passen op de polen van een IIR-filter komen we nu tot een zeer belangrijke conclusie waarom IIR-filters geen lineaire fase kunnen hebben..

Een BIBO stabiel filter moet zijn polen binnen de eenheidscirkel hebben, en als zodanig zou een IIR geconjugeerde tegengestelde polen buiten de eenheidscirkel nodig hebben om een lineaire fase te krijgen, waardoor het BIBO onstabiel wordt.

Op basis van deze uitspraak lijkt het niet mogelijk om een IIR te ontwerpen met een lineaire fase. Echter, zoals hieronder besproken, kunnen fase-equalisatiefilters worden gebruikt om de passband-fase respons te lineariseren.

Fase linearisatie met all-pass filters

All-pass fase linearisatiefilters (equalisers) zijn een beproefde methode om de faserespons van een filter te wijzigen zonder de magnitude ervan te beïnvloeden. Een tweede orde (Biquad) all-pass filter wordt gedefinieerd als:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}}\tag{5} \)

Hierbij is \(\small f_c\) is de centre frequency, \(\small r\) de radius van de polen en \(\small f_s\) de sampling frequency. Merk op hoe de teller- en noemercoëfficiënten als spiegelend aan elkaar zijn gerangschikt. De eigenschap van het spiegelbeeld is wat de all-pass filter zijn gewenste eigenschap geeft, namelijk de ontwerper in staat stellen om de faserespons te veranderen terwijl de magnituderespons constant of vlak blijft over het volledige frequentiespectrum.

Cascadering van een APF (all-pass filter) equalisatie cascade (bestaande uit meerdere APF’s) met een IIR-filter, het basisidee is dat we alleen de fasereactie het passbandgebied moeten lineariseren. De andere gebieden, zoals de overgangsband en de stopband, kunnen worden genegeerd, aangezien eventuele niet-lineairiteiten in deze gebieden van weinig belang zijn voor het totale filterresultaat.

De uitdaging

De APF-cascade klinkt als een ideaal compromis voor deze uitdaging, maar in werkelijkheid is een aanzienlijke hoeveelheid tijd en een zeer zorgvuldige afstemming van de APF-posities nodig om een aanvaardbaar resultaat te bereiken. Elke APF heeft twee variabelen: \(\small f_c\) en \(\small r\) die geoptimaliseerd moeten worden, wat de oplossing bemoeilijkt. Dit wordt verder gecompliceerd door het feit dat hoe meer APF-fasen aan de cascade worden toegevoegd, hoe hoger de totale groepsvertraging (latentie) van het filter wordt. Dit laatste kan problematisch worden voor snelle real-time closed loop controlesystemen die afhankelijk zijn van de lage latency eigenschap van een IIR.

Ondanks deze uitdagingen is de APF-equalizer een goed compromis voor het lineariseren van de kenmerken van een IIR-doorgangsfase.

De APF equaliser

ASN Filter Designer biedt ontwerpers een zeer eenvoudig te gebruiken grafische alle-fase equalizer interface voor het lineariseren van de passband fase van IIR filters. Zoals hieronder te zien is, is de interface zeer intuïtief en stelt het ontwerpers in staat om APF-filters snel te plaatsen en te fine-tunen met de muis. De tool berekent automatisch \(\small f_c\) en \(\small r\), gebaseerd op de markerpositie.

APF equaliser ASN Filter Designer

Door met de rechtermuisknop te klikken op de frequentieresponskaart of op een bestaande all-pass design marker wordt een optiemenu weergegeven, zoals links afgebeeld.

U kunt maximaal 10 biquads toevoegen (alleen professionele versie).

Een IIR met lineaire passband fase

Door een equalizer te ontwerpen die bestaat uit drie APF-paren, en deze te cascaderen met het Chebyshev-filter van figuur 1, verkrijgen we een filtergolfvorm die een veel scherpere piek heeft met minder demping en oscillatie dan het oorspronkelijke IIR – zie hieronder. Deze verbetering gaat echter ten koste van drie extra Biquad-filters (de APF-cascade) en een verhoogde groepsvertraging, die nu is opgelopen tot 24 samples ten opzichte van de oorspronkelijke 10 samples.

IIR lowpass filtering result with three APF phase equalisation filters
(minimal phase distortion)
IIR laagdoorlaatfilterresultaat met drie APF-fase-nivelleringsfilters
(minimale fasevervorming)

De frequentierespons van zowel het oorspronkelijke IIR als het geequaliseerde IIR worden hieronder weergegeven, waarbij de groepsvertraging (weergegeven in paars) de gemiddelde vertraging van het filter is en een eenvoudiger manier is om de lineariteit te beoordelen.

IIR without equalisation cascade
IIR zonder equalisatie cascade

IIR with equalisation cascade
IIR met equalisation cascade

Merk op dat de groepsvertraging van de geëgaliseerde IIR passband (rechts afgebeeld) bijna vlak is, wat bevestigt dat de fase inderdaad lineair is.

Automatische code generatie naar Arm processor cores via CMSIS-DSP

De automatische codegeneratie-engine van de ASN Filter Designer maakt het mogelijk om een ontworpen filter te exporteren naar Cortex-M Arm-gebaseerde processoren via het CMSIS-DSP software raamwerk. De ingebouwde analyse- en helpfuncties van de tool helpen de ontwerper bij het succesvol configureren van het ontwerp voor implementatie.

Voordat de code wordt gegenereerd, moeten de IIR- en equalisatiefilters (d.w.z. H1- en Heq-filters) eerst opnieuw worden geoptimaliseerd (samengevoegd) tot een H1-filter (hoofdfilter) structuur voor implementatie. Het optiemenu is te vinden onder de P-Z tab in de hoofd UI.

Alle ontwerpen van IIR-filters met floating point moeten gebaseerd zijn op Single Precision arithmetic en ofwel een Direct Form I of Direct Form II getransponeerde filterstructuur. De Direct Form II getransponeerde structuur wordt geadviseerd voor floating point implementatie vanwege de hogere numerieke nauwkeurigheid.

De instellingen voor de kwantiteit en de filterstructuur zijn te vinden onder het tabblad Q (zoals links afgebeeld). Door Arithmetic op Single Precision en Structure op Direct Form II Transposed te zetten en vervolgens op Apply te klikken, wordt de IIR voor het CMSIS-DSP software raamwerk geconficureerd.

Selecteer het Arm CMSIS-DSP raamwerk in het selectievakje in het filteroverzichtsvenster:

De automatisch gegenereerde C-code op basis van het CMSIS-DSP framework voor directe implementatie op een Arm-gebaseerde Cortex-M processor is hieronder weergegeven:

The ASN Filter Designer's automatic code generator generates all initialisation code, scaling and data structures needed to implement the linearised filter IIR filter via Arm's CMSIS-DSP library.

De automatische codegenerator van de ASN Filter Designer genereert alle initialisatiecode, schaling en datastructuren die nodig zijn om het gelineariseerde filter IIR-filter te implementeren via de CMSIS-DSP-bibliotheek van Arm.

Wat hebben we geleerd?

De wortels van een lineaire fase digitaal filter moeten in geconjugeerde wederzijdse paren voorkomen. Hoewel dit geen probleem is voor een FIR-filter, wordt het voor een IIR-filter onhaalbaar, omdat de polen zowel binnen als buiten de eenheidscirkel zouden moeten liggen, waardoor het filter BIBO onstabiel wordt.

De passband fase-respons van een IIR-filter kan worden gelineariseerd met behulp van een APF-equalisatiecascade. De ASN Filter Designer biedt ontwerpers alles wat ze nodig hebben via een zeer eenvoudig te gebruiken, grafische all-pass fase equalizer interface, om met behulp van de muis een geschikte APF-cascade te ontwerpen!

Het gelineariseerde IIR-filter kan worden geëxporteerd via de automatische codegenerator met behulp van de geoptimaliseerde CMSIS-DSP-bibliotheekfuncties van Arm voor gebruik op elke Cortex-M-microcontroller.

 

 

Download demo

Prijzen en licenties

0
0

Fractional Farrow Delay Filter

Bij signaalverwerking is het soms nodig om de sample frequency van een signaal met een fractie van een sample aan te passen of te verfijnen. Een FIR Farrow vertragingsfilter wordt meestal gebruikt om deze taak te bereiken. Deze kan worden gecombineerd met een traditionele gehele vertragingslijn om een universele fractionele lengte vertragingslijn te bereiken.

Een Fractionele vertraging op basis van een FIR Farrow-structuur kan worden gedefinieerd als:

\(H(z)=(1-\alpha)+\alpha z^{-1}; \; 0 \leq \alpha \leq 1 \)

Welke een fractionele lineaire vertraging oplevert van \(\alpha\) btussen 0 en 1 monster. Een meer universele bouwsteen kan echter worden bereikt door de Farrow-vertragingsstructuur te combineren met een integer vertraging, \(\Delta\)

\(H(z)=(1-\alpha) z^{-\Delta}+\alpha z^{-(\Delta+1)}\)

De onderstaande grafiek toont de magnitude (blauw) en fase (paars) spectra voor \(\Delta=9, \, \alpha=0.52\). Zoals te zien, resulteert het fractionele vertragingselement in een niet-vlak spectrum bij hogere frequenties.


Frequency reponse of Farrow delay filter.

Implementatie

Een Farrow vertragingsfilter kan als volgt in ASN FilterScript worden geïmplementeerd :

ClearH1;  // clear primary filter from cascade

interface alpha = {0,1,0.02,.5}; // fractional delay
interface D = {1,30,1,10};       // integer delay

Main()
Num = {zeros(D),1-alpha,alpha}; // numerator coefficients
Den = {1};                      // denominator coefficient
Gain = 1/sum(Num);              // normalise gain at DC

Download demo nu

Licentie informatie

0
0

Kamfilters (Combfilters) worden gebruikt als powerline (50/60Hz) harmonische annuleringsfilters in audiotoepassingen, en vormen de basis van zogenaamde CIC (cascaded integrator-comb) filters. Deze worden gebruikt voor anti-aliasing in decimatie (sample rate reductie), en anti-imaging in interpolatie (sample rate toename) toepassingen.

De frequentierespons van een kamfilter bestaat uit een reeks van op regelmatige afstand van elkaar geplaatste dalen, die het uiterlijk van een kam geven. Zoals te zien in onderstaande grafiek, verschijnt de afstand van elk dal op oneven of zelfs harmonisch van de gewenste grondfrequentie.

Comb filters have found use as powerline (50/60Hz) harmonic cancellation filters in audio applications, and form the basis of so called CIC (cascaded integrator–comb) filters used for anti-aliasing in decimation (sample rate reduction), and anti-imaging in interpolation (sample rate increase) application

Frequentierespons van een typische FIR-kamfilter (oneven harmonieën):
\(f_s=500Hz\),  \(f_c=25Hz\), \(L=10\) and \(\alpha=1\)

Een FIR-kamfilter kan worden beschreven met de volgende transferfunctie:

\(H(z)=1+\alpha z^{-L}\)
\(\Rightarrow Y(z)=X(z)\left[1+\alpha z^{-L}\right]\)

Het is duidelijk dat de kamfilter gewoon een gewogen vertraagde replica van zichzelf is, gespecificeerd door \(L\). Door het nemen van inverse z-transformaties krijgen we de verschilvergelijking die nodig is voor de implementatie,

\(y(n)=x(n)+\alpha x(n-L)\)

Waarbij \(\alpha\) wordt gebruikt om de Q (bandbreedte) van de notch in te stellen. Deze kan zowel positief als negatief zijn, afhankelijk van het soort frequentierespons dat nodig is. Negatieve waarden van \(\alpha\) hebben hun eerste dieptepunt bij DC en hun tweede dieptepunt bij de fundamentele frequentie. Het is duidelijk dat dit type kamfilter gebruikt kan worden om eventuele DC-componenten uit een gemeten golfvorm te verwijderen als dat nodig is. Alle volgende dalen verschijnen bij gelijkmatige harmonische tot en met de Nyquist-frequentie.

Aan de andere kant hebben positieve waardes van \(\alpha\) alleen op de fundamentele en oneven harmonische frequenties, en kan als zodanig niet worden gebruikt om eventuele DC-componenten te verwijderen.

Toepassing op storingsonderdrukking van de stroomlijn

De affectiviteit van het kamfilter is afhankelijk van de sampling frequency, \(f_s\), aangezien \(L\) alleen beperkt is tot gehele waarden. Ook is een relatie tussen \(f_s\), als \(L\), afhankelijk van het teken van \(\alpha\). In het kader van de in deze discussie besproken toepassing van de netbeëindiging zullen dus alleen positieve waarden van de harmonics in aanmerking worden genomen, aangezien we alleen oneven harmonics hoeven te annuleren.

Een simpele relatie om \(L\) te bepalen kan als volgt worden samengevat voor positieve waardes van\(\alpha\):

\(L=ceil\left( \large{\frac{f_s}{2f_c}}\right)\)

Waarbij \(f_c\) het gewenste middelpunt is van de fundamentele notch frequentie. Op basis van deze uitdrukking kunnen we de sample frequentie herberekenen op dusdanige wijze dat \(f_c\) een echt veelvoud is van \(f_s\)

\(f_{snew}=2f_c L\)

Voorbeeld van een kamfilter

Voor het hier besproken voorbeeld, d.w.z. \(f_s=500Hz\) en \(f_c=25Hz\), verkrijgen we \(L=10\). Echter, als \(f_c=60Hz\), zouden we \(L=5\) nodig hebben en een nieuwe sampling rate van \(600Hz\). Hoewel het interessant is om op te merken dat \(f_s=480Hz\) voor \(L=4\) ook voldoende zou zijn.

Implementatie

Een FIR kamfilter kan als volgt in ASN FilterScript worden geimplementeerd:

ClearH1;  // clear primary filter from cascade
interface L = {4,20,1,5}; // delay
interface alpha = {-1,1,0.01,1};

Main()
Num = {1,zeros(L-1),alpha}; // numerator coefficients
Den = {1};
Gain = 1/sum(abs(Num));


ASN Filter Designer box

Download demo now

Licencing information

0
0

All-pass filters

All-pass filters bieden een eenvoudige manier om de faserespons van een IIR te wijzigen of te verbeteren zonder de omvang ervan te beïnvloeden. Als zodanig worden ze meestal aangeduid als fase-equalizers en hebben ze een bijzondere toepassing gevonden in digitale audiotoepassingen.

In zijn eenvoudigste vorm kan een filter worden opgebouwd uit een eerste orde transfer functie:

\( A(z)=\Large{\frac{r+z^{-1}}{1+r z^{-1}}}  \, \,  \normalsize{; r<1} \)

Merk bij \(\small A(z)\) op, dat de pool en de nul op de echte z-vlakas liggen en dat de pool bij de radius \(\small r\) een nul bij radius \(\small 1/r\) heeft. Zodanig dat de polen en nullen wederkerig zijn met elkaar. Deze eigenschap is de sleutel tot het all-pass filterconcept. Zoals we nu zullen zien door het concept verder uit te breiden naar een tweede orde all-pass filter:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}} \)

Waarbij \(\small f_c\) de middenfrequentie is, \(\small r\) de radius of van de polen is en all pass filter, all-pass filter, allpass filter, all pass pole-zero \(\small f_s\) de sampling frequency. Merk op dat de teller en noemer coefficienten zijn weergegeven als spiegelbeeldig aan elkaar.  De eigenschap van het spiegelbeeld is wat de all-pass filter zijn gewenste eigenschap geeft, namelijk de ontwerper in staat stellen om de faserespons te wijzigen terwijl de magnituderespons constant of vlak blijft over het volledige frequentiespectrum.

all pass filter, all-pass filter, allpass, phase equaliser, altering/improving the phase response of an IIR without affecting its magnitude responseFrequentierespons van het all-pass filter:
Let op de constante omvang van het spectrum (weergegeven in blauw).

Implementatie

Een All-pass filter kan geimplementeerd worden in ASN FilterScript als volgt:

ClearH1;  // clear primary filter from cascade

interface radius = {0,2,0.01,0.5};   // radius value
interface fc = {0,fs/2,1,fs/10};     // frequency value

Main()
Num = {radius^2,-2*radius*cos(Twopi*fc/fs),1};
Den = reverse(Num); // mirror image of Num
Gain = 1;

Voor een gedetailleerde beschrijving van de IIR-faseregelaar en de APF (all-pass filter) ontwerptool van de ASN-filterontwerper, zie het volgende artikel.

Download demo now

Licencing information

0
0

Een Peaking of Bell filter is een type geluidsequalisatiefilter dat de grootte van een bepaalde set frequenties rond een centrumfrequentie versterkt of verzwakt om zo de magnitude van het geluid te egaliseren. Zoals te zien is in de grafiek hieronder, ontleent het filter zijn naam aan de vorm van het magnitudenspectrum (blauwe lijn) dat lijkt op een Bell-curve.

Peaking filter or Bell filter, a type of audio equalisation filter that boosts or attenuates the magnitude of a specified set of frequencies around a centre frequency in order to perform magnitude equalisation. As seen in the plot in the below, the filter gets its name from the shape of the its magnitude spectrum (blue line) which resembles a Bell curve.

Frequentierespons (magnitude weergegeven in blauw, fase weergegeven in paars) van een 2e orde Bell-filter met een piek bij 125 Hz

All-pass filters

Centraal in het Bell-filter staat het zogenaamde All-pass filter. All-pass filters bieden een eenvoudige manier om de faserespons van een IIR te wijzigen/verbeteren zonder de grootte van de IIR te beïnvloeden. Als zodanig worden ze meestal aangeduid als fase-equalizers en hebben ze een bijzondere toepassing gevonden in digitale audiotoepassingen.

Een tweede orde all-pass filter is gedefinieerd als:

\( A(z)=\Large\frac{r^2-2rcos \left( \frac{2\pi f_c}{fs}\right) z^{-1}+z^{-2}}{1-2rcos \left( \frac{2\pi f_c}{fs}\right)z^{-1}+r^2 z^{-2}} \)

Merk op hoe de teller- en noemercoëfficiënten in spiegelbeeldig van elkaar zijn gerangschikt. De eigenschap van dit spiegelbeeld is wat de all-pass filter zijn gewenste eigenschap geeft, namelijk de ontwerper in staat stellen om de faserespons te veranderen terwijl de magnituderespons constant of vlak blijft over het volledige frequentiespectrum.

Een Bell filter kan worden geconstrueerd uit de \(A(z)\) filter door de volgende transferfunctie:

\(H(z)=\Large\frac{(1+K)+A(z)(1-K)}{2}\)

Na enige algebraïsche vereenvoudiging krijgen we de transferfunctie voor de Peaking of Bell filter als:

\(H(z)=\Large{\frac{1}{2}}\left[\normalsize{(1+K)} + \underbrace{\Large\frac{k_2 + k_1(1+k_2)z^{-1}+z^{-2}}{1+k_1(1+k_2)z^{-1}+k_2 z^{-2}}}_{all-pass filter}\normalsize{(1-K)} \right] \)

  • \(K\) wordt gebruikt om de gain en het teken van de piek in te stellen
  • \(k_1\) stelt de piek middenfrequentie in
  • \(k_2\) stelt de bandbreedte van de piek in

Implementatie

Een Bell filter kan gemakkelijk ASN FilterScript worden geimplementeerd:

ClearH1;  // clear primary filter from cascade
interface BW = {0,2,0.1,0.5}; // filter bandwidth
interface fc = {0, fs/2,fs/100,fs/4}; // peak/notch centre frequency
interface K = {0,3,0.1,0.5}; // gain/sign

Main()

k1=-cos(2*pi*fc/fs);
k2=(1-tan(BW/2))/(1+tan(BW/2));

Pz = {1,k1*(1+k2),k2}; // define denominator coefficients
Qz = {k2,k1*(1+k2),1}; // define numerator coefficients
Num = (Pz*(1+K) + Qz*(1-K))/2;
Den = Pz;
Gain = 1;

Deze code kan nu gebruikt worden om een geschikt Bell filter te ontwerpen, waarbij de exacte waardes van \(K, f_c\) en \(BW\) gemakkelijk kunnen worden gevonden door de interface variabelen te tweaken waarbij het resultaat in real-time te zien is, zoals hieronder weergegeven.

Directe aanpassingen in filter ontwerp

Bij de interactiviteit van de FilterScript IDE (geïntegreerde ontwikkelomgeving) staan de zogenaamde interfacevariabelen centraal. Een interface variabele wordt eenvoudigweg genoemd: een scalaire invoervariabele die gebruikt kan worden om een symbolische expressie te wijzigen zonder dat de code opnieuw gecompileerd hoeft te worden – dit stelt ontwerpers in staat om ‘on the fly’ te ontwerpen en snel tot een optimale oplossing te komen.

Zoals in het codevoorbeeld hierboven te zien is, moeten de interfacevariabelen worden gedefinieerd in de initialisatiesectie van de code, en kunnen ze constanten (zoals fs and pi) en eenvoudige wiskundige operatoren, zoals vermenigvuldigen * en /delen, bevatten. Dit wanneer het toevoegen van functies aan een interfacevariabele niet wordt ondersteund.

Een interfacevariabele wordt gedefinieerd als een vectorexpressie:

interface name = {minimum, maximum, step_size, default_value};

Waarbij alle vermeldingen echte scalaire waarden moeten zijn. Vectoren en complexe waarden worden niet gecompileerd.

Real-time updates

Alle interfacevariabelen worden gewijzigd via de interfacevariabele regelaar GUI. Na het compileren van de code gebruikt u de interface variabele controller om de waarden van de interface variabelen te tweaken en de effecten op de overdrachtsfunctie te zien. Als u test op live audio, kunt u een geladen audiobestand streamen en de interfacevariabelen in real-time aanpassen om de effecten van de nieuwe instellingen te horen.

0
0

Grote microcontroller IC-leveranciers zoals ST, NXP, TI, ADI, Atmel/Microchip, Cypress, Maxim hebben afgelopen jaren hun moderne 32-bit microcontrollers gebaseerd op Cortex-M processor cores van Arm. Deze positieve trend betekent dat algoritmen die traditioneel in dure DSP’s (digitale signaalprocessoren) worden gebruikt, nu kunnen worden geïntegreerd in een krachtige, goedkope en energiezuinige microcontroller. Deze zit vol met connectiviteits- en randapparatuuropties.

De koppeling van DSP-functionaliteit met de flexibiliteit van een laagvermogenmicrocontroller heeft veel IC-leveranciers in staat gesteld hun klanten verbeterde 32-bits microcontrollers aan te bieden. Deze zijn geschikt zijn voor veel praktische toepassingen. Nog belangrijker is dat deze combinatie van technologieën ontwerpers die werken aan prijskritische IoT toepassingen in staat heeft gesteld om complexe algoritmische concepten te implementeren. Dit terwijl ze tegelijkertijd de totale kosten van het product laag houden en en toch uitstekende prestaties met een laag vermogen bereiken.

Het upgraden van legacy analoge filters met ASN Filter Designer

Analoge filters bestaan al sinds het begin van de elektronica, variërend van eenvoudige inductor-capacitor netwerken tot meer geavanceerde actieve filters met op-amps. Als zodanig is er een grote verzameling van beproefde en geteste filterontwerpen voor meettoepassingen voor sensoren ontstaan.

Met ASN’s FilterScript symbolische wiskunde scripttaal kunnen ontwerpers bestaande analoge filtertransferfunctie met een paar regels code uitvoeren naar digitaal. De automatische codegenerator van de ASN Filter Designer’s Arm analyseert het ontworpen digitale filter. Vervolgens genereert hij automatisch C code die compliant is met Arm CMSIS-DSP, geschikt is voor directe implementatie op een Cortex-M gebaseerde microcontroller.

Arm CMSIS-DSP software framework

Het Arm CMSIS-DSP (Cortex Microcontroller Software Interface Standard) software framework bestaat uit meer dan 60 DSP functies (inclusief diverse wiskundige functies, zoals sinus en cosinus; IIR/FIR filtering functies, complexe wiskundige functies, en datatypes) ontwikkeld door Arm, die zijn geoptimaliseerd voor hun reeks van Cortex-M processorkernen. Het framework maakt veel gebruik van sterk geoptimaliseerde SIMD (single instruction, multiple data) instructies. Deze voeren meerdere identieke bewerkingen uitvoeren in een single cycle instructie. De SIMD instructies (indien ondersteund door de core) in combinatie met andere optimalisaties stellen engineers in staat om snel en eenvoudig zeer geoptimaliseerde signaalverwerkingsapplicaties voor Cortex-M gebaseerde microcontrollers te produceren.

Wiskundig modelleren van een analoog circuit

Hieronder staat een actief preëmphasefilter weergegeven. Het preëmphasefilter heeft een bijzondere toepassing gevonden in audiowerkzaamheden, omdat het noodzakelijk is de hogere frequenties van het spraakspectrum te versterken, terwijl de lagere frequenties onaangetast blijven. De getoonde R- en C-waarden zijn alleen ingesprongen voor het voorbeeld, meer praktische waarden zullen afhangen van de toepassing. Een krachtige methode om de grootte en de fasekenmerken van het analoge filter in een digitale uitvoering weer te geven, is het mathematisch modelleren van de schakeling. Deze schakeling kan worden geanalyseerd met behulp van de wet van Kirchhoff, aangezien de som van de stromen in de inverterende ingang van de op-amp gelijk moet zijn aan nul om negatieve feedback correct te laten werken – dit resulteert in een overdrachtsfunctie met een negatieve versterking.

Daarom, met behulp van de wet van Ohm, d.w.z. \(I=\frac{V}{R}\),

\(
\displaystyle\frac{X(s)}{R_3}=-\frac{U(s)}{C_1||R_2 + R_1}
\)

Na enige algebraïsche manipulatie kan men zien dat een uitdrukking voor de closed loop gain van het circuit kan worden uitgedrukt als:

\(
\displaystyle\frac{X(s)}{U(s)}=-\frac{R_3}{R_1}\frac{\left(s+\frac{1}{R_2C_1}\right)}{\left(s+\frac{R_1+R_2}{R_1R_2C_1}\right)}
\)

door de waarden in het schakelschema te vervangen door de ontwikkelde overdrachtsfunctie, levert het volgende op

\(
\displaystyle H(s)=-10\left(\frac{s+1000}{s+11000}\right)
\)

Welke sampling rate hebben we nodig?

De afsnijfrequentie bekijkend \(H(s)\), zien we dat de bovenste frequntie \(11000 rad/sec\) of \(1.75kHz\) is. Daarom moet de sampling rate op \(16kHz\) voldoende zijn voor het modelleren van het filter in het digitale domein.

De opties voor de sampling rate staan weergegeven in het hoofd filter design UI  (weergegeven op de afbeelding links).

ASN FilterScript

\(H(s)\) kan eenvoudig worden gespecificeerd in FilterScript met de analogtffunctie:

Nb={1,1000};
Na={1,11000};

Ha=analogtf(Nb,Na,-10,"symbolic");

Merk op hoe de negatieve gain ook direct in het argument van de functie kan worden ingevoerd. Het symbolische sleutelwoord genereert een symbolische transferfunctie weergave in het commandovenster.

De Bilineaire z-transformatie toepassing via het bilineaire commando zonder pre-warping, d.w.z.

Hd=bilinear(Ha,0,"symbolic");

Merk op hoe het bilinear commando automatisch de tellercoëfficiënten met -1 schaalt, om zo het effect van de negatieve gain mee te nemen. De volledige code wordt hieronder weergegeven:

Main()

Nb={1,1000};
Na={1,11000};

Ha=analogtf(Nb,Na,-10,"symbolic");
Hd=bilinear(Ha,0,"symbolic");

Num=getnum(Hd);
Den=getden(Hd);
Gain=getgain(Hd);

Een vergelijking van de analoge en discrete magnitude en de fasespectra is hieronder weergegeven. Bij het analyseren van de spectra is te zien dat bij een sampling rate van 16kHz de analoge en digitale filters vrijwel identiek zijn! Dit toont het relatieve gemak aan waarmee een ontwerper zijn bestaande analoge ontwerpen kan overdragen naar digitaal.

Automatische code generatie naar Arm Cortex-M processors

Zoals aan het begin van dit artikel vermeld, vergemakkelijkt de automatische codegeneratie-engine van de ASN-filterontwerper de export van een ontworpen filter naar Cortex-M Arm-gebaseerde processor cores via het CMSIS-DSP software raamwerk. De ingebouwde analyse- en helpfuncties van de tool helpen de ontwerper bij het succesvol configureren van het ontwerp voor implementatie.

Voordat de code wordt gegenereerd, moet het H2-filter (d.w.z. het filter dat in FilterScript is ontworpen) eerst opnieuw worden geoptimaliseerd (getransformeerd) naar een H1-filter (hoofdfilter) structuur voor gebruik. Het optiemenu is te vinden onder de P-Z tab in de hoofd UI.

Alle ontwerpen van floating point IIR-filters moeten gebaseerd zijn op Single Precision en ofwel een Direct Form I of Direct Form II getransponeerde filterstructuur zijn. Voor floating point implementatie wordt de Direct Form II getransponeerde structuur geadviseerd vanwege de hogere numerieke nauwkeurigheid.

Kwantisatie en filter structuur settings staan weergegeven onder de Q tab (zie afbeelding links). Door Arithmetic naar Single Precision en Structure naar Direct Form II Transposed te zetten en door vervolgens op de Apply button te klikken, wordt het hier beschouwde IIR geconfigureerd voor het CMSIS-DSP software framework.

Arm CMSIS-DSP application C code

Selecteer het Arm CMSIS-DSP framework in het selectie venster in het filter summary scherm:

De automatisch gegenereerde C code gebaseerd op het CMSIS-DSP framework voor directe implementatie op een Arm based Cortex-M processor staat hieronder weergegeven:

Zoals weergegeven, genereert de automatische codegenerator alle initialisatiecode, schaling en datastructuren die nodig zijn om het IIR te implementeren via de CMSIS-DSP bibliotheek. Deze code kan direct worden gebruikt in elk Cortex-M gebaseerd ontwikkelingsproject – een compleet Keil MDK voorbeeld is beschikbaar op de website van Arm/Keil. Merk op dat de code generator van de tool standaard code produceert voor de Cortex-M4 core, zie onderstaande tabel voor de #definitie die nodig is voor alle ondersteunde cores.

ARM_MATH_CM0Cortex-M0 core.ARM_MATH_CM4Cortex-M4 core.
ARM_MATH_CM0PLUSCortex-M0+ core.ARM_MATH_CM7Cortex-M7 core.
ARM_MATH_CM3Cortex-M3 core.  
ARM_MATH_ARMV8MBLARMv8M Baseline target (Cortex-M23 core).
ARM_MATH_ARMV8MMLARMv8M Mainline target (Cortex-M33 core).

De belangrijkste testluscode (niet afgebeeld) draait om dearm_biquad_cascade_df2T_f32()functie, die de filtering uitvoert op een blok invoergegevens.

Wat hebben we geleerd?

De ASN Filter Designer biedt ingenieurs alles wat ze nodig hebben om legacy analoge filterontwerpen over te zetten naar diverse Cortex-M-processor cores.

De FilterScript symbolische wiskunde scripttaal biedt ontwerpers de mogelijkheid om een bestaande analoge filtertransfer functie te transformeren naar digitaal (via de Bilinear z-transform of gematchte z-transformatie) met slechts een paar regels code.

De automatische codegenerator voor Arm analyseert het ontworpen digitale filter en genereert vervolgens automatisch de C-code voor Arm CMSIS-DSP. Deze is geschikt voor directe implementatie op een microcontroller op basis van Cortex-M.

Extra middelen

  1. Stap voor stap video tutorial voor het ontwerpen van een IIR en implementatie naar Keil MDK uVision.
  2. Implementatie van Biquad IIR filters met de ASN Filter Designer en het Arm CMSIS-DSP software framework (ASN-AN025)
  3. Voorbeeld van een Keil MDK uVision IIR filter project
  4. Stap voor stap instructie video van de tutorial Arm Webinar (registratie nodig)
0
0

Het moving average filter (voortschrijdend gemiddelde filter) is een van de meest gebruikte FIR filters vanwaar zijn conceptuele eenvoud en omdat deze gemakkelijk te implementeren is. Het onderstaande diagram laat zien dat er geen vermenigvuldigingen nodig zijn, alleen toevoegingen en een vertragingslijn. Hierdoor is het zeer geschikt voor extreem laag vermogen embedded devices met capaciteit voor basisberekeningen.

fir direct form

Ondanks zijn eenvoud is het moving average filter echter optimaal voor het reduceren van willekeurige ruis met behoud van een scherpe stapreactie. Hierdoor is het een veelzijdige bouwsteen is voor signaalverwerking voor slimme sensor toepassingen.

Een moving average filter met lengte \(L\) voor input signaal \(x(n)\) kan als volgt worden gedefinieerd:

\(y(n)=\large{\frac{1}{L}}\normalsize{\sum\limits_{k=0}^{L-1}x(n-k)}\) for \(\normalsize{n=0,1,2,3….}\)

Hierbij stelt een eenvoudige vuistregel dat de mate van ruisreductie gelijk is aan de vierkantswortel van het aantal punten in het gemiddelde. Een voortschrijdend gemiddelde van lengte 9 zal bijvoorbeeld resulteren in een factor 3 ruisreductie.

Het moving average filter (voortschrijdend gemiddelde filter)

Frequentierespons van een Moving Average-filter van lengte 9. Let op de slechte demping van de stopband bij ongeveer -20dB.

Voordelen

  • Meest gebruikte digitale laagdoorlaatfilter
  • Optimaal voor het verminderen van willekeurige ruis met behoud van een scherpe stapreactie
  • Goede smoother (tijdsdomein)
  • Eenheidsgewaardeerde filtercoëfficiënten, geen MAC-bewerkingen (vermenigvuldigen en accumuleren) nodig
  • Conceptueel simpel te implementeren

Nadelen

  • Inflexibele frequentierespons: het aanzetten van een geconjugeerd nulpaar resulteert in niet-communautaire coëfficiënten
  • Slecht laagdoorlaatfilter (frequentiedomein): langzame roll-off en slechte stopband-dempingseigenschappen

Implementatie

Het moving average filter kan in ASN FilterScript als volgt worden geimplementeerd:

ClearH1;  // clear primary filter from cascade
Main();
Hd=movaver(8,"symbolic");  // design an 8th order MA
Num = getnum(Hd);   // define numerator coefficients
Den = {1};          // define denominator coefficients
Gain = getgain(Hd); // define gain

Een meer computationeel efficiënte implementatie van het MA-filter wordt hier besproken.

Verder lezen

  • Understanding Digital Signal Processing, Chapter 5, R. G. Lyons
  • The Scientist and Engineer’s Guide to Digital Signal Processing, Chapter 15, Steven W. Smith
ASN Filter Designer box

Download demo now

Licencing information

0