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 [81]:
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)**4, z )
Ao = sy.poly((z-a)**3, z )
Acl = Ac*Ao
# Assume anti-aliasing filter corresponding to a delay of two sample periods
A = sy.poly( (z**2*(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 [82]:
R = sy.poly(z**3 + r1*z**2+r2*z+r3, z)
S = sy.poly(s0*z**3 + s1*z**2 + s2*z + s3, z)
print A*R+B*S
print Acl
dioph=(A*R+B*S-Acl).all_coeffs()
In [83]:
sol=sy.solve(dioph, (r1,r2, r3, s0,s1,s2, s3))
print sol
In [84]:
len(dioph)
Out[84]:
In [85]:
# Reorganize solution expression for matlab code generation
sol_expr = ('PS4_ship_heading_RST_example_aliasing', [sol[r1], sol[r2], sol[r3], sol[s0], sol[s1], sol[s2], sol[s3], Ac.subs(z, 1)/B.subs(z,1), a])
In [86]:
# Export to matlab code
[(m_name, m_code)] = codegen(sol_expr, 'octave')
In [87]:
print m_code
with open("/home/kjartan/Dropbox/undervisning/tec/MR2007/matlab/PS4_ship_heading_RST_example_aliasing.m", "w") as text_file:
text_file.write(m_code)
In [91]:
Ac.subs(z, 1)
Out[91]:
In [92]:
(1-0.45)**4
Out[92]:
In [94]:
B.subs(z,1)
Out[94]:
In [ ]: