如何在MATLAB中计算传递函数在指定点处的幅值与相位
MATLAB计算传递函数在指定复点幅值与相位的实现方法
MATLAB有直接完成该计算的功能,不需要手动推导公式计算,常用实现方案如下:
方案1:使用控制系统工具箱的evalfr函数(推荐)
evalfr是控制系统工具箱专门设计用来计算传递函数在指定复频率点取值的函数,计算完成后直接调用MATLAB内置的幅值、相位计算函数即可得到结果,示例代码如下:
% 1. 定义传递函数 G(s) = 1/(s+1) G = tf(1, [1 1]); % 2. 指定待计算的复点 s_target = 2 + 1i; % 3. 计算传递函数在该点的复数值 G_val = evalfr(G, s_target); % 4. 计算幅值与相位 mag = abs(G_val); % 幅值 phase_rad = angle(G_val); % 相位(单位:弧度) phase_deg = rad2deg(phase_rad); % 相位(单位:角度)
上述示例的运行结果:
- 幅值约为0.3162
- 弧度制约为-0.3218,角度制约为-18.43°
方案2:无控制系统工具箱时的手动实现
如果未安装控制系统工具箱,可直接通过多项式计算函数polyval代入复点计算,示例代码如下:
% 按s降幂顺序定义传递函数的分子、分母多项式系数 num = 1; den = [1 1]; % 指定待计算的复点 s_target = 2 + 1i; % 代入计算传递函数复数值 G_val = polyval(num, s_target) / polyval(den, s_target); % 后续幅值、相位计算与方案1完全一致 mag = abs(G_val); phase_deg = rad2deg(angle(G_val));
补充说明
如果需要批量计算多个复点的传递函数取值,可替换evalfr为freqresp函数,调用逻辑基本一致。
内容的提问来源于stack exchange,提问作者mohsen_alizade
相关产品推荐
相关产品推荐

