62、双线性变换与预畸变及乐高机器人案例研究
双线性变换与预畸变及乐高机器人案例研究
1. 双线性变换与预畸变
1.1 双线性变换原理
在离散化具有传递函数 $G(s)$ 的连续时间系统时,可使用梯形积分法。离散时间系统近似的 $z$ 域传递函数为:
$G(z) = G(s)\big|_{s = \frac{2}{T}\frac{z - 1}{z + 1}}$
另一种推导基于变换 $z = e^{Ts}$,可写成两个无穷级数展开式:
$z = \frac{e^{(T/2)s}}{e^{(-T/2)s}} = \frac{1 + (Ts/2) + (1/2!)(Ts/2)^2 + (1/3!)(Ts/2)^3 + \cdots}{1 - (Ts/2) + (1/2!)(Ts/2)^2 - (1/3!)(Ts/2)^3 + \cdots}$
截断线性项后的级数可得:
$z = \frac{1 + (T/2)s}{1 - (T/2)s}$
求解 $s$ 可得:
$s = \frac{2}{T}\frac{z - 1}{z + 1}$
此式即为双线性变换,获得离散时间近似的过程通常称为 Tustin 方法。若连续时间系统稳定,该方法无论步长 $T$ 如何,都能产生稳定的离散时间系统,因此是连续时间系统仿真中最流行的方法之一。
1.2 频率响应分析
考虑 $j\omega$ 轴上的点(即 $s = j\omega$,$-\infty < \omega < \infty$),从 $z = \frac{1 + (T/2)j\omega}{1 - (T/2)j\omega} = 1e^{j\theta}$ 可得:
$\theta = 2\tan^{-1}(\frac{\omega T}{2})$
$j\omega$ 轴从 $-j\infty$ 到 $j\infty$ 被一对一映射到单位圆上,从 $\theta = -\pi$ 到 $\theta = \pi$。但将 $j\omega$ 轴压缩到单位圆会导致频率响应畸变,可通过在对连续时间传递函数 $H(s)$ 应用双线性变换之前,对 $s$ 平面中的临界频率(如 $\omega_0$)进行预畸变来克服。
预畸变后的临界频率 $\hat{\omega}_0$ 可由下式得到:
$\hat{\omega}_0 = \frac{2}{T}\tan(\frac{\omega_0 T}{2})$
1.3 示例分析
1.3.1 问题描述
已知一个模拟滤波器的传递函数为:
$H(s) = \frac{s + \omega_n^2}{s^2 + 2\zeta\omega_ns + \omega_n^2}$,其中 $\zeta = 0.25$,$\omega_n = 1000\ rad/s$
要求完成以下任务:
- (a) 使用采样时间 $T = 0.001\ s$ 的双线性变换求 $H(z)$。
- (b) 对自然频率 $\omega_n$ 进行预畸变,求出预畸变后的传递函数 $\hat{H}(s)$。
- (c) 对预畸变后的传递函数 $\hat{H}(s)$ 应用双线性变换,求出 $\hat{H}(z)$。
- (d) 在同一图中绘制 $H(s)$、$H(z)$ 和 $\hat{H}(z)$ 的幅值和相位,并对结果进行评论。
1.3.2 具体求解
-
(a) 求 $H(z)$
将滤波器参数值代入 $H(s)$ 可得:
$H(s) = \frac{s + 10^6}{s^2 + 500s + 10^6}$
可使用 MATLAB 控制系统工具箱函数 “BILINEAR” 和 “c2d” 来实现双线性变换。“BILINEAR” 函数的一种形式为:
[NUMd, DENd] = BILINEAR(NUM, DEN, FS)
其中,“NUM” 和 “DEN” 是按 $s$ 的降幂描述 $H(s)$ 分子和分母的行向量,“FS” 是采样频率(Hz)。$H(z)$ 的分子和分母在输出数组 “NUMd” 和 “DENd” 中指定。
在 M 文件 “Chap8_Ex6_2.m” 中调用 “BILINEAR” 函数,结果为:
NUMd = 0.1670 0.333 0.1663
DENd = 1.000 –1.0000 0.6667
调用 “c2d” 函数:
sysd = c2d(sysc, T, 'tustin')
得到传递函数:
$\frac{0.167z^2 + 0.3333z + 0.1663}{z^2 - z + 0.6667}$,采样时间 $T = 0.001\ s$
-
(b) 求预畸变后的传递函数 $\hat{H}(s)$
使用预畸变公式 $\hat{\omega}_n = \frac{2}{T}\tan(\frac{\omega_n T}{2})$ 可得:
$\hat{\omega}_n = \frac{2}{0.001}\tan(\frac{1000\times0.001}{2}) = 1092.6\ rad/s$
预畸变后的传递函数为:
$\hat{H}(s) = \frac{s + \hat{\omega}_n^2}{s^2 + 2\zeta\hat{\omega}_ns + \hat{\omega}_n^2} = \frac{s + 1.1938\times10^6}{s^2 + 546.3s + 1.1938\times10^6}$
-
(c) 求 $\hat{H}(z)$
对预畸变后的传递函数 $\hat{H}(s)$ 应用双线性变换,可使用 MATLAB 语句:
sysd_prewarp = c2d(sysc, T, 'prewarp', w_crit)
其中 “w_crit” 设为自然频率 $\omega_n = 1000\ rad/s$,得到 $z$ 域传递函数:
$\frac{0.1902z^2 + 0.3798z + 0.1896}{z^2 - 0.8928z + 0.6524}$
-
(d) 绘制幅值和相位图
绘制连续时间系统频率响应 $H(j\omega)$ 以及两个离散时间系统(有和没有对自然频率 $\omega_n = 1000\ rad/s$ 进行预畸变)的幅值和相位图。如预期的那样,在临界频率 $1000\ rad/s$ 处验证了 $H(s)\big| {s = j\omega_0} = \hat{H}(z)\big| {z = e^{j\omega_0T}}$。
1.4 其他转换方法
“c2d” 函数中还有一种将连续时间模型转换为离散时间模型的方法,即脉冲不变法。该方法基于使离散时间系统的脉冲响应与连续时间系统脉冲响应函数的采样值成比例。实现该方法的语法为:
sysd = c2d(sysc, T, 'imp')
1.5 练习
以下是一些相关练习,可帮助进一步理解和掌握上述内容:
1. 使用零阶保持近似实现 “c2d” 函数,并证明当 $T = 0.05\ s$ 时结果与相关方程一致。
2. 推导由脉冲采样器驱动的一阶保持器的传递函数 $G_{FOH}(s)$,绘制 $T = 0.05\ s$ 时的频率响应,并与 $T = 0.05\ s$ 的零阶保持器的频率响应图进行比较。
3. 重新使用一阶保持近似和双线性变换方法完成相关示例,并与零阶保持近似方法的结果进行比较。
4. 对预畸变后的连续时间传递函数 $\hat{H}(s)$ 应用双线性变换,并将结果与示例中给出的 $z$ 域传递函数 $\hat{H}(z)$ 进行比较。
5. 对于低通和高通滤波器,完成以下任务:
- (a) 基于双线性变换,分别使用采样时间 $T = 0.005\ s$(低通滤波器)和 $T = 0.05\ s$(高通滤波器),求出近似离散时间滤波器的 $z$ 域传递函数。
- (b) 先对每个滤波器的临界频率进行预畸变,再重复 (a)。
- (c) 比较连续时间和离散时间滤波器的频率响应。
- (d) 求出并绘制低通滤波器及其离散时间近似的单位阶跃响应。
- (e) 对高通滤波器重复 (d)。
6. 对于给定的传递函数 $G(s) = \frac{10}{s^2 + 2s + 10}$,完成以下任务:
- (a) 使用 MATLAB 函数 “tf2ss” 将其转换为状态空间形式 $\dot{x} = Ax + Bu$,$y = Cx + Du$。
- (b) 使用 MATLAB 函数 “c2dm” 将连续时间状态空间模型转换为离散时间形式,选择采样时间 $T = 0.05\ s$,并指定 “zoh” 作为近似方法。
- (c) 通过递归求解离散时间状态模型方程,获得单位阶跃响应并绘制结果。
7. 对于上述滤波器,使用脉冲不变法获得离散时间滤波器近似,并比较连续时间和离散时间滤波器的频率响应和脉冲响应函数。
2. 案例研究:乐高 Mindstorms NXT
2.1 机电一体化概述
机电一体化是机械、电子、控制和计算机四个技术子学科的交叉领域。从反馈控制系统的角度来看,机电一体化是控制器设计的实现。反馈控制系统涉及跟踪变化的输入或调节恒定的参考输入。
一个通用反馈控制系统的框图如下:
graph LR
A[参考输入] --> B[比较器]
B --> C[A/D 转换器]
C --> D[计算机]
D --> E[D/A 转换器]
E --> F[放大器]
F --> G[执行器]
G --> H[过程]
H --> I[传感器]
I --> B
控制设计综合通常包括对物理过程进行数学建模和分析,然后设计控制器。Simulink 的图形环境有助于实现这种 “基于模型的设计” 方法。而机电一体化在建模、分析和设计的基础上,增加了在实际硬件上实现控制器设计的步骤。
2.2 软硬件要求与安装
2.2.1 要求
- MATLAB、Simulink、Real-Time Workshop 和 Real-Time Workshop 的嵌入式编码器,可从 The Mathworks 获取。
- Cygwine 和 GNU ARMe 编译器,可下载获得。
- 乐高 NXT 硬件及相应的设备驱动程序,可从乐高获取。
2.2.2 安装步骤
- 安装 The Mathworks 软件并确保其正常运行。
- 通过 MATLAB m - 文件脚本下载和安装第三方软件(Cygwine 和 GNU ARMe 编译器)。脚本可从 The Mathworks 网站(http://www.mathworks.com)搜索 “ECRobot Installer” 获得。
-
下载并解压 “ecrobot_installer_v1_2.zip”,按照 README.pdf 中的说明进行操作。ECRobotInstaller 包含三个 MATLAB m - 文件脚本:
- “download_ecrobot_tools”:下载所有必要的软件。注意,在运行 README 文件中步骤 1 的自动下载脚本之前,可能需要对其进行编辑以适应 nxtOSEK 的当前版本。
- “install_ecrobot_tools”:配置和安装必要的软件。
- “update_nxt_firmware”:更新 NXT 上的固件以运行 ARM 二进制文件。
- 由于编写本文时,sg.exe 已从 nxtOSEK 中移除,因此需从 http://lejos - osek.sourceforge.net/download.htm 下载并解压 osek_os - 1.1.lzh 以获取 sg.exe,并将其复制到 nxtOSEK/toppers_osek/sg 目录。
- 按照 README 文件中的步骤 5 验证一切是否正常工作。若有额外问题,可发送电子邮件至 mindstorms@mathworks.com。
2.3 噪声模型
2.3.1 模型创建
创建一个 Simulink 模型,该模型生成一个噪声输入信号,用于驱动 NXT 电机。模型架构设计使得生成 C 源代码的部分存在于一个由调度器驱动的函数中。
启动 Simulink 后,会安装一个名为 “ECRobot NXT Blockset” 的新模块集。其中的 “ExpFcnCalls Scheduler” 模块根据模块参数中指定的速率生成函数调用事件。对于所示模型,该模块以 100 ms 的速率生成函数调用。函数调用调度器期望连接到一个解复用器模块,即使只有一个函数,解复用器模块也是必需的。解复用器模块的输出作为子系统模块的输入,子系统模块包含生成噪声信号的函数。
在顶层,一个伺服电机接口模块(来自 ECRobot NXT Blockset)连接到一个示波器,以便查看(噪声)输出。“nxtbuild(‘Noisy’, ‘build’)” 和 “nxtbuild(‘Noisy’, ‘rxeflash’)” 是带有回调函数的注释块,用于在 MATLAB 中执行相应的命令。
2.3.2 模型内部结构
- 双击名为 “Noisy” 的子系统模块,可看到函数调用子系统。
- 再双击函数调用子系统,可看到生成噪声信号的模型。一个均值为 32、方差为 $32^2$ 的随机数模块生成随机信号,饱和模块将可能的信号限制在 $\pm100$(因为这是 NXT 电机信号的限制),数据类型转换设置为 int8 以表示有符号 8 位整数(即 $-128$ 到 $127$)。最后,一个伺服电机写入模块(来自 ECRobot NXT Blockset)连接到端口 B。
2.3.3 仿真与代码生成
- 运行 Simulink 仿真后,可从示波器模块查看噪声数据,也可在 MATLAB 工作区中以名为 “noisy” 的 “带时间的结构” 变量形式获取噪声数据。
- 点击注释块 “nxtbuild(‘Noisy’, ‘build’)” 可调用 Real - Time Workshop 代码生成器,从 Simulink 函数创建 C 源代码和相应的头文件。成功生成 C 源代码和头文件后,会出现 Real - Time Workshop 报告。在报告窗口的左侧,超链接指示与 Simulink 模型中函数相关的 C 源代码的各个部分。点击 “Noisy.c” 可查看与构成 Simulink 模型函数的基本模块直接对应的代码部分。
通过以上内容,我们详细介绍了双线性变换与预畸变的原理、应用及相关示例,还探讨了乐高 Mindstorms NXT 平台在机电一体化中的应用,包括软硬件安装和噪声模型的创建与仿真。希望这些内容能帮助你更好地理解和掌握相关知识。
2.4 滤波模型
2.4.1 模型改进思路
在噪声模型的基础上,为了改善 NXT 电机的运行效果,我们可以添加一个离散时间卡尔曼滤波器(DTKF)来过滤噪声输入信号。这样可以使电机的运行更加稳定,减少噪声对电机的影响。
2.4.2 模型修改步骤
- 添加卡尔曼滤波器模块 :在 Simulink 模型中,找到合适的位置添加离散时间卡尔曼滤波器模块。该模块可以对输入的噪声信号进行滤波处理,输出更平滑的信号。
- 连接滤波器与其他模块 :将卡尔曼滤波器的输入端口连接到噪声信号的输出端,将滤波器的输出端口连接到伺服电机写入模块的输入端。这样,经过滤波后的信号将被发送到电机,从而控制电机的运行。
2.4.3 仿真与测试
- 运行仿真 :修改完模型后,运行 Simulink 仿真,观察滤波后的信号和电机的运行情况。可以通过示波器模块查看滤波后的信号波形,与未滤波的噪声信号进行对比。
- 生成代码并运行 :点击注释块 “nxtbuild(‘Filtered’, ‘build’)” 调用 Real - Time Workshop 代码生成器,生成 C 源代码和相应的头文件。然后点击 “nxtbuild(‘Filtered’, ‘rxeflash’)” 将生成的代码下载到 NXT 硬件上运行,观察滤波后的信号对物理电机的影响。
2.5 总结与对比
2.5.1 噪声模型与滤波模型对比
| 模型类型 | 信号特点 | 电机运行情况 | 优点 | 缺点 |
|---|---|---|---|---|
| 噪声模型 | 信号包含大量噪声,波动较大 | 电机运行不稳定,可能出现抖动和异常动作 | 简单易实现,可用于初步测试 | 电机性能受噪声影响大,不适合实际应用 |
| 滤波模型 | 信号经过滤波处理,更加平滑 | 电机运行稳定,动作更加精确 | 提高电机性能,减少噪声干扰 | 需要添加滤波器模块,模型复杂度增加 |
2.5.2 机电一体化应用总结
通过乐高 Mindstorms NXT 平台的案例研究,我们可以看到机电一体化在实际应用中的重要性和优势。机电一体化将机械系统、电子系统、控制系统和计算机技术相结合,实现了控制器设计的有效实现。在这个案例中,我们通过 Simulink 进行模型设计和仿真,利用 Real - Time Workshop 生成代码并在实际硬件上运行,完成了从理论设计到实际应用的全过程。
3. 拓展应用与展望
3.1 其他应用场景
双线性变换与预畸变以及机电一体化技术在许多领域都有广泛的应用,例如:
1.
工业自动化
:在工业生产线上,通过离散化连续时间系统模型,可以实现对机器人、自动化设备等的精确控制,提高生产效率和产品质量。
2.
航空航天
:在飞行器的控制系统中,使用双线性变换和预畸变技术可以对飞行姿态、导航等进行精确控制,确保飞行安全。
3.
智能家居
:在智能家居系统中,机电一体化技术可以实现对家电设备的智能控制,提高家居的舒适度和便利性。
3.2 未来发展趋势
随着科技的不断发展,双线性变换与预畸变以及机电一体化技术也将不断进步。未来的发展趋势可能包括:
1.
更高的精度和性能
:通过改进算法和技术,提高离散化系统的精度和性能,实现更精确的控制。
2.
更广泛的应用领域
:将这些技术应用到更多的领域,如医疗设备、生物工程等,为人们的生活和工作带来更多的便利。
3.
智能化和自动化
:结合人工智能和机器学习技术,实现系统的智能化和自动化,减少人工干预,提高系统的自适应能力。
4. 常见问题解答
4.1 双线性变换相关问题
-
双线性变换会导致频率响应畸变吗?
会的,双线性变换将 $j\omega$ 轴压缩到单位圆时会导致频率响应畸变。但可以通过预畸变临界频率来克服这个问题。 -
如何选择合适的采样时间 $T$?
采样时间 $T$ 的选择需要综合考虑系统的特性和要求。一般来说,较小的采样时间可以提高离散化系统的精度,但会增加计算量;较大的采样时间可以减少计算量,但可能会导致系统性能下降。可以通过试验和仿真来选择合适的采样时间。
4.2 乐高 Mindstorms NXT 相关问题
-
安装过程中遇到问题怎么办?
如果在安装过程中遇到问题,可以参考 README.pdf 文件中的常见问题解答,或者发送电子邮件至 mindstorms@mathworks.com 寻求帮助。 -
如何调试模型?
可以通过 Simulink 的仿真功能来调试模型,观察信号的波形和系统的运行情况。同时,也可以在实际硬件上运行模型,通过观察电机的运行情况来进行调试。
5. 总结
本文详细介绍了双线性变换与预畸变的原理、应用及相关示例,包括如何使用双线性变换将连续时间系统离散化,以及如何通过预畸变克服频率响应的畸变问题。同时,通过乐高 Mindstorms NXT 平台的案例研究,展示了机电一体化技术在实际应用中的具体实现过程,包括软硬件的安装、模型的创建和仿真、代码的生成和下载等。此外,还探讨了这些技术的拓展应用和未来发展趋势,并解答了一些常见问题。希望这些内容能帮助读者更好地理解和掌握相关知识,为实际应用提供参考。
以下是一个简单的 mermaid 流程图,展示了从连续时间系统到离散时间系统的转换过程:
graph LR
A[连续时间系统 G(s)] --> B[双线性变换]
B --> C{是否预畸变}
C -- 是 --> D[预畸变临界频率]
C -- 否 --> E[直接转换]
D --> E
E --> F[离散时间系统 G(z)]
通过以上内容,我们对双线性变换与预畸变以及乐高 Mindstorms NXT 平台在机电一体化中的应用有了更深入的了解。在实际应用中,我们可以根据具体需求选择合适的方法和技术,不断优化系统性能,为各个领域的发展做出贡献。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)