\$\color{red}{\text{I made a mistake and I need to redo parts of the answer!}}\$ Mis disculpas, sin embargo, el error no es tan grave, ya que no todas las respuestas son erróneas . Me molestaba saber por qué el retardo de grupo no es plano para un orden 13, o por qué la respuesta al impulso no tiene una caída menor (ya que Bessel no es una gaussiana). Me di cuenta de que el error ya se insinuó cuando dije que usé el postes sin clasificar para el Bessel, que causó que la función de transferencia (aunque no por mucho). Esto significa que tengo que rehacer la parte de la respuesta que trata de la comparación entre el método de Bessel y el de colocación de polos; todo lo demás está bien. Una vez más, lo siento por el error. Siéntase libre de downvote, si lo desea.
Similar, aunque no te saldrá sólo con eso, no hay solución de forma cerrada ya que se encuentran sólo en base a los polinomios de Bessel (es decir, root-finding). Los polos se colocan en una elipse, como Andy menciona, pero con un desplazamiento en el lado derecho. Aquí está para N=13 por ejemplo (mitad superior):
Aún así, como el polinomio generador es fijo, es decir, sólo se necesita escalar la frecuencia, entonces los polos también son fijos y se pueden generar a priori, para una tabla (como solución más fácil).
Para mayor claridad, aquí está el polinomio generador:
$$s^{13}+91*s^{12}+4095*s^{11}+120120*s^{10}+2552550*s^9+41351310*s^8+523783260*s^7+5237832600*s^6+41247931725*s^5+252070693875*s^4+1159525191825*s^3+3794809718700*s^2+7905853580625*s+7905853580625$$
- \$\color{red}{\text{This is the initial mistake.}}\$ La función de transferencia se basaba en los polos, pero la fase y el retardo de grupo en el polinomio anterior, porque tanto el atan() como el diff() explotaban numéricamente.
y aquí están los polos ( sin clasificar ):
re=[-8.947709674391792,-8.470591771477185,-6.90037282614666,-8.830252084144904,-5.530680983344037,-7.844380277062596,-3.449867220628723];
im=[0.0,-3.483868450660993,-7.070644312152949,-1.736666400307631,-8.972247775155788,-5.254903406611962,-11.0739285522162];
para comparar, los polos de un Chebyshev con 0,01dB de ondulación:
re=[0.035061327,0.10314634,0.16523687,0.21772443,0.25755864,0.28242447,0.29087682];
im=[1.0338525,0.97376873,0.85709308,0.6906063,0.48398399,0.24923429,0.0];
También, para comparar, los polos de Bessel con un círculo y los polos de Chebyshev, ambos escalados para una mejor comparación:
Nótese que la elipse en el caso de Chebyshev está alineada con el eje mayor a lo largo del eje Y, mientras que los polos de Bessel se alinean con el eje menor en el eje Y, aunque también tienen un desplazamiento.
Recuerdo un libro que afirmaba que los polos se encuentran en un círculo, desplazados hacia la derecha, y que comparten los mismos ángulos que el Butterworth, pero proyectados sobre este círculo. He utilizado ahora un N = 35 (impar para el extra, único polo real), con un círculo, con X proporcional y el eje Y, pero todavía a escala para una mejor comparación:
El círculo se escala (tanto en X como en Y) en 37, y se desplaza hacia la derecha en 37-max(realpart(s Bessel )). Como puedes ver, las curvas difieren. Una vez intenté lo que pides ahora, tratando de aproximar con un 90 o curva cosh() rotada -- cerca, pero no puro, como se suele decir. He aquí una comparación:
Simplemente dimití y, años después, esta pregunta se preguntó en dsp.se (advertencia: post largo). Me temo que, a veces, no existe el santo grial. En este caso, te quedas con la fórmula generadora del polinomio:
$$a_k=\frac{(2N-k)!}{2^{N-k}k!(N-k)!}$$
que puede volverse "esponjoso" para \$k\rightarrow 0\$ por lo que la recursiva puede llevarte un poco más lejos, pero con pequeños problemas de redondeo:
$$\frac{a_{k+1}}{a_k}=\frac{2(N-k)}{(2N-k)(k+1)}$$
A partir de ahí es el algoritmo de búsqueda de raíces de su elección. O, como dije, puedes hacer tablas, por ejemplo aquí están las raíces completas de hasta N=20, en doble precisión. Nota : estos son sin escala es decir, calculado para el retardo, no para la frecuencia:
[0.8660254037844386i-1.5,-0.8660254037844386i-1.5]
[1.754380959783721i-1.838907322686957,-1.754380959783721i-1.838907322686957,-2.322185354626086]
[2.657418041856753i-2.103789397179628,-2.657418041856753i-2.103789397179628,0.8672341289345046i-2.896210602820372,-0.8672341289345046i-2.896210602820372]
[1.742661416183209i-3.351956399153524,-1.742661416183209i-3.351956399153524,3.57102292033797i-2.324674303181644,-3.57102292033797i-2.324674303181644,-3.646738595329665]
[0.8675096732313591i-4.248359395863367,-0.8675096732313591i-4.248359395863367,2.626272311447123i-3.735708356325813,-2.626272311447123i-3.735708356325813,4.492672953653945i-2.51593224781082,-4.492672953653945i-2.51593224781082]
[-4.971786858527892,1.73928606113053i-4.758290528154647,-1.73928606113053i-4.758290528154647,3.51717404770974i-4.070139163638142,-3.51717404770974i-4.070139163638142,5.420694130716758i-2.685676878943265,-5.420694130716758i-2.685676878943265]
[0.8676144453532826i-5.587886043262939,-0.8676144453532826i-5.587886043262939,4.414442500471611i-4.368289217202395,-4.414442500471611i-4.368289217202395,6.353911298604868i-2.838983948897615,-6.353911298604868i-2.838983948897615,2.616175152642267i-5.20484079063705,-2.616175152642267i-5.20484079063705]
[-6.29701918171626,1.737848383480994i-6.129367904273693,-1.737848383480994i-6.129367904273693,5.317271675435797i-4.638439887180668,-5.317271675435797i-4.638439887180668,7.291463688342168i-2.979260798180018,-7.291463688342168i-2.979260798180018,3.498156917885823i-5.604421819507492,-3.498156917885823i-5.604421819507492]
[0.8676651954556653i-6.92204490542646,-0.8676651954556653i-6.92204490542646,4.384947188943571i-5.967528328589314,-4.384947188943571i-5.967528328589314,6.224985482471234i-4.886219566858243,-6.224985482471234i-4.886219566858243,2.611567920796636i-6.61529096547683,-2.611567920796636i-6.61529096547683,8.232699459073597i-3.108916233649153,-8.232699459073597i-3.108916233649153]
[-7.622339845841585,3.489014503562782i-7.057892387669757,-3.489014503562782i-7.057892387669757,5.276191743697423i-6.301337454878748,-5.276191743697423i-6.301337454878748,1.737102820741282i-7.484229860704635,-1.737102820741282i-7.484229860704635,9.17711156870874i-3.229722089920541,-9.17711156870874i-3.229722089920541,7.13702075889222i-5.115648283905527,-7.13702075889222i-5.115648283905527]
[2.609066536949217i-7.997270599615764,-2.609066536949217i-7.997270599615764,0.8676935719771167i-8.253422011415825,-0.8676935719771167i-8.253422011415825,6.171534992991226i-6.61100424994881,-6.171534992991226i-6.61100424994881,8.052906864267905i-5.329708590886263,-8.052906864267905i-5.329708590886263,4.370169593404245i-7.465571240332478,-4.370169593404245i-7.465571240332478,10.12429680724084i-3.343023307800861,-10.12429680724084i-3.343023307800861]
[-8.94770967441898,3.483868450551646i-8.470591771510001,-3.483868450551646i-8.470591771510001,7.070644312151718i-6.900372826158152,-7.070644312151718i-6.900372826158152,1.736666400425321i-8.830252084116237,-1.736666400425321i-8.830252084116237,8.97224777515357i-5.530680983342347,-8.97224777515357i-5.530680983342347,5.254903406650159i-7.844380277035037,-5.254903406650159i-7.844380277035037,11.07392855221658i-3.449867220628742,-11.07392855221658i-3.449867220628742]
[2.607553324780497i-9.363145851070561,-2.607553324780497i-9.363145851070561,0.8677110294763433i-9.583171394019896,-0.8677110294763433i-9.583171394019896,6.143041071762656i-8.198846970087834,-6.143041071762656i-8.198846970087834,7.973217354159308i-7.172395962130479,-7.973217354159308i-7.172395962130479,4.361604177587814i-8.911000555481152,-4.361604177587814i-8.911000555481152,12.02573803225484i-3.551086883381187,-12.02573803225484i-3.551086883381187,9.894707597484578i-5.72035238382889,-9.894707597484578i-5.72035238382889]
[-10.27310955148198,3.480671268214976i-9.859567223419484,-3.480671268214976i-9.859567223419484,7.034393625952233i-8.532459059160995,-7.034393625952233i-8.532459059160995,1.736388856012094i-10.17091406847279,-1.736388856012094i-10.17091406847279,8.878982621996924i-7.429396992165036,-8.878982621996924i-7.429396992165036,5.242258876713885i-9.323599304919446,-5.242258876713885i-9.323599304919446,12.97950107076231i-3.647356862491653,-12.97950107076231i-3.647356862491653,10.81999913763804i-5.900151713629612,-10.81999913763804i-5.900151713629612]
[2.606567011382309i-10.71898582131243,-2.606567011382309i-10.71898582131243,4.356163385056269i-10.32511960145284,-4.356163385056269i-10.32511960145284,6.125760887225088i-9.712326332501009,-6.125760887225088i-9.712326332501009,0.8677225109985072i-10.91188607722687,-0.8677225109985072i-10.91188607722687,9.787697438361704i-7.673240790885078,-9.787697438361704i-7.673240790885078,11.74787493845505i-6.07124138290424,-11.74787493845505i-6.07124138290424,13.93502847581496i-3.739231797160583,-13.93502847581496i-3.739231797160583,7.928772856867366i-8.84796819655695,-7.928772856867366i-8.84796819655695]
[-11.59852952544957,1.736201495207083i-11.50807674884866,-1.736201495207083i-11.50807674884866,5.23407489400232i-10.76413417397734,-5.23407489400232i-10.76413417397734,8.825998303451005i-9.147588677578124,-8.825998303451005i-9.147588677578124,7.012009979228726i-10.08029444442791,-7.012009979228726i-10.08029444442791,10.69914507525592i-7.9054495961617,-10.69914507525592i-7.9054495961617,12.67812022904479i-6.234580978311283,-12.67812022904479i-6.234580978311283,3.478543926896344i-11.23343683286985,-3.478543926896344i-11.23343683286985,14.89215892466672i-3.82717378510033,-14.89215892466672i-3.82717378510033]
[0.8677305796056393i-12.23990211013843,-0.8677305796056393i-12.23990211013843,4.352480023166813i-11.71894899465382,-4.352480023166813i-11.71894899465382,7.9008930883336i-10.43001303090171,-7.9008930883336i-10.43001303090171,6.114394005840858i-11.18003883474541,-6.114394005840858i-11.18003883474541,9.725900329506054i-9.433132214976286,-9.725900329506054i-9.433132214976286,2.605887611187429i-12.06813579593398,-2.605887611187429i-12.06813579593398,13.61054734922753i-6.390972783893709,-13.61054734922753i-6.390972783893709,15.85075359693817i-3.911572291156902,-15.85075359693817i-3.911572291156902,11.61313174828707i-8.127283943599762,-11.61313174828707i-8.127283943599762]
[-12.92396298726643,3.477057739745347i-12.59706211536081,-3.477057739745347i-12.59706211536081,6.997077172796814i-11.57560275196964,-6.997077172796814i-11.57560275196964,10.62832089711397i-9.70610250233404,-10.62832089711397i-9.70610250233404,1.73606799805627i-12.84282859307907,-1.73606799805627i-12.84282859307907,5.228447830672733i-12.17923016627348,-5.228447830672733i-12.17923016627348,12.52948385810331i-8.339800733603411,-12.52948385810331i-8.339800733603411,14.54499130235651i-6.541095058909744,-14.54499130235651i-6.541095058909744,16.81069206004072i-3.992758917950229,-16.81069206004072i-3.992758917950229,8.792293285710413i-10.76353766688636,-8.792293285710413i-10.76353766688636]
[0.8677350518003363i-13.56742501366895,-0.8677350518003363i-13.56742501366895,4.349859625596589i-13.09881927110951,-4.349859625596589i-13.09881927110951,7.882058991191003i-11.95308937929071,-7.882058991191003i-11.95308937929071,9.686092710205683i-11.08258050261995,-9.686092710205683i-11.08258050261995,2.605405205905522i-13.41259743649624,-2.605405205905522i-13.41259743649624,13.44804526520383i-8.543895716554248,-13.44804526520383i-8.543895716554248,11.53311485564302i-9.967762520706822,-11.53311485564302i-9.967762520706822,6.106481551595795i-12.61728471920278,-6.106481551595795i-12.61728471920278,17.77186906891292i-4.071018561839362,-17.77186906891292i-4.071018561839362,15.48130618749379i-6.685526878511447,-15.48130618749379i-6.685526878511447]
Dudo que necesites más, pero, si es así, puedo copiar y pegar. Las tablas son muy útiles cuando te sobra memoria, a diferencia de los ciclos. Todo lo que necesitas a partir de ahora es el escalado de frecuencias, ya que con ellas conseguirás bonitas etapas de 2º orden.
Actualización: El post de Andy me ha recordado que una vez que inventé una fórmula de escalado de frecuencias (a partir del entonces zunzun.com.
(ahora desaparecida, por desgracia), pero funciona decentemente. Por ejemplo, para el punto -3dB, un barrido de N=2 a 32 da una diferencia entre la primera y la última traza de ~0,31dB, y ~0,0125dB entre trazas adyacentes. No es perfecto, pero funciona:
$$\omega_{scale}(A_{sc})=8091309.68544832\exp\left[-0.5\left(0.09397449321551755(\ln{N}-8.03901973218457)^2+0.009140987415805315\left(\ln{A_{sc}}-54.61336204495193\right)^2\right)\right]+0.02602784079436049$$
donde A sc es la atenuación, en dB, a f c y N la orden. Como pequeño ejemplo, para el mismo orden 13 y 3dB, el escalado sería |H(j4.13082549938354)|, mientras que la fórmula dice |H(j4.1255648797584)|, lo que da -3,0025dB (0,7077408150981647). No se limita sólo a 3 dB: si quieres 1,57 dB, entonces \$\omega_{scale}\$ debería ser 2,99434327282329, mientras que la fórmula dice \$\omega_{scale}\$ =3,001850652953856, lo que da -1,577946667040319dB (0,8338782890589183). Yo digo que no está mal.
- \$\color{red}{\text{This part is redone.}}\$ Mantendré los errores y las fotos sólo como enlaces, para avergonzar.
Actualización : Acabo de probar lo que propones, es decir, comparar el Bessel con la colocación del polo en el círculo, como dice el documento de analog.com, y dondequiera que lea. Primero, como ya tengo N=13 arriba, hice el ejemplo para N=13. Segundo, escalé los polos de Bessel para que coincidieran con el eje X.
Dado que la parte imaginaria de los polos está separada por 2/n y colocada en un círculo (no desplazada), todo lo que hay que hacer es generar una lista basada en eso, y la parte real es simplemente \$\Re=\sqrt{1-\Im^2}\$ :
im=[0,0.1538461538461539,0.3076923076923077,0.4615384615384616,0.6153846153846154,0.7692307692307693,0.9230769230769231];
re=[1.0,0.9880948137434714,0.9514859136040755,0.8871201995900613,0.7882269819968921,0.6389710663783135,0.3846153846153845];
Y así es como se ven ambos polos comparados con el círculo unitario. A partir de aquí, Bessel es azul.
A continuación, haz las funciones de transferencia y compáralas. Apliqué escalado de frecuencia a ambas para que tengan -3dB@1Hz: Bessel= 3.277105084487313 , p.p.=0.3193551457708009. Curiosamente, el reverso de cada uno de ellos se aproxima al otro (menos en los órdenes inferiores). Observa que Bessel tiene un rolloff más pronunciado. Además, la magnitud según el polinomio largo anterior también se traza como la línea verde discontinua; como se solapa con la azul, ésta se mantiene como referencia a partir de ahora.
(Mal: https://i.stack.imgur.com/7PtRa.png )
y la diferencia entre ellas (muestra cero hacia el final debido a imprecisiones numéricas, dados los enormes números del polinomio de Bessel original -- ya no es el caso, la función de transferencia está formada por secciones de 2º orden, formadas por solucionado polos):
(Mal: https://i.stack.imgur.com/VEbgY.png )
Luego, las fases. No es sorprendente que las diferencias debido a la diferente rolloff:
(Mal: https://i.stack.imgur.com/EH5z1.png )
y la diferencia:
(Mal: https://i.stack.imgur.com/VQIA8.png )
Y lo más importante, el retraso del grupo Bessel se trunca por las mismas razones que antes). Obsérvese que el método p.p. tiene un retardo menor, debido a que el rolloff es más lento, pero también que no es tan plano como el de Bessel:
(Mal: https://i.stack.imgur.com/yWv7g.png )
y la diferencia (ambas normalizadas a 1, para facilitar la comparación):
(Mal: https://i.stack.imgur.com/lVjQI.png )
Actualización: La planitud del retardo de grupo puede comprobarse con la derivada:
Conclusión : la colocación de los polos no es una respuesta de Bessel, sino que viene muy razonablemente cerca, así que si no te importa el menor diferencias, esta es una forma muy conveniente y, quizás lo más importante, barata de generar los polos evitando los costosos algoritmos de búsqueda de raíces. Tenga en cuenta, sin embargo, que sólo he utilizado N = 13 para esto, así que, para un intento de completar, aquí es lo que las diferencias de N = 5 se parecen, en orden: magnitud, fase, retardo de grupo, actualización y la planitud del retardo de grupo:
(Mal: https://i.stack.imgur.com/YVA1j.png , https://i.stack.imgur.com/gNKCc.png , https://i.stack.imgur.com/gqegm.png )
Como añadido menor, aquí están las respuestas al impulso de los dos de 5º orden, con el mismo Bessel=azul (usando las versiones escaladas en frecuencia -3dB):
(Mal: https://i.stack.imgur.com/BG4MF.png )
[He añadido esta parte al final]
- \$\color{red}{\text{End of redone, part 1.}}\$
Bueno, has abierto una vieja herida, felicidades. He pensado en modificar los polos de Bessel (azul) proyectándolos sobre el círculo unitario a lo largo del eje X, para que pierdan la curva que normalmente tienen y convertirlos, forzosamente (rojo). Además, por comparación, los cuadrados negros son el método p.p.
- \$\color{red}{\text{Redone, part 2.}}\$
y las magnitudes del Bessel (azul) cerca del Bessel convertido ( rojo magenta discontinuo) y p.p. ( negro rojo) -- por alguna razón, el rolloff es más lento para p.p., debo tener algún error tipográfico en alguna parte, no lo encontraré hoy: .
(Mal: https://i.stack.imgur.com/vOmao.png )
Todo para N=13, y los resultados son coherentes para 5, 9, 25, y así sucesivamente al parecer. La conclusión sigue siendo: no Bessel, sino maldito cerrar. Elige tu opción.
Esta debería ser la última edición (antes de que traspase el horizonte de sucesos de la madriguera del conejo) para abordar la cuestión del desplazamiento del círculo subyacente. Me han surgido dudas, así que quería aclararlo. Por las imágenes anteriores, está claro que no es un círculo, no es ningún cosh(), sino otra cosa, pero los números son más claros que las imágenes, así que empecé una reductio ad absurdum: ¿y si es un círculo? Entonces habría que escalarlo y desplazarlo. Esta es la idea básica:
El círculo de radio OM (gris, discontinuo) es el círculo unidad, y el azul de radio MQ sería el círculo subyacente. En el punto C hay un polo cuyas coordenadas son conocidas. OM también es conocido, por lo que \$AM=1-\Re(C)\$ amd \$AC=\Im(C)\$ => el ángulo rojo (ignorar la lectura), \$\alpha=\arctan\frac{AM}{AC}\$ mientras que el ángulo verde, \$\beta=\frac{\pi}{2}-\alpha=\arctan\frac{AQ}{AC}\$ => \$MQ=AM+AC\tan\left(\frac{\pi}{2}-\arctan\frac{AM}{AC}\right)\$ siendo el desplazamiento una simple resta.
Pero, para N=13, el cálculo del radio del círculo subyacente debería ser el mismo para todos los polos, y sin embargo no lo es. Aquí están los valores de todos los radios para las partes imaginarias positivas de los polos que no están en el eje X o en el eje Y (5 polos, ver 1ª imagen):
- \$\color{red}{\text{Redone, part 3.}}\$ Como los polos estaban mezclados, los resultados vinieron mezclados, además, calculé el diámetro. No es gran cosa, ya que el resultado es el mismo: no hay círculo subyacente.
[2.882849152139202,2.896382080602158,2.920436970785266,2.957894588441385,3.014834976457822]
[1.448191040223894,1.460218485342188,1.478947294206138,1.507417488214167,1.553654588674449]
Y he aquí una representación gráfica de lo que serían los círculos subyacentes para cada uno de estos polos. Nótese que, no sólo no se superponen, sino que sólo uno de cada polo se encuentra en un círculo a la vez (por supuesto, el que se encuentra después de haber calculado el círculo):
Esto debería ser la prueba de que, por muy plano que sea el retardo de grupo de la aproximación de colocación de polos, es sólo una aproximación, no un Bessel en el verdadero sentido. IMHO, esto debería haber sido especificado tanto por analog.com como por cualquier otra fuente que lo mencione -- que es una aproximación , a muy bueno buena, pero no Bessel(-Thompson).
Y, como la herida es profunda, aquí hay más. Me parece que, cuanto mayor sea el orden, más el método p.p. converge hacia un filtro gaussiano, y, efectivamente, aquí está un gráfico de una función gaussiana de referencia, \$\exp\left(-\frac{\ln2}{2}x^2\right)\$ (negro), una función de transferencia aproximada "a la Bessel" (azul, necesita escalado de frecuencia) y una versión libre, sin escalado de frecuencia, del método p.p. (rojo):
Si no ves ninguna diferencia es por las pequeñas cosas de la vida:
¿Significa esto que el método p.p. converge hacia un filtro gaussiano? No. Aquí están los polos de la gaussiana (azul) y el de Bessel (rojo), escalados para compararlos con el círculo unitario:
Están aún más dispersos. Pero ¿están, al menos, situados en un círculo, desplazados o no? Aquí están los resultados de los radios de los círculos, en un método similar al de Bessel, más arriba:
[2.216482009751927,2.067108140129843,1.988005879596608,1.939764970045811,1.910091446017072]
y la representación gráfica, tras otro intento forzado de proyectarlos sobre el círculo unitario (de nuevo, de la misma forma que Bessel, más arriba):
Para completar, he aquí la respuesta al impulso de la gaussiana (azul), comparada con la de Bessel (rojo) y el método p.p. (verde):
Dada esta prueba final, el método p.p. es incluso mejor en términos de dominio temporal en comparación con el gaussiano, pero eso también significa que, en términos de frecuencia, es un desastre. Sin embargo, estoy pensando en otro pproach, pero eso será para otro día.
1 votos
Están en una elipse que se estira en el eje jw en comparación con el \$\sigma\$ eje y creo que deberías poder calcularlo a partir del polinomio pero nunca lo he hecho. Probablemente lo sabías, un hombre de tu calibre. Los filtros más inclinados también tienen polos en una elipse pero la elipse es más ancha en el \$\sigma\$ eje. Cuando un filtro empinado se transforma en un bessel pasa por el butterworth \$\omega_n\$ círculo.
0 votos
El fotón, ¿es una cuestión puramente teórica? Por supuesto, uno puede preguntarse esas cosas. Mi única pregunta es: ¿con qué fin? Para diseñar filtros Thomson-Bessel, existen otras reglas de diseño más orientadas a la práctica (por ejemplo, la lista de frecuencias de los polos y los valores Q de los polos). Además, en el caso de las aproximaciones de Bessel, no es infrecuente definir las frecuencias de corte en el dominio temporal (propiedades de retardo) en función de los requisitos de la aplicación.
0 votos
@LvW, el motivo de la pregunta es tener una forma más fácil de recordar, y quizás más intuitiva, de construir (o verificar) un filtro B-T.