基于MATLAB的FM语音信号调制与混合仿真系统
项目简介
本项目是一个基于MATLAB开发的完整信号处理仿真平台,专注于展示调频(FM)通信系统中的核心环节。该系统通过代码自动生成模拟音频信号,完整实现了从音频数据采集、预处理、高频FM调制到多场景信号混合的全流程。项目旨在为研究无线电通信原理、频谱分析以及盲源分离(BSS)算法提供一个标准化、可视化的测试基准。
功能特性
- 模拟音频源生成:自动生成包含正弦单音和线性调频(Chirp)成分的WAV语音模拟文件。
- 音频预处理流水线:实现了音频的读取、声道合并、重采样(上采样)及幅度归一化处理。
- 软件无线电FM调制:基于相位积分原理,在时域上实现了基带信号到高频载波(40kHz/60kHz)的调频转换。
- 多模式信号混合:
*
基带线性混合:模拟“鸡尾酒会效应”,通过混合矩阵生成用于盲源分离研究的观测信号。
*
射频叠加混合:模拟无线信道中的多信号空间叠加及干扰。
- 全链路可视化分析:提供原始信号、调制后射频信号及混合信号的时域波形图与FFT频谱图。
系统要求
- MATLAB R2016b 或更高版本
- Signal Processing Toolbox(用于
resample 和 chirp 函数)
使用方法
- 确保MATLAB当前工作目录包含
main.m 文件。 - 在MATLAB命令窗口输入
main 并回车,或直接运行脚本。 - 程序将自动生成临时WAV文件,执行仿真,并在结束后清理临时文件。
- 运行完成后,系统将弹出三个图形窗口,分别展示处理流程的不同阶段。
---
代码实现逻辑详解
本项目的核心逻辑封装在入口函数中,通过以下六个步骤严格执行:
1. 环境初始化
程序首先执行清理操作,清除工作区变量、命令窗口历史及所有已打开的图形窗口,确保仿真环境的纯净。
2. 数据采集与模拟 (Data Acquisition)
为了演示的完整性,代码不依赖外部文件,而是利用辅助函数现场生成两个时长为1秒的WAV文件:
- 信号A:440Hz的标准正弦波,模拟纯音信号。
- 信号B:500Hz至1000Hz的扫频信号(Chirp),模拟频率动态变化的语音成分。
3. 读取与预处理 (Preprocessing)
系统读取上述生成的WAV文件,并执行严谨的预处理流程:
- 声道处理:检测输入信号是否为立体声,若是则取平均值转换为单声道。
- 重采样 (Resampling):将原始44.1kHz的音频信号上采样至200kHz的仿真采样率。这是为了确保奈奎斯特采样定理在高频载波(如60kHz)下依然成立,防止混叠。
- 对齐与截断:强制对齐两路信号的长度,取两者中的较短值。
- 归一化:将信号幅度统一缩放至 [-1, 1] 区间,消除音量差异对调制指数的影响。
4. FM频率调制 (FM Modulation)
系统利用数学公式在时域直接合成FM信号。
- 参数设定:设定两路载波频率分别为 40kHz (fc1) 和 60kHz (fc2),调频灵敏度 $k_f$ 设为 10000 Hz/V。
- 积分实现:根据FM原理公式 $y(t) = A_c cos(2pi f_c t + 2pi k_f int m(tau) dtau)$,代码利用
cumsum 函数对基带信号进行累加近似积分,计算出瞬时相位,进而生成调频波 $y_{fm1}$ 和 $y_{fm2}$。
5. 信号混合仿真 (Signal Mixing)
代码构建了两种不同的混合场景:
- 场景A(基带混合):构建一个 $2times2$ 的混合矩阵 $A_{mix}$,将两路基带信号线性叠加。这模拟了盲源分离(BSS)问题中的观测环境,生成混合音频观测信号。
- 场景B(射频混合):直接将两路已调制的FM射频信号相加。这模拟了真实无线电环境中,多个发射源信号在空中的物理叠加。
6. 可视化分析 (Visualization)
利用FFT技术对各阶段信号进行频域转换,并绘制三个独立的图形窗口:
- 窗口1:展示重采样后的原始基带信号的时域波形及其对应的频谱,验证信号源特性。
- 窗口2:展示FM调制信号。为了看清高频载波细节,时域图仅截取了前0.005秒的数据;频谱图清晰展示了载波频率中心及其边带。
- 窗口3:展示混合后的结果。包括用于BSS算法输入的线性混合波形,以及射频叠加后的混合频谱。
---
关键算法与函数分析
信号生成与文件模拟
create_test_wav_files 函数封装了数据生成逻辑。它利用
sin 函数生成稳态信号,利用
chirp 函数生成非平稳信号,并使用
audiowrite 模拟实际的音频文件写入过程,真实还原了“基于文件I/O”的系统输入环节。
相位积分调制算法
在MATLAB中实现FM调制时,直接使用相位累加是比调用工具箱函数更底层的实现方式。代码通过
cumsum(x) / fs 近似模拟数学上的积分 $int m(t) dt$。这种方法能够精确控制调频灵敏度,并且直观地展示了FM信号本质上是相位随基带信号积分而变化的恒包络信号。
频谱分析工具
plot_spectrum 辅助函数实现了一个标准的单边频谱计算流程。
- FFT变换:计算信号的快速傅里叶变换。
- 幅度修正:计算双边谱模值 $P2$,截取一半得到单边谱 $P1$。
- 能量守恒处理:将直流分量和奈奎斯特频率之外的频率幅值乘以2,以保持信号总能量不变。
- 频率轴映射:根据采样率 $f_s$ 和信号长度 $L$ 构建真实的频率坐标轴,确保频谱图横坐标单位为Hz,而非归一化频率。