[<<][compsci][>>][..]

Thu Dec 2 11:42:46 EST 2010

## Representation of impedance/admittance duality

-- Instead of having to perform numerical inverse all the time, why
-- not represent numbers as (x, 1/x), where possibly one of the two is
-- not given?
-- EDIT: This turned out to be quite interesting: dual.hs
-----------------------------------------------------------------------
import Data.Complex
---- Dual representation of 2-terminals.
-- "Half" two-terminal: 2 primitive elements, one composition.
data HTT a = Resistive a -- V = R I ; I = G V
| Reactive a -- V = L dI/dt ; I = C dV/dt
| Composite (TT a) (TT a) -- V1 + V2 (ser) ; I1 + I2 (par)
deriving (Show, Eq)
-- A two-terminal is a dualized HTT.
data TT a = Primal (HTT a) -- keep duals
| Dual (HTT a) -- flip duals (invert)
deriving (Show, Eq)
dual (Primal htt) = Dual htt
dual (Dual htt) = Primal htt
-- The main idea of the dual representation is generality. One
-- consequence is that building a s-parameterized
-- impedance/admittance/transfer function is straightforward.
trans :: (RealFloat a) => (TT a) -> (Complex a) -> (Complex a)
trans = flip a'' where
a'' s = a' where
a' (Dual htt) = 1 / (a htt)
a' (Primal htt) = a htt
a (Resistive r) = r :+ 0
a (Reactive r) = (r :+ 0) * s
a (Composite x y) = (a' x) + (a' y)
---- Absolute representation of 2-terminals in terms of dual rep.
-- To represent networks we need to tag the TT to indicate which one
-- of Impedance or Admittance it represents.
data ATT a = Impedance (TT a)
| Admittance (TT a)
deriving (Show, Eq)
-- Primitive absolute elements are constructed as I/A tagged Primal TTs.
-- Resistive: Impedance / Admittance independent of frequency.
res r = Impedance (Primal (Resistive r)) -- resistor (Ohms)
cnd g = Admittance (Primal (Resistive g)) -- conductor (Siemens,Mhos)
-- Reactive: Impedance / Admittance proportional to frequency.
ind l = Impedance (Primal (Reactive l)) -- inductor (Henry)
cap c = Admittance (Primal (Reactive c)) -- capacitor (Farad)
-- Project ATT to TT, interpreting it as impedance or admittance.
imp (Impedance tt) = tt
imp (Admittance tt) = dual tt
adm = dual . imp
-- Primitive absolute 2-terminal operations are constructed in terms
-- of a Primal Composite operation.
ser a b = Impedance (Primal (Composite (imp a) (imp b)))
par a b = Admittance (Primal (Composite (adm a) (adm b)))
j x = (0 :+ x)
-- Voltage divider
divider a b s = a' / (a' + b') where
a' = trans (imp a) s
b' = trans (imp b) s

[Reply][About]

[<<][compsci][>>][..]