基于MATLAB的多功能函数信号发生器与虚拟示波器系统
项目介绍
本项目是一个基于MATLAB App设计架构的交互式仿真平台,通过高度集成的图形用户界面(GUI),模拟了实验室硬件信号发生器与示波器的核心功能。系统利用MATLAB的数值计算能力,实时通过离散时间信号生成算法产生高质量的波形,并提供动态的时域可视化显示。该系统特别适合科研人员进行信号仿真激励、教育人员进行信号理论教学以及工程人员进行基础信号分析。
功能特性
- 多波形生成:支持正弦波、方波、三角波三种标准周期信号的生成。
- 实时参数调节:提供全交互式输入界面,支持主频(0.1Hz - 10kHz)、振幅(0V - 100V)、初始相位、采样率(100 - 100k Sa/s)的实时调整。
- 定制化波形控制:专门针对方波提供了1%至99%范围内的占空比可调功能;三角波则实现了高线性的零均值输出。
- 智能示波器闭环显示:模拟示波器触发机制,自动根据频率计算窗口长度,确保始终稳定显示约3个完整周期的波形。
- 自动测量测量:系统能够实时自动计算并更新输出信号的峰峰值(Vpp)和预估周期。
- 数据导出:支持一键将当前显示的离散时间序列和幅值数据导出至MATLAB基础工作区(Base Workspace),便于后续二次分析。
系统要求
- 环境要求:MATLAB R2019a 或更高版本(需支持
uigridlayout 布局管理器)。 - 工具箱要求:无需安装 Signal Processing Toolbox 或其他额外工具箱,系统算法采用原生数学逻辑实现,具有极高的兼容性。
实现逻辑与算法说明
#### 1. 界面架构与交互逻辑
系统主程序采用组件化开发模式。左侧控制面板利用 uigridlayout 容纳各种数值输入框和下拉菜单,右侧通过 uiaxes 模拟示波器屏幕。所有的参数控件均绑定了 ValueChangedFcn 回调函数,每当用户修改任何数值时,程序会立即触发重绘逻辑,实现“即调即显”的零延迟视觉反馈。
#### 2. 核心信号生成算法
系统核心算法完全摒弃了对外部工具箱函数的依赖,采用模运算(Modulo Arithmetic)独立实现了复杂的周期波形生成:
- 离散时间轴构建:通过用户设定的频率 $f$,计算显示周期 $T=1/f$,并根据采样率 $fs$ 在 $[0, 3T]$ 区间内生成等间距的离散点。
- 正弦波逻辑:直接基于三角函数公式 $y = A cdot sin(2pi ft + phi)$ 计算。
- 方波逻辑:利用
mod 函数计算当前相位点在周期内的归一化位置,通过将其与占空比阈值进行逻辑比较,生成正负幅值切换的脉冲信号。 - 三角波逻辑:利用线性绝对值函数
4 * abs(period_pos - 0.5) - 1 对相位归一化序列进行映射,从而获得平滑的线性上升和下降沿,并确保相位与正弦波保持对齐。
#### 3. 示波器渲染与自适应显示
为了模拟真实示波器的观察效果,显示模块包含以下细节:
- 动态量程:垂直轴(Y轴)范围根据振幅自动调整为 $pm 1.2A$,水平轴(X轴)范围随频率反比缩放,确保波形观测的比例始终最优。
- 测量引擎:通过查找序列的最大值与最小值之差实现峰峰值测量。
- 缓存机制:程序定义了全局结构体用于缓存当前时刻生成的
t 轴和 y 轴数据。
#### 4. 数据导出机制
导出模块使用
assignin 函数将仿真产生的内存变量直接注入到 MATLAB 工作区,导出的变量名称分别为
scope_time(时间序列)和
scope_signal(信号序列),支持用户在命令行直接调用
plot 或进行频谱分析(FFT)等操作。
使用方法
- 在MATLAB命令行窗口运行主程序文件。
- 通过左侧面板选择目标波形类型并输入物理参数。
- 观察右侧示波器界面的实时波形变化。
- 查看下方的实时测量参数以获取信号的具体特征。
- 如需保存数据,点击“导出数据至工作区”按钮,随后即可在MATLAB主界面的工作区查看生成的变量。