neuper@42256
|
1 |
(* Title: Test_Z_Transform
|
neuper@42256
|
2 |
Author: Jan Rocnik
|
neuper@42256
|
3 |
(c) copyright due to lincense terms.
|
neuper@42256
|
4 |
12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
neuper@42256
|
5 |
10 20 30 40 50 60 70 80
|
neuper@42256
|
6 |
*)
|
neuper@42256
|
7 |
|
neuper@42290
|
8 |
theory Inverse_Z_Transform imports PolyEq DiffApp Partial_Fractions begin
|
neuper@42256
|
9 |
|
neuper@42256
|
10 |
axiomatization where
|
neuper@42256
|
11 |
rule1: "1 = \<delta>[n]" and
|
neuper@42256
|
12 |
rule2: "|| z || > 1 ==> z / (z - 1) = u [n]" and
|
neuper@42256
|
13 |
rule3: "|| z || < 1 ==> z / (z - 1) = -u [-n - 1]" and
|
jan@42367
|
14 |
rule4: "c * (z / (z - \<alpha>)) = c * \<alpha>^^^n * u [n]" and
|
neuper@42256
|
15 |
rule5: "|| z || < || \<alpha> || ==> z / (z - \<alpha>) = -(\<alpha>^^^n) * u [-n - 1]" and
|
jan@42367
|
16 |
rule6: "|| z || > 1 ==> z/(z - 1)^^^2 = n * u [n]" (*and
|
jan@42367
|
17 |
rule42: "(a * (z/(z-b)) + c * (z/(z-d))) = (a * b^^^n * u [n] + c * d^^^n * u [n])"*)
|
neuper@42256
|
18 |
|
neuper@42256
|
19 |
axiomatization where
|
jan@42367
|
20 |
ruleZY: "(X z = a / b) = (X' z = a / (z * b))" and
|
jan@42367
|
21 |
ruleYZ: "(a/b + c/d) = (a*(z/b) + c*(z/d))"
|
neuper@42256
|
22 |
|
neuper@42279
|
23 |
subsection{*Define the Field Descriptions for the specification*}
|
neuper@42279
|
24 |
consts
|
neuper@42279
|
25 |
filterExpression :: "bool => una"
|
neuper@42279
|
26 |
stepResponse :: "bool => una"
|
neuper@42279
|
27 |
|
jan@42366
|
28 |
|
jan@42366
|
29 |
ML {*
|
jan@42366
|
30 |
val inverse_z = prep_rls(
|
jan@42366
|
31 |
Rls {id = "inverse_z", preconds = [], rew_ord = ("dummy_ord",dummy_ord),
|
jan@42366
|
32 |
erls = Erls, srls = Erls, calc = [],
|
jan@42366
|
33 |
rules =
|
jan@42367
|
34 |
[
|
jan@42367
|
35 |
Thm ("rule4",num_str @{thm rule4})
|
jan@42366
|
36 |
],
|
jan@42366
|
37 |
scr = EmptyScr}:rls);
|
jan@42366
|
38 |
*}
|
jan@42366
|
39 |
|
jan@42366
|
40 |
|
jan@42366
|
41 |
text {*store the rule set for math engine*}
|
jan@42366
|
42 |
|
jan@42366
|
43 |
ML {*
|
jan@42366
|
44 |
ruleset' := overwritelthy @{theory} (!ruleset',
|
jan@42366
|
45 |
[("inverse_z", inverse_z)
|
jan@42366
|
46 |
]);
|
jan@42366
|
47 |
*}
|
jan@42366
|
48 |
|
neuper@42256
|
49 |
subsection{*Define the Specification*}
|
neuper@42256
|
50 |
ML {*
|
neuper@42256
|
51 |
val thy = @{theory};
|
neuper@42278
|
52 |
|
neuper@42256
|
53 |
store_pbt
|
neuper@42256
|
54 |
(prep_pbt thy "pbl_SP" [] e_pblID
|
neuper@42256
|
55 |
(["SignalProcessing"], [], e_rls, NONE, []));
|
neuper@42256
|
56 |
store_pbt
|
neuper@42256
|
57 |
(prep_pbt thy "pbl_SP_Ztrans" [] e_pblID
|
neuper@42256
|
58 |
(["Z_Transform","SignalProcessing"], [], e_rls, NONE, []));
|
neuper@42256
|
59 |
store_pbt
|
neuper@42256
|
60 |
(prep_pbt thy "pbl_SP_Ztrans_inv" [] e_pblID
|
neuper@42256
|
61 |
(["inverse", "Z_Transform", "SignalProcessing"],
|
neuper@42278
|
62 |
[("#Given" ,["filterExpression (X_eq::bool)"]),
|
neuper@42278
|
63 |
("#Find" ,["stepResponse (n_eq::bool)"])
|
neuper@42256
|
64 |
],
|
neuper@42256
|
65 |
append_rls "e_rls" e_rls [(*for preds in where_*)], NONE,
|
neuper@42277
|
66 |
[["SignalProcessing","Z_Transform","inverse"]]));
|
neuper@42256
|
67 |
*}
|
neuper@42256
|
68 |
|
neuper@42256
|
69 |
subsection {*Define Name and Signature for the Method*}
|
neuper@42256
|
70 |
consts
|
neuper@42256
|
71 |
InverseZTransform :: "[bool, bool] => bool"
|
neuper@42256
|
72 |
("((Script InverseZTransform (_ =))// (_))" 9)
|
neuper@42256
|
73 |
|
neuper@42277
|
74 |
subsection {*Setup Parent Nodes in Hierarchy of Method*}
|
neuper@42256
|
75 |
ML {*
|
neuper@42256
|
76 |
store_met
|
neuper@42256
|
77 |
(prep_met thy "met_SP" [] e_metID
|
neuper@42256
|
78 |
(["SignalProcessing"], [],
|
neuper@42256
|
79 |
{rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
|
neuper@42256
|
80 |
crls = e_rls, nrls = e_rls}, "empty_script"));
|
neuper@42256
|
81 |
store_met
|
neuper@42256
|
82 |
(prep_met thy "met_SP_Ztrans" [] e_metID
|
neuper@42256
|
83 |
(["SignalProcessing", "Z_Transform"], [],
|
neuper@42256
|
84 |
{rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
|
neuper@42256
|
85 |
crls = e_rls, nrls = e_rls}, "empty_script"));
|
neuper@42256
|
86 |
val thy = @{theory}; (*latest version of thy required*)
|
neuper@42256
|
87 |
store_met
|
neuper@42256
|
88 |
(prep_met thy "met_SP_Ztrans_inv" [] e_metID
|
neuper@42256
|
89 |
(["SignalProcessing", "Z_Transform", "inverse"],
|
neuper@42278
|
90 |
[("#Given" ,["filterExpression (X_eq::bool)"]),
|
neuper@42278
|
91 |
("#Find" ,["stepResponse (n_eq::bool)"])
|
neuper@42256
|
92 |
],
|
neuper@42256
|
93 |
{rew_ord'="tless_true", rls'= e_rls, calc = [], srls = e_rls, prls = e_rls,
|
neuper@42256
|
94 |
crls = e_rls, nrls = e_rls},
|
neuper@42281
|
95 |
"Script InverseZTransform (X_eq::bool) =" ^ (*(1/z) instead of z ^^^ -1*)
|
neuper@42281
|
96 |
" (let X = Take X_eq;" ^
|
neuper@42281
|
97 |
" X' = Rewrite ruleZY False X;" ^ (*z * denominator*)
|
neuper@42281
|
98 |
" X' = (Rewrite_Set norm_Rational False) X';" ^ (*simplify*)
|
neuper@42290
|
99 |
" funterm = Take (rhs X');" ^ (*drop X' z = for equation solving*)
|
neuper@42290
|
100 |
" denom = (Rewrite_Set partial_fraction False) funterm;" ^ (*get_denominator*)
|
neuper@42290
|
101 |
" equ = (denom = (0::real));" ^
|
neuper@42290
|
102 |
" fun_arg = Take (lhs X');" ^
|
neuper@42290
|
103 |
" arg = (Rewrite_Set partial_fraction False) X';" ^ (*get_argument TODO*)
|
neuper@42290
|
104 |
" (L_L::bool list) = " ^
|
neuper@42290
|
105 |
" (SubProblem (Test', " ^
|
neuper@42290
|
106 |
" [linear,univariate,equation,test]," ^
|
neuper@42290
|
107 |
" [Test,solve_linear]) " ^
|
neuper@42290
|
108 |
" [BOOL equ, REAL z]) " ^
|
neuper@42281
|
109 |
" in X)"
|
neuper@42256
|
110 |
));
|
neuper@42256
|
111 |
*}
|
neuper@42256
|
112 |
|
neuper@42256
|
113 |
end
|
neuper@42256
|
114 |
|