频分复用与时分复用MATLAB仿真:从原理到代码实现

发布时间:2026/9/6 18:40:01
频分复用与时分复用MATLAB仿真:从原理到代码实现 简介这是一份上海大学2013—2014学年冬季学期“通信原理”课程项目报告核心内容是频分复用FDM与时分复用TDM系统在MATLAB环境下的仿真实现。报告以高斯信道中的频带传输为背景在FDM部分详细讲解了频谱搬移技术给出了将三段自定义音频分别调制至4K、8K、12K频带再经带通滤波发送、接收端相干解调和低通滤波恢复的完整仿真链路并配有GUI界面展示各阶段波形与频谱。TDM部分则基于抽样定理以矩形脉冲、正弦波和锯齿波为三路输入通过时间分配器合并与分离信号同时分析了位同步、帧同步对解复用质量的影响并指出同步信号应从接收端恢复这一改进方向。资源为单个docx文档大小1.06MB内含仿真模型图、波形截图和设计总结可直接用作课程设计、期末项目或通信原理实验的参考。目前已有268人学习浏览适合需要完整MATLAB仿真思路与报告撰写范例的通信工程学生使用。 通信原理这门课里频分复用FDM和时分复用TDM几乎是绕不开的两座山。很多同学期末拿到的课程设计题目就叫“频分复用、时分复用系统MATLAB仿真”光听名字挺唬人拆开看其实就两件事一是让多路信号同时挤上一条信道往前传二是在接收端把它们再分开、还原成原始信号。这篇文章就按我自己做这个项目时的完整思路来写从环境准备、频率规划、代码实现到报告里怎么写图表、答辩被老师追问哪些问题一步一步给你理清楚代码可以直接照着跑跑完再改一改参数整个项目就变成你自己的了。做这个仿真最大的误区是一上来就闷头写代码。我见过太多同学对着空白的编辑器发呆半小时最后从网上抄一份自己都看不懂的程序答辩时被问两句就露馅。实际上这个项目的核心不是“写代码”而是“理解流程”发送端做了什么信道里是什么样接收端怎么还原。把这套逻辑通了代码只是翻译罢了。1. 先把任务看懂你要交付的到底是什么1.1 两种复用方式的本质区别频分复用就是把几路信号搬到不同频率的载波上让它们在频谱上错开、互不重叠然后同时发送。生活里最典型的例子就是广播电台不同电台频率不同你拧收音机的旋钮本质上就是在做带通滤波。时分复用则恰好相反它让几路信号轮流占用同一个信道在时间轴上把资源切成一小段一小段。可以想象一个老师面对三个学生提问三个人轮流发言同一时刻只有一个人在说话但整体看这三个人的声音都完整传递出去了这就是时分复用的朴素形态。在MATLAB仿真里我们要做的就是把这两套流程都走一遍先生成多路基带信号然后用调制或交织的方式把它们“复用”成一路复合信号再把它送进模拟信道最后在接收端做分路和解调把原始信号还原出来。你交付的内容并不是一个孤立的波形图而是一整套可以解释、可验证的通信链路。1.2 课程设计任务的验收点拆解这类题目挂的是“仿真”两个字但老师真正验收的其实是四个环节多路输入信号是否清晰可辨幅度、频率、时长都有明确设定复用后的复合信号是否呈现预期的特征——FDM信号在频谱上应该有多个明显的谱峰TDM信号在时域上应该有明显的“切片”结构接收端的处理链路是否完整——FDM有带通滤波、解调、低通滤波TDM有解交织、插值重建每一步都要有对应的图或代码恢复信号与原始信号的对比结果无论是波形重叠对比还是均方误差数值都能量化说明“还原成功”。如果这四样都齐了课程设计的骨架就算搭完了。剩下的图表美化、文字说明只是把骨架包装得更好看。1.3 建议的实施顺序我的建议是先做FDM再做TDM。原因很简单FDM里面涉及滤波器设计、频谱分析、调制解调这些是通信原理的核心基本功一旦FDM做通了你对“带宽”“滤波”“频谱搬移”这些抽象概念会有非常直观的理解。而TDM在MATLAB里说白了就是数组的重新排列代码量小但逻辑更考验你对时间离散化的理解。2. 仿真环境准备MATLAB版本与工具箱怎么选2.1 版本和工具箱要求我自己用的是MATLAB R2020b理论上R2016b以上的任何版本跑下面这套代码都没问题。核心依赖是Signal Processing Toolbox里面的butter、filtfilt这些滤波函数。学校机房一般装的是完整版License该有的工具箱都有。如果你没有完整的工具箱代码也未必跑不了。最简单的验证方式是打开MATLAB之后在命令行里敲一行b butter(4, 0.1);如果没有任何报错那滤波器工具箱就是可用的。如果报“未定义函数”说明工具箱缺失这时候有两条路一是换用Octave它是MATLAB的开源替代品语法几乎一致装了signal包后大部分代码都能跑二是在MATLAB里自己写一个简单的FIR滤波器函数也能绕过butter的依赖后面第3节我提到这个问题时会给出替代思路。2.2 一个快速自检脚本环境配好之后我建议先跑一个最小程序确认图形和计算功能都正常Fs 1000; t 0:1/Fs:1; plot(t, sin(2*pi*5*t)); grid on;能画出正弦波说明环境没问题。接下来就可以进入正题了。3. FDM仿真的完整实现从频率规划到解调一条龙3.1 频率规划为什么三个载波选50、100、150HzFDM的关键是设计好各路信号的频率位置既要保证它们互不干扰又要让载波频率与基带信号频率拉开足够距离。我设计了三路信号参数如下信号基带频率载波频率调制方式第1路3 Hz50 HzAM-DSB第2路7 Hz100 HzAM-DSB第3路9 Hz150 HzAM-DSB这套参数是仔细算过的。先说基带频率3Hz、7Hz、9Hz之间有一定间隔但整体都在10Hz以下这样三路基带信号的频谱本身就错开了方便观察。再说载波间隔相邻载波间隔50Hz而基带信号经过幅度调制后会产生两个边带分别是载波频率加减基带频率。以第1路为例它的双边带范围大约是47Hz到53Hz第2路的双边带范围是93Hz到107Hz两者之间有接近40Hz的保护间隔滤波时能干净地分开。采样率取1000Hz也很讲究。奈奎斯特采样定理要求采样率至少是信号最高频率的两倍这里的最高频率是第三路的上边带159Hz理论上320Hz就够。我取1000Hz一方面让波形画出来很平滑另一方面在离散频谱上每个频率分量都能落在整数的频率分辨单元上频谱图看起来干净利落。3.2 调制与合路把信号“搬到”不同频率上生成三路基带信号并完成幅度调制代码非常短Fs 1000; % 采样率 t 0:1/Fs:1; % 1秒时长 N length(t); % 三路基带信号频率分别为3Hz、7Hz、9Hz m1 sin(2*pi*3*t); m2 sin(2*pi*7*t); m3 sin(2*pi*9*t); % 三路载波信号 fc1 50; fc2 100; fc3 150; c1 cos(2*pi*fc1*t); c2 cos(2*pi*fc2*t); c3 cos(2*pi*fc3*t); % 幅度调制并叠加为复用信号 st m1.*c1 m2.*c2 m3.*c3;这一段的重点在于理解st到底是什么。它把三路已经搬到不同频段的信号直接相加就模拟了三路信号共享一个信道的场景。你可以用sound(st, Fs)听听这个复合信号会听到混合在一起的声音。这种直观体验对理解复用很有帮助——听起来像噪声的复合信号里其实藏着一路3Hz的低频震颤、一路7Hz的嗡嗡声和一路9Hz的高音只不过耳朵分不开罢了。频谱上使用FFT画出st的幅度谱会看到三个清楚的峰值簇。这正是频分复用“在频率上错开”的直接证据。3.3 分路与解调带通滤波、解调、低通滤波三板斧接收端的核心工作是把复合信号里的三路分别捞出来然后还原。我以恢复第1路为例完整流程分三步。第一步是带通滤波让复合信号只通过第1路所在的频段[b_band, a_band] butter(4, [45 55]/(Fs/2), bandpass); y1 filtfilt(b_band, a_band, st);这里把带通范围设置成45到55Hz正好罩住第1路信号的47到53Hz双边带同时又不会吃到第2路的93到107Hz。注意butter函数里的频率需要用归一化频率也就是实际频率除以奈奎斯特频率Fs/2这是新手最容易犯的错误。第二步是相干解调。把滤波后的信号再乘以一个与发送端相同频率的载波demod1 y1 .* cos(2*pi*fc1*t);这一步的数学原理是三角函数积化和差信号乘以载波之后原来在50Hz附近的频谱会同时搬移到0Hz附近和100Hz附近。也就是说我们想要恢复的原始信号出现在直流和低频段了但同时会残留一个100Hz附近的镜像分量需要第三步处理。第三步是低通滤波把解调后的高频残留滤掉[b_lp, a_lp] butter(4, 15/(Fs/2), low); m1_rec 2 * filtfilt(b_lp, a_lp, demod1);这里低通截止频率取15Hz因为原始基带信号最高才9Hz15Hz足够让信号无损通过又能把50Hz以上的残余全部压掉。乘2是为了补偿幅度——模拟乘法器处理后信号幅度只剩原来的一半低通滤波救不回来所以要在最后补回来。第2路、第3路的恢复完全同理只需要把带通范围换成[95 105]/(Fs/2)和[145 155]/(Fs/2)解调载波换成100Hz和150Hz即可。3.4 效果检验用波形对比和MSE量化还原质量代码跑完不能只看“像不像”我习惯用两条线同时画图来对比原始信号和恢复信号figure; plot(t, m1, b); hold on; plot(t, m1_rec, r--); legend(原始信号, 恢复信号); xlabel(时间/s); ylabel(幅度); title(第1路信号还原对比); grid on;如果两条线几乎重合说明这套流程是成功的。为了在报告里给出量化指标可以计算均方误差MSE1 mean((m1 - m1_rec).^2);正常参数下MSE应该非常小小到1e-4量级。如果MSE偏大先用眼睛判断是幅度偏移还是波形畸变。幅度整体偏小检查是否忘了乘2波形边缘有振荡检查滤波器阶数和截止频率是否合适。这个排查思路后面第6节还会详细展开。4. TDM仿真的完整实现核心在于“交织-解交织”4.1 TDM的系统模型把时间切成片TDM在MATLAB里的实现比FDM更抽象因为它不涉及载波和频带搬移核心操作是在时间上交错采样。假设我们有两路信号s1和s2每路都在每隔固定的时间点采样一个值。发送端输出的复合信号就像把两副扑克牌交叠洗在一起第一张来自s1第二张来自s2第三张又来自s1第四张来自s2……接收端拿到这副“洗过的牌”之后按位置拆回两副牌再插值恢复出连续波形。有个细节特别值得在写报告时强调时分复用之后每一路信号的等效采样率其实是原来的一半。如果原始采样率是1000Hz两路TDM交织后每一路实际的样本间隔变成2毫秒等效采样率降为500Hz。只要这个等效采样率依然满足奈奎斯特条件恢复就不会有问题。这也是为什么我建议TDM的基带信号频率不要设太高——信号频率一两百赫兹的话500Hz等效采样率还能勉强应付再高频就恢复不出原来的样子了。4.2 交织与解交织的MATLAB实现直接上完整代码Fs 1000; t 0:1/Fs:1; % 两路信号 s1 sin(2*pi*3*t); s2 sin(2*pi*7*t); % 发送端交织将两路样本交替排列成一串 tdm_signal reshape([s1; s2], 1, []); % 接收端解交织按奇偶位置拆回两路 s1_recv tdm_signal(1:2:end); s2_recv tdm_signal(2:2:end); % 重建时间轴并插值恢复连续信号 t_odd t(1:2:end); t_even t(2:2:end); s1_interp interp1(t_odd, s1_recv, t, spline); s2_interp interp1(t_even, s2_recv, t, spline);核心就一行reshape([s1; s2], 1, [])。s1; s2构成一个两行的矩阵第一行全是s1的样本第二行全是s2的样本reshape之后MATLAB按列读取于是第一列的两个值变成了s1(1), s2(1)第二列变成了s1(2), s2(2)天然完成了交替排列。接收端解交织更简单用步长为2的索引就能分别取回奇数和偶数位置的样本。interp1的作用是把离散样本重新插值成时间轴上的连续波形。我用了spline三次样条插值因为原始信号是平滑正弦波样条插值的曲线比默认的线性插值更接近原波形。如果你在实际仿真中发现恢复波形出现折线感优先检查是不是用了线性插值或者等效采样率偏低。4.3 结果观察时域“切片”与恢复波形跑完代码我建议画三个子图原始s1和s2、交织后的tdm_signal、恢复出的s1和s2。交织后的波形最有意思——它看起来像某一帧信号被快速切换了两条源通道峰值形态一会儿像3Hz一会儿像7Hz这就是“时分复用”在时域上的直观表现。恢复波形与原始波形重合度依然很高因为两路原始信号频率分别为3Hz和7Hz等效500Hz采样率对这个频段实在太宽裕了。你可以把信号频率改成100Hz和150Hz再跑一次恢复效果会变差但这个过程恰恰证明了“时分复用也有带宽约束”这个理论结论。把这个对比实验写进报告里属于典型的加分操作。5. 这样写课程设计报告老师看了都点头5.1 图表排列顺序有讲究我审过不少实验报告一个常见问题是图摆了一堆顺序混乱读的人根本对应不上哪张图是哪个环节。建议按照“发送端—信道—接收端—对比验证”这条主线排图第一张图原始三路基带信号的时域波形让老师一眼看清输入是什么第二张图FDM复用后复合信号的频谱三个峰清晰排列直接说明“频分”成功第三张图带通滤波后某一路的频谱说明“频分”可以被逆操作第四张图解调恢复信号与原始信号的对比图TDM部分同样按“原始波形—交织后波形—解交织恢复波形”排列。每张图都要有xlabel、ylabel、title、legend坐标轴范围要调好不要出现曲线跑到图外的情况。这些细节做好了报告的专业程度能上一个台阶。5.2 结论部分怎么写很多同学的结论写着“本实验验证了FDM和TDM的可行性”这句话太空洞。要往里面填数值和现象例如“从复合信号频谱可见三路信号分别以50Hz、100Hz、150Hz为中心形成三簇频谱分量各簇之间保留约40Hz保护间隔未出现重叠。带通滤波后仅保留目标频段分量滤除其余两路信号。恢复信号与原始信号的均方误差为X波形重合度较高验证了频分复用系统中滤波器设计与相干解调的正确性。”这样一段话既讲了现象又给了数据还涉及了设计原理比空喊“可行性”有说服力得多。5.3 答辩高频问题清单老师问到FDM部分大概率会问三件事为什么载波间隔要这么大带通滤波器参数怎么选的如果两路信号频谱重叠了会怎样。第一个问题用“保护间隔避免边带重叠”来答第二个问题直接说按双边带范围计算的第三个问题答“会出现相邻信道干扰导致恢复信号混叠无法正确还原”。问到TDM部分最经典的问题是“TDM和FDM各自的优缺点”。可以从带宽利用率和实现复杂度两个角度答TDM实现简单只需时间切片但要严格同步FDM不需要严格同步但滤波器成本高、频谱利用率相对较低。6. 排坑实录最容易翻车的大个细节6.1 典型故障与解决方案对照现象根本原因解决办法解调后波形整体幅度偏小且不随信号变化忘了补偿调制损失的一半幅度低通滤波后乘2恢复信号出现高频“毛刺”低通截止频率偏高没有滤干净镜像分量把低通截止频率从25Hz降到15Hz波形两端有明显畸变滤波器初始瞬态效应任何数字滤波都有观察时取中间段或者用filtfiltFDM恢复信号混有另一路信号的声音带通滤波器带宽过宽相邻信道频谱泄漏进来收紧带通窗口或增大载波间隔TDM恢复波形呈折线插值方式不对或等效采样率不足改用spline插值降低信号频率FFT频谱图峰值不明显频率坐标换算错误或者没有截取单边谱确认f_axis (0:N-1)*Fs/N6.2 两个让实验效果更好的技巧第一个技巧是用filtfilt代替filter。filter是普通IIR滤波会带来相位失真导致恢复波形相对原始波形出现偏移filtfilt是零相位滤波正向反向各滤一次相位完全无失真波形重合度在肉眼上几乎完美。同样的滤波器参数用filtfilt出来的对比图会漂亮很多。第二个技巧是把正弦信源换成带限随机信号。正弦波太规则恢复时哪怕有点误差波形看起来依然“差不多”换成随机信号后任何一点失真都会在波形对比中暴露无遗这能逼着你把滤波器设计做严谨。同时随机信号更接近真实通信中的业务信号答辩时老师问“你的信源是什么”你可以理直气壮地说“用随机序列模拟实际数字基带信号”印象分会好很多。结尾一句实在话做这个仿真项目我最大的体会是真正拉开差距的不是你背了多少代码模板而是你对“复用”这个行为有没有自己的理解。FDM和TDM的代码都不过几十行关键在于你能否在调试报错时立刻判断出是频率规划的问题、滤波器参数的问题还是采样率设置的问题。这种排查能力才是通信原理课程想让你带走的东西。最后再分享一个可以继续深挖的方向在复合信号里加一点高斯白噪声比较FDM和TDM在噪声环境下的恢复效果。你会发现带通滤波本身就有抗噪声能力而TDM的恢复质量则取决于插值和等效采样率。这个实验做完你的报告深度就远超课程平均线了。本文还有配套的精品资源点击获取