Het gebruik van filters op je nanoVNA meetingen kan je de mogelijkheid geven om bepaald spikes of stoorsignalen of onvolkomenheden van je meetprincipes uit het resultaat te halen.
Dit kan nuttig zijn indien je in een RF bevuilde omgeving of in de buurt van sterke zenders een meting moet doen, maar is in de meeste gevallen niet nodig.
Het gebruik van Scripts laat je nu toe om ook "filtering" los te laten op de gemeten waarde na het uitvoeren van de gemiddelde (averaging), waardoor je eventueel een signaal met ruis of spikes kan oppoetsen.
Dit kan noodzakelijk zijn voor metingen buiten, daar de RFI door externe factoren kan leiden tot niet reproduceerbare metingen maar heeft ook zijn beperkingen.
Een eenvoudig voorbeeld wordt gegeven in de "moving average filter", zie later.
Het ontwerpen van specifieke filters die spikes of envelop gemiddelden maken, wordt zo mogelijk maar hier niet uitgevoerd.
De D-blok met filter code en naam VNASupport die gebruikt gaat worden voor het maken van een moving average filter, voeg je toe aan je project.
De "hook" zoals die voorzien wordt in nanoVNA Connect laat zo toe om Anvil code te gebruiken om de filter berekeningen te doen.
Een voorbeeld van de "moving average" filter vind je hieronder, waarbij er n samples worden genomen waarop een gemiddelde wordt toegepast.
Met n=1 wordt deze filter uitgeschakeld.
//filter
dcl filter(which,array) {
Verbose("processing",which);
$rval = {};
for (int i=0;i<SizeOf(array);++i) {
if (i < n)
Add($rval,array[i]);
else {
$sum = 0;
for (int x=0;x<n;++x)
$sum += array[i-x];
$sum /= n;
Add($rval,$sum);
}
}
return $rval;
}
Opmerking: De filter zorgt voor een verschuiving van de filterwaardes, wat met heel veel samples geen echt probleem vormt.
Teven kan de filter zorgen voor het afvlakken van de sprong, die meestal plaats vindt bij een nanoVNA wanneer de scan verandert van de fundamente frequentie naar een harmonische.
Om het script te activeren dien je ernaar te verwijzen in de scripts setting van nanoVNA Connect.
De onderste lijn zorgt ervoor dat de code wordt aangeroepen telkens er een functie wordt aangeroepen.
dcl filter(name,array) {return VNASupport.filter(name,array);}
De andere functies worden gebruikt voor het aanroepen van de calibratie en het nemen van een meeting.
String networkPortName = 'nanoVNA.local:8888'; // network port name;
//logLvl; //uncomment to enable logging
//num = (to-from)/step + 1; // compute number of points
dcl go() {++runs; return false;}
dcl open() {return false;}
dcl short() {return false;}
dcl load() {return false;}
dcl through() {return false;}
dcl reverse() {return false;}
dcl reset() {return false;}
dcl filter(name,array) {return VNASupport.filter(name,array);}
Het verschil tussen een niet(geel) of wel gefilterde meeting(zwart) zie je als je inzoomt op de smith chart en is fenomenaal!
Het verschil wordt nog duidelijker zichtbaar als je verschillende meetingen neemt van hetzelfde component, waarbij de gefilterde meeting een reproduceerbaar resultaat geeft en de andere niet.