Svante skrev:Edit: kan du förklara vad raderna i ditt matlabprogram gör, så kanske även en matlabiot som jag kan förstå det?
Oki! Tar med fler delar av programmet och gör koden röd.
f=1:500;
Denna skapar en vektor från värdet 1 till 500 med steget 1 och läggs i variabeln f. Dett är de diskreta frekvenser som ska användas vid uträkningen.
w=2.*pi.*f;
Skapar motsvarande vektor men med vinkelfrekvensen istället.
Vas=30;
Vbmin=44; %lådvolym
Fs=40;
Fb=27; %avstämningsfrekvens
Qes=0.68;
Qms=1.94;
Re=5.9;
Ql=10;
Rg=0.5;
Lägger in de variabler som ska användas.
Qes2=Qes/Re*(Re+Rg);
Räknar om Qes med hänsyn till generatorimpedansen (främst då resistansen hos en spole i delningsfiltret).
derF=diff(f);
diff tar skillnaden mellan värdena i vektorn f och skapar en ny vektor (derF) som innehåller ett element mindre.
[al,am,ap]=bssrflx3(f,Vas,Vb,Fs,Fb,Qms,Qes2,Ql);
Anropar funktionen bssrflx3 med indata i parantesen och utdata inom hakparantesen. Behöver inte gå in på alla detaljer men för varje värde på f så får man ett värde al som motsvarar ljudtrycket vid den frekvensen. al är en vektor med komplexa element.
angA=180/pi*unwrap(angle(al));
angle räknar ut vinkeln på varje element i al uttryckt i radianer. unwrap gör så att man kan få med fasvridningar större än +/-pi (d v s det gör om det till en kontinuerlig kurva). 180/pi omvandlar det hele till grader och allt läggs i angA.
derA=diff(angA);
Tar skillnaden mellan elementen i angA och lägger dem i derA p s s som för f en bit upp.
gdelayA=-derA./(w.*derF);
Är tänkt att räkna ut grupplöptiden men det blir inte rätt. Tar alltså skillnaderna i vinkel och delar dem med vinkelhastigheten och skillnaderna i frekvens.
Det är här det blir fel. Är säkert något helt trivialt som jag inte ser bara...