Matlab中的c2d函数用法以及绘制传函的Bode图

本文介绍c2d函数的多种方法及其应用场景,如滤波器设计中的脉冲响应不变法及控制器设计中的双线性变换法。同时,讲解了如何使用m语言绘制传递函数的Bode图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.c2d()函数的用法

c2d()函数的作用是将s域的表达式转化成z域的表达式,s=0对应z=1。

c2d()函数转化的方法有多种:

①zoh, 零阶保持器法,又称阶跃响应不变法;

foh ,一阶保持器法

tustin ,双线性变换法

④ imp, 脉冲响应不变法。

根据不同的场合,使用不同的方法,生成的参数也不一样。在具体的应用场合,需针对不同的具体应用问题采用适当的方法的问题!比如滤波器设计多采用脉冲响应不变法;控制器设计多采用双线性变换法('tustin')、零极点配置法('matched')、后向差分法(这个c2d函数不包含)等;如果是控制系统仿真或控制器的直接数字化设计,被控对象离散化则多采用加零阶保持器方法('zoh',又称阶跃响应不变法)。

若根据s函数直接求z变换,用c2d(k,0.02,'imp')就可以了!'imp'称为“脉冲响应不变法”,实为直接求Z变换!当然还有其他办法!事实上,所有教科书所予“Z变换表”就是直接求Z变换(这种解释有点像“同意反复”),而c2d函数并非如此!比如c2d(k,0.02),尽管没有指明采用何种方法离散化,但事实上默认的是'zoh'!

2.绘制传递函数的Bode图
这里讲述如何用m语言绘制传递函数的bode图。

①打开matlab,进入“编辑器”选项

②在编辑器上输入m程序
例如传递函数为

则输入:

g = tf([1],[a,b,1]);  //tf函数中第一项为分子的系数,第二项为分母的系数。

③点击保存并运行,弹出传递函数的bode图

④双击Bode图,可以改变图的一些性质

或者在figure1的菜单项中选择编辑bode图的属性。

### 使用Matlab绘制和分析传递函数Bode #### 创建传递函数模型 为了创建一个传递函数模型,在Matlab中可以使用`tf()`函数来定义分子和分母多项式的系数。例如,如果有一个一阶系统\[ G(s)=\frac{18}{s(s+146)} \],可以通过下面的方式建立该系统的传递函数对象[^1]: ```matlab num = [18]; den = conv([1, 0], [1, 146]); sys = tf(num, den); ``` 这里使用的`conv()`函数是为了方便地计算两个多项式的乘积。 #### 绘制Bode 一旦有了传递函数的对象,就可以调用`bode()`函数来生成对应的Bode。这一步骤非常简单,只需输入已定义好的系统变量即可: ```matlab bode(sys); ``` 此命令会自动展示频率响应特性曲线,包括增益(magnitude)与相位(phase),并以对数尺度呈现频率轴. 对于更精细控制表外观的需求,比如调整单位、网格样式以及设定特定范围内的显示效果,则可通过配置选项实现。具体做法是先获取默认绘参数再做相应修改: ```matlab opts = bodeoptions; opts.FreqUnits = 'Hz'; opts.Grid = 'on'; opts.PhaseMatching = 'on'; h = figure; bodeplot(sys, opts); set(h, 'Position', [100, 100, 800, 600]); ``` 上述代码片段设置了频率单位为赫兹(Hz),开启了网格线,并启用了相位匹配功能以便更好地比较不同系统的相对稳定性[^2]. 同时还自定义了形窗口的位置大小。 #### 添加额外信息到表上 有时可能希望在同一张里叠加多个系统的Bode对比它们之间的差异。这时就需要借助于`hold on`语句保持当前像状态不变的同时继续添加新的数据系列。另外还可以通过指定不同的颜色或线条风格区分各个子项。最后记得给每条曲线加上说标签帮助读者理解所见内容。 ```matlab w = logspace(-1, 3, 10000); % 定义频率向量 figure; % 第一条曲线 num = [10]; den = [1, 1, 0]; sys = tf(num, den); bode(sys, w); grid on; hold on; % 第二条曲线 num1 = [1 / 1.667, 1]; den1 = [1 / 21.6, 1]; sys1 = tf(num1, den1); bode(sys1, w); % 第三条曲线 num2 = conv(num, num1); den2 = conv(den, den1); sys2 = tf(num2, den2); bode(sys2, w); legend('System 1', 'System 2', 'Combined System'); ``` 这段脚本展示了如何在一个坐标系内同时画出三个独立但又相互关联的动态系统的频域行为特征[^3]. #### 处理离散时间系统 值得注意的是,除了处理连续时间信号外,`bode()`同样适用于离散时间领域的情况。当面对这类情形时,往往需要先利用诸如`tustin`这样的映射算法把原始模拟形式转换成适合计算机仿真的数字版本。之后便可以直接按照前述流程操作了。 ```matlab Ca = tf([1, 0], [1, 0, (2 * pi * 250)^2]); Cd = c2d(Ca, 0.001, 'tustin'); bode(Ca, Cd); legend('Continuous-time system', 'Discrete-time approximation') ``` 以上实例说明了怎样针对同一个物理过程分别构建其连续时间和离散时间下的数学描述,并直观地观察两者之间存在的异同之处[^4].
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值