#!/usr/bin/env python # coding: utf-8 # # Smith Sphere # The [smith chart](http://en.wikipedia.org/wiki/Smith_chart) is a nomogram used frequently in RF/Microwave Engineering. Since its inception it has been recognised that projecting the chart onto the reimen sphere [1]. # # [1]H. . Wheeler, “Reflection Charts Relating to Impedance Matching,” IEEE Transactions on Microwave Theory and Techniques, vol. 32, no. 9, pp. 1008–1021, Sep. 1984. # In[1]: #from IPython.display import SVG #SVG('pics/smith_sphere.svg') from galgebra.printer import Format, Fmt # In[2]: from galgebra import ga from galgebra.ga import Ga from sympy import * Format() (o3d,er,ex,es) = Ga.build('e_r e_x e_s',g=[1,1,1]) (o2d,zr,zx) = Ga.build('z_r z_x',g=[1,1]) Bz = er^ex # impedance plance Bs = es^ex # reflection coefficient plane Bx = er^es I = o3d.I() def down(p, N): ''' stereographically project a vector in G3 downto the bivector N ''' n= -1*N.dual() return -(n^p)*(n-n*(n|p)).inv() def up(p): ''' stereographically project a vector in G2 upto the space G3 ''' if (p^Bz).obj == 0: N = Bz elif (p^Bs).obj == 0: N = Bs n = -N.dual() return n + 2*(p*p + 1).inv()*(p-n) a,b,c,z,s,n = [o3d.mv(k,'vector') for k in ['a','b','c','z','s' ,'n']] # # # Starting with an impedance vector $z$, defined by a vector in the impedance plane $B_z$, this vector has two scalar components ( $z^r$, $z^x$) known as resistance and reactance # In[3]: Bz.dual() # In[4]: Bz.is_zero() # In[5]: z = z.proj([er,ex]) z # stereographically up-projecting this onto the sphere to point $p$, # In[6]: p = up(z) p # In[7]: simplify(p.norm2()) # If we stereo-project this back onto the impedance plane # In[8]: down(p, Bz) # In[9]: down(p,Bs).simplify() # In[10]: (z-er)*(z+er).inv() # In[11]: p # In[12]: R=((-pi/4)*Bx).exp() R # In[13]: R*p*R.rev() # In[14]: down(R*p*R.rev(),Bz)