In [1]:
import numpy as np
import sympy as sy
from sympy import I, exp
from sympy.utilities.codegen import codegen
In [2]:
z = sy.symbols("z", real=False)
r1,r2,r3, s0,s1, s2,s3 = sy.symbols("r1,r2,r3, s0,s1,s2,s3", real=True)
a, h = sy.symbols("a, h", real=True)
In [11]:
hh = 0.2
pcont = -4
pd1 = np.exp(hh*pcont)
#Ac = sy.poly(z**2*(z - pd1)*(z-pd2), z )
Ac = sy.poly((z - pd1)**2, z )
Ao = sy.poly((z-a), z )
Acl = Ac*Ao
# Assume anti-aliasing filter corresponding to a delay of two sample periods
A = sy.poly( ((z-1)*(z-exp(h))).subs(h,hh), z )
B = sy.poly( ((-1+exp(h)-h)*z + 1-(1-h)*exp(h)).subs(h,hh), z)
print pd1
print A
print B
print Ao
print Ac
In [15]:
R = sy.poly(z + r1, z)
S = sy.poly(s0*z + s1, z)
print A*R+B*S
print Acl
dioph=(A*R+B*S-Acl).all_coeffs()
In [16]:
sol=sy.solve(dioph, (r1, s0,s1))
print sol
In [14]:
len(dioph)
Out[14]:
In [18]:
# Reorganize solution expression for matlab code generation
sol_expr = ('PS4_ship_heading_RST_example_noaliasing', [sol[r1], sol[s0], sol[s1], Ac.subs(z, 1)/B.subs(z,1), a])
In [19]:
# Export to matlab code
[(m_name, m_code)] = codegen(sol_expr, 'octave')
In [20]:
print m_code
with open("/home/kjartan/Dropbox/undervisning/tec/MR2007/matlab/PS4_ship_heading_RST_example_noaliasing.m", "w") as text_file:
text_file.write(m_code)
In [21]:
Ac.subs(z, 1)
Out[21]:
In [92]:
(1-0.45)**4
Out[92]:
In [94]:
B.subs(z,1)
Out[94]:
In [23]:
print dioph
In [24]:
0.55**2/(0.021+0.023)
Out[24]:
In [ ]: