Matlab中Bode图--HZ显示横坐标

我们经常会遇到使用Matlab画伯德图的情况,可能我们我们都知道bode这个函数是用来画bode图的,这个函数是Matlab内部提供的一个函数,我们可以很方便的用它来画伯德图,但是对于初学者来说,可能用起来就没有那么方便了。

   譬如我们要画出下面这个传递函数的伯德图:

                                                           1.576e010 s^2

H(s)=           ------------------------------------------------------------------------------------------

s^4 + 1.775e005 s^3 + 1.579e010 s^2 + 2.804e012 s + 2.494e014

(这是一个用butter函数产生的2阶的,频率范围为[20 20K]HZ的带通滤波器。)

我们可以用下面的语句:

num=[1.576e010         0];

den=[1 1.775e005      1.579e010      2.804e012      2.494e014];

H=tf(num,den);

bode(H)

这样,我们就可以得到以下的伯德图:

Matlab中Bode图--HZ显示横坐标

可能我们会对这个图很不满意,第一,它的横坐标是rad/s,而我们一般希望横坐标是HZ;第二,横坐标的范围让我们看起来很不爽;第三,网格没有打开(这点当然我们可以通过在后面加上grid on解决)。

下面,我们来看看如何定制我们自己的伯德图风格:

在命令窗口中输入:bodeoptions

我们可以看到以下内容:

ans =

 

                 Title: [1x1 struct]

                XLabel: [1x1 struct]

                YLabel: [1x1 struct]

             TickLabel: [1x1 struct]

                  Grid: 'off'

                  XLim: {[1 10]}

              XLimMode: {'auto'}

                  YLim: {[1 10]}

              YLimMode: {'auto'}

            IOGrouping: 'none'

           InputLabels: [1x1 struct]

          OutputLabels: [1x1 struct]

          InputVisible: {'on'}

         OutputVisible: {'on'}

             FreqUnits: 'rad/sec'

             FreqScale: 'log'

              MagUnits: 'dB'

              MagScale: 'linear'

            MagVisible: 'on'

       MagLowerLimMode: 'auto'

           MagLowerLim: 0

            PhaseUnits: 'deg'

          PhaseVisible: 'on'

         PhaseWrapping: 'off'

         PhaseMatching: 'off'

     PhaseMatchingFreq: 0

    PhaseMatchingValue: 0

我们可以通过修改上面的每一项修改伯德图的风格,比如我们使用下面的语句画我们的伯德图:

P=bodeoptions;

P.Grid='on';

P.XLim={[10      40000]};

P.XLimMode={'manual'};

P.FreqUnits='HZ';

num=[1.576e010         0];

den=[1 1.775e005      1.579e010      2.804e012      2.494e014];

H=tf(num,den);

bode(H,P)

 

这时,我们将会看到以下的伯德图:

Matlab中Bode图--HZ显示横坐标

上面这张图相对就比较好了,它的横坐标单位是HZ,范围是[10 40K]HZ,而且打开了网格,便于我们观察-3DB处的频率值。

当然,你也可以改变bodeoptions中的其它参数,做出符合你的风格的伯德图。


上面那段代码中添加下面一句就可以将频率坐标变为线性变化:P.FreqScale = 'linear'

<think>好的,我现在需要帮助用户解决如何在MATLAB中修改Bode的横纵坐标的问题。首先,我得回想一下用户提供的引用内容,特别是引用[2]和引用[3],里面提到了使用bode函数和设置P参数来控制坐标轴。用户可能希望调整横纵坐标的范围、单位或者刻度类型,比如从对数变为线性。 首先,我应该分步骤说明如何操作。根据引用[2],使用bodeoptions创建一个选项对象P,然后设置各种属性。例如,P.XLim设置横轴范围,P.YLim设置纵轴范围,P.FreqUnits改变频率单位。引用[3]提到如何将频率刻度改为线性,使用P.FreqScale = 'linear'。 接下来,我需要确保步骤清晰,用户能够按照步骤一步步设置。可能需要提到如何生成传递函数,应用选项,并绘制形。同时,要指出这些设置的具体参数和如何调整,比如如何修改XLim的值来适应不同的频率范围。 还要注意是否需要使用margin函数还是直接使用bode,因为引用[2]中两种方法都有提到。需要说明不同方法之间的区别,比如使用bode函数配合选项,或者用margin来显示稳定裕度。 另外,用户可能遇到的问题,比如设置YLim时的格式是否正确,每个子的纵轴范围是否需要用元胞数组分开设置,如引用[2]中的例子所示。需要给出具体的示例代码,让用户可以直接复制修改。 最后,生成相关问题的时候,要考虑用户可能的后续疑问,比如如何调整网格线、如何添加标题或标签,或者如何处理多个Bode的绘制。这些问题可以帮助用户进一步深入学习MATLAB功能。</think>### 如何在MATLAB中修改Bode的横纵坐标 #### **步骤说明** 1. **使用`bodeoptions`设置参数** 通过`bodeoptions`创建选项对象,自定义横纵坐标属性: ```matlab P = bodeoptions; % 获取默认参数模板 P.Grid = 'on'; % 开启网格线(可选) ``` - **横坐标设置** ```matlab P.XLim = {[1e-2, 100]}; % 设置频率范围,例如0.01Hz到100Hz P.FreqUnits = 'Hz'; % 单位设为Hz(默认是rad/s)[^2] P.FreqScale = 'linear'; % 横坐标改为线性(默认为对数log)[^3] ``` - **纵坐标设置** ```matlab P.YLim = {[-30, 3], [-135, 10]}; % 幅度轴范围[-30dB,3dB],相位轴范围[-135°,10°][^2] ``` 2. **生成传递函数并绘制Bode** 以二阶系统为例: ```matlab num = [30, 369.8, 1367]; den = [2.152E-4, 0.2704, 29.99, 358.9, 1367]; G = tf(num, den); % 创建传递函数 bode(G, P); % 绘制Bode(带自定义参数) % 或使用margin显示幅值裕度和相位裕度 margin(G); ``` #### **关键参数解释** - `XLim`和`YLim`:需用元胞数组格式,分别定义幅频和相频曲线的纵轴范围。 - `FreqUnits`:支持`'Hz'`或`'rad/s'`,根据需求切换单位。 - `FreqScale`:`'log'`(默认对数坐标)或`'linear'`(线性坐标)。 #### **示例效果** 若需绘制横轴为线性刻度(0-50Hz)、纵轴幅度范围[-10dB,20dB],相位范围[-180°,0°]: ```matlab P = bodeoptions; P.XLim = {[0,50]}; P.FreqScale = 'linear'; P.YLim = {[-10,20], [-180,0]}; bode(tf([1],[1,2,1]), P); ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值