渐近线近似伯德图matlab绘制
时间: 2024-12-25 08:19:51 浏览: 16
### 如何用 MATLAB 绘制渐近线近似 Bode 图
为了绘制渐近线近似的伯德图,在MATLAB中通常先定义系统的传递函数模型,再通过`bodeplot`或自定义方式实现渐近线的描绘。对于渐近线近似而言,重点在于手动计算各个转折频率处增益变化的趋势并绘制成折线形式。
#### 定义系统模型
假设有一个二阶低通滤波器作为例子:
```matlab
num = [1]; % 分子系数
den = [1, 0.707, 1]; % 分母系数
sys = tf(num, den); % 创建连续时间SISO传输函数对象
```
此部分创建了一个标准的二阶系统模型[^1]。
#### 计算频域数据点
利用`logspace`生成对数分布的频率向量,并调用`bode`获取幅值和相位信息:
```matlab
w = logspace(-1, 2, 500); % 频率范围从0.1到100rad/s共500个点
[mag, phase] = bode(sys, w);
mag_dB = db(mag); % 将幅度转换成分贝单位
```
这里采用了对数间隔的方式来覆盖更宽泛的频率区间[^2]。
#### 手动构建渐近线
针对上述给定的二阶系统,其具有两个极点位于虚轴上,因此可以根据理论分析得出相应的斜率为-40dB/decade(每十倍频程下降40dB)。基于这一点可以在特定的关键位置画出直线段来代表实际曲线的大致走向。
```matlab
figure;
semilogx(w, mag_dB, 'LineWidth', 2); hold on; grid on;
% 渐近线绘制
asymptote_w_start = sqrt(0.707^2 / (4 * pi)); % 转折前后的起始频率估算
asymptote_mag_start = 0; % 初始水平线高度设为零
slope = -40; % 斜率设置为负四十db per decade
% 添加两条渐近线:一条平坦直到转折频率之前;另一条按照指定斜率倾斜
line([min(w), asymptote_w_start], [asymptote_mag_start, asymptote_mag_start]);
line([asymptote_w_start, max(w)], ...
[asymptote_mag_start, asymptote_mag_start + slope*log10(max(w)/asymptote_w_start)]);
xlabel('Frequency (rad/sec)');
ylabel('Magnitude (dB)');
title('Asymptotic Approximation of a Second Order Low Pass Filter');
legend({'Actual Response','Flat Line Before Corner Frequency',...
'Approximate Slope After Corner'},'Location','Best')
```
这段代码实现了在原有精确曲线上叠加手工设计好的渐近线条形展示效果。
阅读全文