How i can convert discrete filter to continuous transfer function?

3 ビュー (過去 30 日間)
Dmitry Kiselyov
Dmitry Kiselyov 2016 年 11 月 28 日
回答済み: Star Strider 2016 年 11 月 28 日
b0 = 12.575612; b1 = -18.9426445; b2 = 6.4607418;
b = [b0 b1 b2];
a0 = 1.7892133; a1 = -0.7892133; a2 = 0;
a = [a0 a1 a2];
hq = dfilt.df1(b,a,);
How i can convert discrete filter to continuous transf
I need sys = tf(hq);
It not working. Is it possible to convert? If is possible, then how?

回答 (1 件)

Star Strider
Star Strider 2016 年 11 月 28 日
You need to ‘invert’ the bilinear transform using the Symbolic Math Toolbox, then solve:
syms H(s) T z Z
assume(T > 0)
Eq = s == 2/T * (z - 1)/(z + 1);
Z = solve(Eq, z)
b0 = 12.575612;
b1 = -18.9426445;
b2 = 6.4607418;
b = [b0 b1 b2];
bz = poly2sym(b, z)
bs = subs(bz,z,Z)
bs = vpa(expand(simplify(bs, 'Steps', 10)), 5)
a0 = 1.7892133;
a1 = -0.7892133;
a2 = 0;
a = [a0 a1 a2];
az = poly2sym(a, z)
as = subs(az,z,Z)
as = vpa(expand(simplify(as, 'Steps', 10)), 5)
producing:
bs = (176.38*T*s)/(T^2*s^2 - 4.0*T*s + 4.0) - 151.54/(T^2*s^2 - 4.0*T*s + 4.0) + 37.979
as = (17.471*T*s)/(T^2*s^2 - 4.0*T*s + 4.0) - 6.3137/(T^2*s^2 - 4.0*T*s + 4.0) + 2.5784
The ‘T’ variable is the sampling interval (inverse of the sampling frequency). Substitute your actual sampling interval for ‘T’, then use the numden and sym2poly functions (in that order) to create your polynomials to give to the Control System Toolbox tf function.
I leave prewarping and other design decisions to you. Incorporate it as necessary.

カテゴリ

Help Center および File ExchangeDynamic System Models についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by