Comece com um polinômio parametrizado de 5ª ordem de simetria ímpar geral :
f(x)=a0x1+a1x3+a2x5=x(a0+a1x2+a2x4)=x(a0+x2(a1+a2x2))
Agora, colocamos algumas restrições nessa função. A amplitude deve ser 1 nos picos, ou seja, f(1)=1 . Substituindo 1 por x obtém-se:
a0+a1+a2=1(1)
Essa é uma restrição. A inclinação nos picos deve ser zero, ou seja, f′(1)=0 . A derivada de f(x) é
a0+3a1x2+5a2x4
e substituir 1 por x fornece nossa segunda restrição:
a0+3a1+5a2=0(2)
Agora podemos usar nossas duas restrições para resolver para a1 e a2 em termos de a0 .
a1=52−2a0a2=a0−32(3)
Tudo o que resta é ajustar a0 para obter um bom ajuste. Aliás, a0 (e a inclinação na origem) acaba sendo ≈π2 , como podemos ver a partir de umgráficoda função.
Otimização de parâmetros
Abaixo estão algumas otimizações dos coeficientes, que resultam nessas amplitudes relativas dos harmônicos em comparação com a frequência fundamental (1º harmônico):
Na complexa série de Fourier :
∑k=−∞∞ckei2πPkx,
de um verdadeiro P- forma de onda periódica com P=4 e tempo de simetria sobre x=1 e com metade de um período definido pelo ângulo diferente função f(x) sobre −1≤x≤1, o coeficiente de a kth exponencial complexa harmónica é:
ck=1P∫−1+P−1({f(x)−f(x−2)if x<1if x≥1)e−i2πPkxdx.
Devido à relação 2cos(x)=eix+e−ix (veja a fórmula de Euler ), a amplitude de um harmônico sinusoidal real com k>0 é 2|ck|, que é o dobro da magnitude do exponencial complexo da mesma frequência. Isso pode ser massageado de uma forma que facilita para alguns softwares de matemática simbólica simplificar a integral:
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∣∣∣
O exposto acima tira proveito disso |eix|=1 para x. real . É mais fácil para alguns sistemas de álgebra computacional simplificar a integral assumindo que k é real e simplificar para o número k no final. O Wolfram Alpha pode integrar termos individuais da integral final correspondente aos termos do polinômio f(x) . Para os coeficientes dados na Eq. 3 temos amplitude:
=∣∣∣48((−1)k−1)(16a0(π2k2−10)−5×(5π2k2−48))π6k6∣∣∣
5ª ordem, derivada contínua
Nós podemos resolver para o valor de a0 que dá igual amplitude 2|ck|do 3º e 5º harmônico. Haverá duas soluções correspondentes ao 3º e 5º harmônicos com fases iguais ou opostas. A melhor solução é a que minimiza a amplitude máxima dos 3º e acima dos harmônicos e, equivalentemente, a amplitude relativa máxima dos 3º e acima dos harmônicos em comparação com a frequência fundamental (1º harmônico):
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.
Isso fornece a frequência fundamental na amplitude 1367961615885π6−16354π4≈1.000071420e o 3º e o 5º harmônicos em amplitude relativa18906 ou cerca de−78.99 dBcomparação com a frequência fundamental. Umkthharmônico tem amplitude relativa(1−(−1)k)∣∣8177k2−79425∣∣142496k6.
7ª ordem, derivada contínua
Da mesma forma, a aproximação polinomial ideal de 7ª ordem com as mesmas restrições iniciais e o 3º, 5º e 7º harmônico no menor nível igual possível é:
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 dBcomparação com o fundamental. Umkthharmônico tem amplitude relativa(1−(−1)k)∣∣1350241k4−50674426k2+347960025∣∣597271680k8 comparação com o fundamental.
5ª ordem
Se o requisito de uma derivada contínua for descartado, a aproximação de 5ª ordem será mais difícil de resolver simbolicamente, porque a amplitude do 9º harmônico aumentará acima da amplitude do 3º, 5º e 7º harmônico, se esses forem restritos a serem igual e minimizado. Testando 16 soluções diferentes correspondentes a diferentes subconjuntos de três harmônicos de {3,5,7,9} com amplitude igual e fases iguais ou opostas, a melhor solução é:
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ª ordem
Uma aproximação de 7ª ordem sem derivada contínua pode ser encontrada da mesma forma. A abordagem requer o teste de 120 soluções diferentes e foi automatizada pelo script Python no final desta resposta. A melhor solução é:
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.
Fonte Python
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