Beginnen Sie mit einem ansonsten allgemeinen parametrisierten Polynom ungerader Symmetrie 5. Ordnung:
f(x)=a0x1+a1x3+a2x5=x(a0+a1x2+a2x4)=x(a0+x2(a1+a2x2))
Jetzt legen wir einige Einschränkungen für diese Funktion fest. Die Amplitude sollte an den Spitzen 1 sein, mit anderen Worten . Setzt für gibt:f(1)=11x
a0+a1+a2=1(1)
Das ist eine Einschränkung. Die Steigung an den Spitzen sollte Null sein, mit anderen Worten . Die Ableitung von istf′(1)=0f(x)
a0+3a1x2+5a2x4
und das Ersetzen von ergibt unsere zweite Einschränkung:1x
a0+3a1+5a2=0(2)
Jetzt können wir unsere beiden Bedingungen verwenden, um nach und zu lösena1a2a0
a1=52−2a0a2=a0−32(3)
a0a0≈π2
Parameteroptimierung
Nachfolgend sind einige Optimierungen der Koeffizienten aufgeführt, die zu diesen relativen Amplituden der Harmonischen im Vergleich zur Grundfrequenz (1. Harmonische) führen:
In der komplexen Fourier-Reihe :
∑k=−∞∞ckei2πPkx,
P-P=4x=1f(x)−1≤x≤1,kth
ck=1P∫−1+P−1({f(x)−f(x−2)if x<1if x≥1)e−i2πPkxdx.
2cos(x)=eix+e−ixk>02|ck|,
2|ck|=24∣∣∣∫3−1({f(x)−f(x−2)if x<1if x≥1)e−i2π4kxdx∣∣∣=12∣∣∣∫1−1f(x)e−iπ2kxdx−∫31f(x−2)e−iπ2kxdx∣∣∣=12∣∣∣∫1−1f(x)e−iπ2kxdx−∫1−1f(x+2−2)e−iπ2k(x+2)dx∣∣∣=12∣∣∣∫1−1f(x)e−iπ2kxdx−∫1−1f(x)e−iπ2k(x+2)dx∣∣∣=12∣∣∣∫1−1f(x)(e−iπ2kx−e−iπ2k(x+2))dx∣∣∣=12∣∣∣eiπ2x∫1−1f(x)(e−iπ2kx−e−iπ2k(x+2))dx∣∣∣=12∣∣∣∫1−1f(x)(e−iπ2k(x−1)−e−iπ2k(x+1))dx∣∣∣
|eix|=1x.kkf(x)
=∣∣∣48((−1)k−1)(16a0(π2k2−10)−5×(5π2k2−48))π6k6∣∣∣
5. Ordnung, stetige Ableitung
a02|ck|
a0=3×(132375π2−130832)16×(15885π2−16354)≈1.569778813,a1=52−2a0=79425π2−654168×(−15885π2+16354)≈−0.6395576276,a2=a0−32=15885π216×(15885π2−16354)≈0.06977881382.
1367961615885π6−16354π4≈1.00007142018906−78.99 dBkth(1−(−1)k)∣∣8177k2−79425∣∣142496k6.
7. Ordnung, stetige Ableitung
Ebenso ist die optimale Polynomnäherung 7. Ordnung mit den gleichen Anfangsbedingungen und der 3., 5. und 7. Harmonischen auf dem niedrigstmöglichen gleichen Pegel:
f(x)=a0x1+a1x3+a2x5+a3x7=x(a0+a1x2+a2x4+a3x7)=x(a0+x2(a1+x2(a2+a3x2)))
a0=2a2+4a3+32≈1.570781972,a1=−4a2+6a3+12≈−0.6458482979,a2=347960025π4−405395408π216×(281681925π4−405395408π2+108019280)≈0.07935067784,a3=−16569525π416×(281681925π4−405395408π2+108019280)≈−0.004284352588.
2293523251200281681925π8−405395408π6+108019280π4≈0.9999983752,11555395≈−123.8368 dBkth(1−(−1)k)∣∣1350241k4−50674426k2+347960025∣∣597271680k8
5. Ordnung
{3,5,7,9}
f(x)=a0x1+a1x3+a2x5a0=1−a1−a2≈1.570034357a1=3×(2436304π2−2172825π4)8×(1303695π4−1827228π2+537160)≈−0.6425216143a2=1303695π416×(1303695π4−1827228π2+537160)≈0.07248725712
10804305921303695π6−1827228π4+537160π2≈0.9997773320.7263777≈−91.52 dB,72608331033100273≈−92.6 dBkth(1−(−1)k)∣∣67145k4−2740842k2+19555425∣∣33763456k6.
x=±1x≈±1.002039940.x=10.004905799828k,
7. Ordnung
Eine Näherung 7. Ordnung ohne kontinuierliche Ableitung kann auf ähnliche Weise gefunden werden. Der Ansatz erfordert das Testen von 120 verschiedenen Lösungen und wurde am Ende dieser Antwort vom Python-Skript automatisiert. Die beste Lösung ist:
f(x)=a0x1+a1x3+a2x5+a3x7a0=1−a1−a2−a3≈1.5707953785726114835a1=−5×(4374085272375π6−6856418226992π4+2139059216768π2)16×(2124555703725π6−3428209113496π4+1336912010480π2−155807094720)≈−0.64590724797262922190a2=2624451163425π6−3428209113496π416×(2124555703725π6−3428209113496π4+1336912010480π2−155807094720)≈0.079473610232926783079a3=−124973864925π616×(2124555703725π6−3428209113496π4+1336912010480π2−155807094720)≈−0.0043617408329090447344
169918012823961602124555703725π8−3428209113496π6+1336912010480π4−155807094720π2≈1.0000024810802368487.502400688077≈−133.627 dB.kth(1−(−1)k)∣∣−162299057k6+16711400131k4−428526139187∗k2+2624451163425∣∣4424948250624k8.
Python-Quelle
from sympy import symbols, pi, solve, factor, binomial
numEq = 3 # Number of equations
numHarmonics = 6 # Number of harmonics to evaluate
a1, a2, a3, k = symbols("a1, a2, a3, k")
coefficients = [a1, a2, a3]
harmonicRelativeAmplitude = (2*pi**4*a1*k**4*(pi**2*k**2-12)+4*pi**2*a2*k**2*(pi**4*k**4-60*pi**2*k**2+480)+6*a3*(pi**6*k**6-140*pi**4*k**4+6720*pi**2*k**2-53760)+pi**6*k**6)*(1-(-1)**k)/(2*k**8*(2*pi**4*a1*(pi**2-12)+4*pi**2*a2*(pi**4-60*pi**2+480)+6*a3*(pi**6-140*pi**4+6720*pi**2-53760)+pi**6))
harmonicRelativeAmplitudes = []
for i in range(0, numHarmonics) :
harmonicRelativeAmplitudes.append(harmonicRelativeAmplitude.subs(k, 3 + 2*i))
numCandidateEqs = 2**numHarmonics
numSignCombinations = 2**numEq
useHarmonics = range(numEq + 1)
bestSolution = []
bestRelativeAmplitude = 1
bestUnevaluatedRelativeAmplitude = 1
numSolutions = binomial(numHarmonics, numEq + 1)*2**numEq
solutionIndex = 0
for i in range(0, numCandidateEqs) :
temp = i
candidateNumHarmonics = 0
j = 0
while (temp) :
if (temp & 1) :
if candidateNumHarmonics < numEq + 1 :
useHarmonics[candidateNumHarmonics] = j
candidateNumHarmonics += 1
temp >>= 1
j += 1
if (candidateNumHarmonics == numEq + 1) :
for j in range(0, numSignCombinations) :
eqs = []
temp = j
for n in range(0, numEq) :
if temp & 1 :
eqs.append(harmonicRelativeAmplitudes[useHarmonics[0]] - harmonicRelativeAmplitudes[useHarmonics[1+n]])
else :
eqs.append(harmonicRelativeAmplitudes[useHarmonics[0]] + harmonicRelativeAmplitudes[useHarmonics[1+n]])
temp >>= 1
solution = solve(eqs, coefficients, manual=True)
solutionIndex += 1
print "Candidate solution %d of %d" % (solutionIndex, numSolutions)
print solution
solutionRelativeAmplitude = harmonicRelativeAmplitude
for n in range(0, numEq) :
solutionRelativeAmplitude = solutionRelativeAmplitude.subs(coefficients[n], solution[0][n])
solutionRelativeAmplitude = factor(solutionRelativeAmplitude)
print solutionRelativeAmplitude
solutionWorstRelativeAmplitude = 0
for n in range(0, numHarmonics) :
solutionEvaluatedRelativeAmplitude = abs(factor(solutionRelativeAmplitude.subs(k, 3 + 2*n)))
if (solutionEvaluatedRelativeAmplitude > solutionWorstRelativeAmplitude) :
solutionWorstRelativeAmplitude = solutionEvaluatedRelativeAmplitude
print solutionWorstRelativeAmplitude
if (solutionWorstRelativeAmplitude < bestRelativeAmplitude) :
bestRelativeAmplitude = solutionWorstRelativeAmplitude
bestUnevaluatedRelativeAmplitude = solutionRelativeAmplitude
bestSolution = solution
print "That is a new best solution!"
print
print "Best Solution is:"
print bestSolution
print bestUnevaluatedRelativeAmplitude
print bestRelativeAmplitude