GNU Octave - THD
GNU Octave - THD
MathWorks MATLAB har en väldigt trevlig funktion thd som plottar spektrum och beräknar THD.
https://se.mathworks.com/help/signal/ref/thd.html
Dock skulle jag vilja köra något liknande i GNU Octave men hittar inget. Känner ni andra till någon färdig funktion eller paket som kan beräkna THD?
https://se.mathworks.com/help/signal/ref/thd.html
Dock skulle jag vilja köra något liknande i GNU Octave men hittar inget. Känner ni andra till någon färdig funktion eller paket som kan beräkna THD?
Re: GNU Octave - THD
Nej tyvärr. Den funktionen verkar ju lite "magisk" iom att den tar inputs på flera vis osv. Antagligen skall du lösa en specifik uppgift, så det är kanske inte så komplicerat att skriva en funktion för just det fallet själv?
Re: GNU Octave - THD
Du kan ju använda funktionen fft.
Sedan är det ju inte så svårt att göra en egen funktion för att beräkna THD
Sedan är det ju inte så svårt att göra en egen funktion för att beräkna THD
Re: GNU Octave - THD
Nja, jag misstänker att det finns en del att tänka på. MATLAB-dokumentationen nämner modified periodogram och Kaiser window. Min gissning är att det används för att få tonen och harmonierna att skala likt. (Nu har var det väldigt många år sedan jag studerade FFT men helt rätt fram vill jag minnas att det inte är för icke ideala signaler.)
Just nu har jag ingen specifik uppgift utan är mest nyfiken över vilka möjligheter som finns i GNU Octave.
Just nu har jag ingen specifik uppgift utan är mest nyfiken över vilka möjligheter som finns i GNU Octave.
Re: GNU Octave - THD
Alltid svårt med generella lösningar, och det är inte säkert att thd() funkar "perfekt" i alla fall heller.
Har du tex en ordentligt lång sekvens kan du ju bara ta ett hög resp lågpassfilter för att dela upp i grundton och övertoner, och sedan beräkna dessa energier separat. Är signalen lång kanske du kan klippa så att du får ett helt antal perioder och slipper hålla på med fönstring om det inte känns bra. Då kan du också köra FFT utan fönster. Lite slappt ingenjörsmässigt så där... En annan fråga är ju hur många värdesiffror du behöver i svaret. Det kan ju ge en ledtråd till hur noggrann metoden behöver vara.
Har du tex en ordentligt lång sekvens kan du ju bara ta ett hög resp lågpassfilter för att dela upp i grundton och övertoner, och sedan beräkna dessa energier separat. Är signalen lång kanske du kan klippa så att du får ett helt antal perioder och slipper hålla på med fönstring om det inte känns bra. Då kan du också köra FFT utan fönster. Lite slappt ingenjörsmässigt så där... En annan fråga är ju hur många värdesiffror du behöver i svaret. Det kan ju ge en ledtråd till hur noggrann metoden behöver vara.
Re: GNU Octave - THD
"Modified periodogram" är väl bara data efter fönstring med Kaiser-fönstret?
Kaiser fönster finns i Octave.
Om datainsamlingen sker under ett helt antal perioder får man inga diskontiniteter och därmed behöver man inte använda någon fönsterfunktion för att minska läckaget.
Kaiser fönster finns i Octave.
Om datainsamlingen sker under ett helt antal perioder får man inga diskontiniteter och därmed behöver man inte använda någon fönsterfunktion för att minska läckaget.
Re: GNU Octave - THD
Exempel eftersom octave-kod kan vara lite udda
Kod: Markera allt
% testsignal
ra=1:10000;
a= exp(3+sin(0.01*2*pi*ra));
plot (ra,a);
% fouriertransformera
s = fft(a);
plot(abs(s));
pause(1)
% plocka ut deltonerna
maxtab = (1:5)*0;
for k = (1:5)
ra2= ( (100*k-10): (100*k+10)) ;
ss = s(ra2);
plot(ra2 , abs(ss') ); % Obs fnuttarna för transponering av matris eller vektor
maxtab(k)=max(abs(ss));
pause(1)
endfor
% summera för de första övertonerna
thd= sum( (maxtab(2:5) .^ 2)) / maxtab(1) .^ 2 % Obs punkterna vid skalärberäkning
Re: GNU Octave - THD
Tack. Det blir säkert bra inspiration. Om jag får ork någon dag borde jag spela in någon riktig audiodata och se om man kan knåpa ihop ett skript som fungerar mer generellt. Sedan hade det väl egentligen också varit okej om man matar manuellt in frekvens för grundtonen efter som vi kan använda en viss tolerans.
Däremot får jag läsa på mer om fönsterfunktioner för att bli mer självsäker med FFT.
Däremot får jag läsa på mer om fönsterfunktioner för att bli mer självsäker med FFT.
Re: GNU Octave - THD
Ja, antingen fönsterfunktioner eller en bättre sammanvägning än bara max() ovan.
Tror att det räcker med en rms- sammanvägning av kanalerna kring topparna i spektrum,
men jag får nog också läsa på lite för att vara riktigt trovärdig.
Det klarnar nog om man leker, funderar och läser på. Mycket finns på Wikipedia
Kanske är det någon här som har svaret.
Tror att det räcker med en rms- sammanvägning av kanalerna kring topparna i spektrum,
men jag får nog också läsa på lite för att vara riktigt trovärdig.
Det klarnar nog om man leker, funderar och läser på. Mycket finns på Wikipedia
Kanske är det någon här som har svaret.