Natural sampling van Matlab naar Excel

Tot nu toe heb ik recht-toe-rechtaan sampling gedaan in Excel met de formule SIN(2*PI()*B1/100) om 100 samples te nemen van een sinus ( 1000 Hz ) en hieruit tabellen te maken om een 16 bits DAC aan te sturen.
Dit werkt goed maar er is nogal wat 2e harmonische te zien.
Met Natural sampling zou dat te verhelpen zijn.
Nu vond ik de website
https://www.divilabs.com/2014/03/matlab-implementation-of-natural.html
maar ik ben niet in staat om dit om te zetten naar Excel. Wie kan me helpen.
de Excel file is toegevoegd

Guus@Sint-Michielsgestel

Als je daarmee dezelfde DAC aanstuurt helpt dat niet. Dat kun je niet verbeteren. Die natural sampling is gewoon een 1-bit DA zoals Philips in de CD-audioperiode ook heeft gemaakt. Je genereert de sinus met een tijd in plaats van een spanning.

Waarbij ik even aanneem dat je DAC traag is, dat het daarom niet kan. Als hij snel is kun je het wel verbeteren dmv oversampling.

Ik heb even een LTspice plot toegevoegd, hierin kun je zien wat er in de sa mpling " fout " gaat. Tijdens het toenemen van de sinus is de feitelijke "energie te laag, tijdens het afnemen te hoog.

Ik gebruik de TDA1543 van Philips, dit is een 16 bitter met 100 x oversampling

Guus@Sint-Michielsgestel
Frederick E. Terman

Honourable Member

Op 23 maart 2021 20:00:02 schreef Waters:
TDit werkt goed maar er is nogal wat 2e harmonische te zien.

Het gekke is dat er in géén van je kolommen een tweede harmonische optreedt (nou ja, minder dan 10−10 in elk geval), tót je in de laatste 'DEC' kolom 1 gaat optellen, maar niet bij alle waarden. Waarom is dat?
Als je nergens 1 optelt, krijg je geen tweede harmonische. En als je 't overal wél doet trouwens ook niet.

'Natural sampling' is gewoon de sinus al of niet doorlaten. Dat is wat je al doet.

Ik heb geen LTSpice. Kun je die plot op een andere manier laten zien? Screenshot in png?

Keramisch, kalibratie, parasitair: woordenlijst.org
Guus@Sint-Michielsgestel

Ik probeer de error van het originele naar de 16 bit omzetting zo laag mogelijk te maken, vandaar dat ik wat "vogel" met de waarden. Misschien is dat fout.
Hoe kom je aan een afwijking van 10−10 ?

Guus@Sint-Michielsgestel

Tijdens het toenemen van de sinus is de feitelijke "energie te laag, tijdens het afnemen te hoog.

Het is maar net hoe je het bekijkt. Als je de doorgetrokken lijn in de snip een half sampletje naar rechts verschuift, dan is de 'fout' weg. De hardware ziet alleen de 'trapjes', en weet dus niet waar de oorspronkelijke lijn moet liggen.

Daarmee is de curve in feite een halve bittijd naar rechts verschoven. Een klein delay dus wat verder niet uit zal maken.

Wel is hij waar de curve vlakker is dan nauwkeuriger als je hem qua timing wil vergelijken met je sinus. De delay is hetzelfde maar je ziet het niet zo goed.

[Bericht gewijzigd door Hoeben op dinsdag 23 maart 2021 23:11:59 (40%)

Frederick E. Terman

Honourable Member

Op 23 maart 2021 21:27:15 schreef Waters:
Ik probeer de error van het originele naar de 16 bit omzetting zo laag mogelijk te maken, vandaar dat ik wat "vogel" met de waarden. Misschien is dat fout.
Hoe kom je aan een afwijking van 10−10 ?

Ik heb van de originele samples, de afgeronde samples en ten slotte van de 'adjusted' :) samples het aandeel 2e harmonische bepaald. Gewoon 'Fourier met de hand'; steeds elke sample vermenigvuldigd met de bijbehorende sinus resp. cosinus van de gevraagde harmonische voor de betreffende sample, en dat getotaliseerd. Eigenlijk moeten de totalen nog door 50 gedeeld worden, maar dat maakt voor het vervormingspercentage niets uit.

(klik=groter)

De fundamental levert zo een totaal op van ruim 220000, en de tweede harmonische (zowel I als Q-component) totalen van in de orde van grootte van 10−10 (wat je dan dus nog door 223000 moet delen om daarmee het percentage vervorming te vinden).
Alleen in jouw 'adjusted samples' kolom, waarin je soms wel en soms niet 1 optelt of aftrekt, komen de totalen op maar liefst 2 resp. 4. T.o.v. de fundamental nog steeds niet zoveel: 0,002 %, maar merkbaar.

Het beste is dus gewoon NIET aan de afgeronde samples te rommelen.
Het afronden op zich veroorzaakt trouwens géén even harmonischen, al doe je het nog zo grof (4 bits bijv.). Ook andere vormen van afronden, zoals 'bankers' rounding', kunnen geen even harmonischen veroorzaken.

--
e: Ik weet dat je de samples halverwege de sinus 'omhoog gegooid' hebt, zodat de samples positief blijven. Je telt dus als het ware een negatieve, opgetilde blokgolf op bij de sinus.
Ik heb hierboven daarvoor niet gecorrigeerd. Voor de even harmonischen maakt het niets uit, omdat de blok geen even harmonischen bevat. En voor de orde van grootte van de fundamental maakt het niet zoveel uit. Wel is de blok dus in tegenfase met je sinus, en groter, zodat de Fourier-uitkomst voor de fundamental een negatief getal oplevert.

Als ik wél corrigeer, dus de stap 'eruithaal', dan wordt het totaal voor de fundamental ca. 819200. De andere getallen blijven praktisch gelijk.

Keramisch, kalibratie, parasitair: woordenlijst.org

Beste Frederick, bedankt voor je toevoeging.
Het omhoog gooien is gedaan omdat voor deze DAC two's complement nodig is. Ik ben niet zo op de hoogte met het handmatig berekenen van de FFT zoals je dat doet. Zou je me het excel file willen sturen.
Bij voorbaat dank.

Ik ben nog steeds geinteresseerd in de omzetting naar natural sampling. Misschien dat je zoiets in excel kunt zetten ?

Guus@Sint-Michielsgestel
Frederick E. Terman

Honourable Member

Hierboven heb ik al verteld hoe je dat kunt doen: elke sample vermenigvuldigd met de bijbehorende sinus resp. cosinus van de gevraagde harmonische voor de betreffende sample, en dat getotaliseerd.
Het meeste heb je zelf al in je Excelsheet staan, maar om niet in de war te raken kun je misschien beter even een nieuwe maken.

  1. Neem je kolom met samplenummers (bijv. 0...49) en daarnaast een kolom met de bijbehorende samplewaarden;
  2. Zet daarnaast een kolom met de sinus van de gewenste (bijv. 2e) harmonische voor elk van die 50 nummers;
  3. Neem weer een kolom, en zet daarin steeds het product van een sample en de bijbehorende sinuswaarde;
  4. Totaliseer ten slotte die laatste kolom, en deel het totaal door het halve aantal samples (25). Dat geeft je de amplitude van het sinus-aandeel van de betreffende harmonische.

Nu moet je nog een keer exact hetzelfde doen, maar dan met cosinuswaarden van de harmonische. Zo 'vang' je de harmonische, wat ook zijn fase mag zijn.

Wiskundigen beginnen trouwens vaak met de cosinus (I) en dan pas de sinus (Q), maar dat maakt natuurlijk voor de berekening niets uit.
In het voorbeeld vind je bijvoorbeeld dat er wat tweede harmonische in het signaal zit, waarvan 4% cosinus en 3% sinus. Of met andere woorden (omdat de fundamental een sinus is): 5% tweede harmonische, 53 graden uit fase.

Excel heeft trouwens gewoon een meegeleverde Fourier-analysefunctie! Maar daarvoor moet het aantal samples een macht van twee zijn. Probeer hem in het voorbeeld maar eens uit.

--
Vragen naar 'Natural sampling' heeft geen zin; er is al eerder uitgelegd dat wat ze daar in Matlab doen, gewoon het vermenigvuldigen van de te onderzoeken functie met 0 of 1 is. Dat doe je al: meestal 0, en op de samplemomenten 1.

Keramisch, kalibratie, parasitair: woordenlijst.org