Tf函数用来建立实部或复数传递函数模型或将状态方程、或零级增益模型转化成传递函数形式。 sys = tf(num,den)命令可以建立一个传递函数,其中分子和分母分别为num和den。输出sys是储存传递函数数据的传递函数目标。 单输入单输出情况下,num和den是s的递减幂级数构成的实数或复数行向量。这两个向量并不要求维数相同。如h = tf([1 0],1)就明确定义了纯导数形式h(s)=s。 若要构建多输入多输出传递函数,要分别定义每一个单输入单输出系统的端口的分子与分母。这种情况下: Num和den是单元数组,其中行数等于输出数,列数等于输入数; 行向量num {i,j}和den{i,j}定义了从输入j到输出i的传递函数的分子与分母。 如果此多输入多输出系统的传递函数中所有的单输入单输出端口有相同的分母,可以设置den为代表这个通用分母的行向量。 sys = tf(num,den,Ts)可以创建一个采样时间为Ts的离散时间传递函数。设置Ts = -1 or Ts = []将不指定采样时间。有关num和den的设置与连续系统一样。 sys = tf(M)可以创建一个静态增益M(标量或矩阵形式)。 sys = tf(num,den,ltisys)创建一个拥有来源于线性时不变模型ltisys的一般线性时不变属性的传递函数。有很多种方法可以创建线性时不变传递函数的数组。 前面介绍的语法可以通过属性名,属性值来进行。 'Property',Value 每一对上述定义都明确指定模型的一个线性时不变属性,如输入名或传递函数变量。 sys = tf(num,den,'Property1',Value1,...,'PropertyN',ValueN)是下述语句的简写形式 sys = tf(num,den) set(sys,'Property1',Value1,...,'PropertyN',ValueN) 作为s或z的有理表达式的传递函数 可以应用实数或复数有理表达式来创建一个传递函数模型。可以: s = tf('s')用拉普拉斯算符s的有理表达式来创建传递函数; z = tf('z',Ts)用离散时间变量z的有理表达式创建采样时间为Ts的传递函数模型。 一旦你定义了s或z变量,就可以直接将传递函数模型定义为上述变量的有理表达式。 如何转化为传递函数 tfsys = tf(sys)可以将任意一个SS模型或ZPK线性时不变模型转化成传递函数的形式。输出tfsys便是sys的传递函数。缺省状态下tf用0作为分子来转化一个状态空间模型到一个传递函数形式。tfsys = tf(sys,'inv')用反演公式来得到分子。这种算法较快,但是在s=0的高阶模型中精度较差。 算例1 创建一两输出单输入传递函数
其中输入为电流,输出为扭矩和角速度。 num = {[1 1] ; 1} den = {[1 2 2] ; [1 0]} H = tf(num,den,'inputn','current','outputn',{'torque' 'ang. velocity'},'variable','p') 从输入电流到输出扭矩的传递函数为(P+1)/(P^2+2P+2),到输出角速度的传递函数为1/P。 在设置中设置'variable'属性为p会使得结果以p的表达式来显示。 算例2 用有理表达式来创建单输入单输出传递函数模型 s = tf('s'); H = s/(s^2 + 2*s +10); 这样会与h = tf([1 0],[1 2 10])得到相同的传递函数。 算例3 创建离散多输入多输出传递函数模型
分母相同d(z)=z+0.3,采样时间0.2s。 nums = {1 [1 0];[-1 2] 3} Ts = 0.2 H = tf(nums,[1 0.3],Ts) % 注意此处行向量代表分母d(z) 算例4 计算下列状态空间模型的传递函数
sys = ss([-2 -1;1 -2],[1 1;2 -1],[1 0],[0 1]) tf(sys) 从输入1到输出的传递函数为 s ------------- s^2 + 4 s + 5 从输入2到输出的传递函数为 s^2 + 5 s + 8 ------------- s^2 + 4 s + 5 算例5 可以应用for循环来定义一个10*1的单输入单输出传递函数模型 s = tf('s') H = tf(zeros(1,1,10)); for k=1:10, H(:,:,k) = k/(s^2+s+k); end 此处率先为传递函数矩阵分配了一个空间。 转自:http://blog.sina.com.cn/s/blog_b4991fd90102wkng.html
|