资讯动态

基于Simulink的2ASK与2FSK调制解调仿真:从原理到参数配置

发布时间:2026/10/15 13:17:12 来源:尧图企业网站定制
简介基于Simulink的2ASK与2FSK调制解调仿真系统是一份面向通信工程专业学生与科研人员的数字调制技术学习资料聚焦二进制幅度键控与二进制频移键控的建模、仿真及性能分析。资料包内包含1个doc文档压缩包大小仅1.32MB文档结构清晰从调制原理、功率谱特性到Simulink仿真模型搭建均有系统讲解并给出伯努利随机数发生器、DSB AM调制解调器、M-FSK模块及AWGN信道等关键参数设置同时配有仿真框图与结果波形便于对照实验。读者可借此理解2ASK通断控制与2FSK双载频切换的机制掌握误码率、带宽效率等指标的分析方法进而为实际无线通信系统选择调制方式提供参考。文档还完整展示了两种调制方式的仿真设计与分析过程对通信原理课程设计、毕业设计及工程入门均有直接的借鉴价值。该资源已有1832人学习下载适合需要快速上手数字调制仿真的本科高年级学生及工程技术人员。1. 基于 Simulink 的 2ASK 与 2FSK 调制解调仿真为什么这套链路值得照着搭一遍在通信原理课设里“基于 Simulink 的 2ASK 与 2FSK 调制解调仿真系统”是出现频率最高的一类题目。看起来只要拖几个模块、点几下运行就能出波形实际搭起来才会发现光是模块选型、载频设置和信噪比取值就能让仿真结果完全变样。这份资料做的事情很直接把 2ASK 和 2FSK 两套调制解调链路在 Simulink 里完整搭出来用伯努利随机数产生器当信源DSB AM 通带调制模拟幅度键控M-FSK 基带调制模拟频移键控中间各放一个 AWGN 信道制造噪声环境。适合正在做课设、毕设或者第一次碰 Communications Toolbox 的读者照着复现也适合那些想让频谱仪波形、示波器波形和理论公式对得上号的从业者快速定位参数。2. 先把原理拆成参数2ASK 的带宽翻倍与 2FSK 的单双峰条件2.1 幅度键控本质是载波开关DSB AM 模块为什么能直接当 OOK 用2ASK 的物理含义不复杂码元为 1 时载波接通码元为 0 时载波断开接收端根据载波的有无还原数字信号。写成表达式就是 s_ASK(t) m(t)·cos(2πf_c t)其中 m(t) 取 0 或 1。这个式子从数学上看就是乘法器从 Simulink 模块上看就是通带 DSB AM 调制器。这里有个容易被忽略的对应关系Simulink 的 DSB AM Modulator Passband 模块有一个 Input offset 参数。当 Input offset 设为 0 时模块输出就是 m(t)·cos(2πf_c t)m(t) 为 0 时输出为 0正好实现“通断”效果等效于 OOK 调制。如果把这个 offset 改成 1输出变成 [1 m(t)]·cos(2πf_c t)此时载波分量一直存在变成大载波 AM频谱里会多出一根很明显的载波谱线。原文档直接用 DSB AM 调制器做 2ASK说明建模时采用的是抑制载波模式也就是把 DSB AM 当乘法器用不是传统意义上带直流偏置的调幅。功率谱密度方面2ASK 信号由连续谱和离散谱两部分构成。连续谱来自基带脉冲波形经线性调制后的搬移离散谱来自载波分量本身。无论哪种情况已调信号带宽都是基带脉冲波形带宽的两倍。例如基带码元速率 R_b 1000 bps 时基带主瓣带宽是 1 kHz2ASK 通带主瓣带宽就是 2 kHz。这个“二倍”关系直接决定后面频谱仪的观测范围设置。2.2 频移键控是双振荡源切换用 Carson 公式反推频率分离2FSK 用两个不同频率 f1 和 f2 分别代表数字 1 和 0数字信号控制两个独立振荡源交替输出。原文档给出的带宽公式是 B 2ΔF 2F_b其中 ΔF 是最大频偏F_b 是基带信号带宽。工程上更常用的是 Carson 近似公式B ≈ |f_1 - f_2| 2R_b这两个公式描述的是同一件事2FSK 带宽等于“两个载频的间隔”加上“基带信号带宽的两倍”。比如 R_b 1000 bpsf1 2000 Hzf2 4000 Hz那么频偏是 2 kHz总带宽约 4 kHz。和 2ASK 相比2FSK 在同样码速率下占用带宽更宽频带利用率更低这是原文档里“2FSK 信号带宽 B 较大频带利用率小”这句话的由来。更关键的是功率谱的单双峰条件。2FSK 功率谱的离散谱出现在 f1 和 f2 两个位置上连续谱通常呈现双峰。如果两个载频之差 |f1 - f2| 小于等于码元速率 R_b双峰就会合并成单峰。一旦变成单峰接收端解调器很难区分两个频率误码率会急剧上升。所以搭建模型时频率分离度的下限是码元速率工程上一般取 1.5 到 2 倍 R_b 比较稳妥。原文档中的 M-FSK 调制器 Frequency separation 参数填的就是 |f1 - f2|。Rb 1000; % 码元速率 1 kbps f1 2000; % 代表码元 0 的载频 f2 4000; % 代表码元 1 的载频 dF abs(f2 - f1); % 频偏 2 kHz B_fsk dF 2 * Rb; % Carson 带宽近似 4 kHz fprintf(2FSK 占用带宽约 %.0f Hz\n, B_fsk); % 判定双峰是否还能区分 if dF Rb fprintf(警告: 频偏过小连续谱将合并为单峰\n); else fprintf(频偏为码速率 %.1f 倍双峰可分辨\n, dF / Rb); end这段脚本的价值在于把参数和物理现象绑定先算带宽再判单双峰。实际搭模型时我会先把 R_b、f1、f2 三个值写进这个脚本跑一遍确认频偏倍数足够大再动模块。很多翻车现场都是因为 f1 和 f2 取得太近频谱图上只有一个峰还以为是模块接错了。2.3 为什么两套模型一个走通带、一个走基带原文档的 2ASK 链路用 DSB AM Modulator Passband2FSK 链路用 M-FSK Modulator Baseband这里体现了 Simulink 仿真里两类完全不同的信号表示方式。通带调制的输出是真值实信号信号频率集中在载频 f_c 附近频谱以 f_c 为轴对称。这种表示贴近实际射频信号适合直接观察载波通断效果缺点是要用小步长仿真以免载波波形失真计算量偏大。基带调制则用复包络表示M-FSK Modulator Baseband 输出的是复数基带信号没有真实载波只有频率偏移。这样采样率可以大幅降低仿真更轻量还能直接接 AWGN Channel 的复基带输入模式。代价是信号是复数的示波器上直接看往往是一团复杂的实部虚部曲线需要做 Real-Imag to Complex、数据格式转换等处理。原文档中 2FSK 链路出现“Real-Imag to Complex”和“sine wave”模块正是这两类信号差异在模型层面的体现。由此引出一个建模习惯能走基带的调制方式优先走基带必须在频域上展示真实载波的才走通带。2ASK 用通带是为了把载波通断这个特征看得清楚2FSK 用基带是为了避免两个载频同时仿真导致步长过小、模型跑不动。搞清楚这个选型逻辑后面调参就不会乱。3. 2ASK 链路搭建模块顺序、关键参数与 set_param 快速配置3.1 模型拓扑先行从 Bernoulli 到 Compare to Constant 的一整条线2ASK 仿真链路不是把所有模块拖进去就完事连接顺序决定了信号流是否正确。原文档给出了一条典型链路伯努利二进制随机数产生器 → 频谱仪 → DSB AM 调制器 → AWGN 信道 → DSB AM 解调器 → 速率转换器 → 示波器接收端再挂一个常数比较器做判决。对应到具体模块如下表。序号模块名Simulink 库位置作用1Bernoulli Random Binary GeneratorCommunications Toolbox / Comm Sources产生 0/1 等概随机基带信号2Spectrum ScopeDSP System Toolbox / Sinks显示调制前后信号频谱3DSB AM Modulator PassbandCommunications Toolbox / Analog Passband Modulation实现载波通断等效 OOK4AWGN ChannelCommunications Toolbox / Channels为信号叠加高斯白噪声5DSB AM Demodulator PassbandCommunications Toolbox / Analog Passband Modulation相干解调恢复基带包络6Rate TransitionSimulink / Signal Attributes适配不同采样率的数据流7ScopeSimulink / Sinks显示基带、调制、解调波形8Compare to ConstantSimulink / Logic and Bit Operations对解调包络做阈值判决这里说明一下原文档里的库路径是早期版本的命名方式R2020a 之后的版本模块位置有所调整但模块名基本没变直接按模块名搜索即可。Rate Transition 和 Compare to Constant 是这套链路里最容易出问题的两个模块后面避坑章节会专门展开。3.2 参数先算再填载频、码速率与步长的联动关系2ASK 链路参数设置的难点不在模块本身在参数之间的联动。码元速率决定基带带宽载波频率必须远大于码元速率才能看到清晰的通断包络仿真步长又必须足够小才能还原载波波形。三个参数互相制约不能单独乱填。参数项推荐值设定理由码元速率 R_b1000 bps基带主瓣带宽 1 kHz便于频谱观测载波频率 f_c10000 Hz取码速率 10 倍通断包络清晰可见载波幅度1归一化幅度方便计算信号功率Input offset0抑制载波实现真正的 OOK 通断AWGN SNR-6 dB原文档设定值噪声明显但不至于完全淹没仿真时长0.01 s包含 10 个码元足够观察统计特性最大步长 MaxStep5e-6 s载波周期为 1e-4 s每个载波周期至少 20 步载频为什么取码速率的 10 倍而不是 3 倍如果载频和码速率接近通带频谱会和基带频谱重叠示波器上看到的包络也不干净解调时更难分离。10 倍是一个兼顾清晰度和仿真速度的经验值。步长方面载波频率 10 kHz 对应的周期是 0.0001 s最大步长取 5e-6 s 意味着每个载波周期被切成 20 步波形足够平滑如果步长大于载波周期的十分之一载波会严重失真调制波形看起来像被削过。3.3 set_param 批量配置脚本写一次换参数不再手抖在 Simulink 模型里手动点参数面板容易漏项我更习惯用 MATLAB 脚本批量 set_param参数一目了然改起来也快。以下脚本假设模型名是 ask_sim并且各模块已按 3.1 的表拖放完毕。mdl ask_sim; open_system(mdl); % 全局仿真设置时长 0.01 s最大步长 5e-6 s set_param(mdl, StopTime, 0.01, MaxStep, 5e-6); % 1) 伯努利随机数产生器0/1 等概每 1 ms 输出一个比特 set_param([mdl /Bernoulli Random Binary Generator], ... Probability, 0.5, ... SampleTime, 1e-3); % 2) DSB AM 调制器载波 10 kHz幅度 1无直流偏置 set_param([mdl /DSB AM Modulator Passband], ... CarrierFrequency, 10000, ... CarrierAmplitude, 1, ... InputOffset, 0); % 3) AWGN 信道SNR -6 dB按信号功率 1 处理 set_param([mdl /AWGN Channel], ... SNR, -6, ... SignalPower, 1, ... Mode, Signal to noise ratio (SNR)); % 运行仿真 sim(mdl);代码逻辑不复杂核心是让脚本和模块名严格对应。注意模块名必须和模型里显示的名字一字不差如果手动改过标签脚本里的路径也要同步改。Probability 设为 0.5 保证 0/1 等概这样频谱上不会出现明显的直流偏置功率谱更接近理论形态。SNR 模式一定要显式设成 Signal to noise ratioSimulink 里 AWGN Channel 默认可能是 Eb/N0 模式两个模式的物理含义完全不同这一点极容易踩坑。3.4 结果判读频谱 CH1/CH2 的对照关系与“信道延迟”真相仿真跑完后频谱仪上的 CH1 是调制前基带信号频谱CH2 是 2ASK 调制后的通带信号频谱。对照理论基带频谱呈 sinc 形状第一零点大约在 ±1 kHz 处调制后频谱中心搬到 10 kHz 附近整体带宽约 2 kHz是基带带宽的两倍。如果看到调制后的频谱中心不在 10 kHz基本可以确定载频参数没生效或者求解器步长过大导致频谱泄漏。示波器三个窗口分别显示原始基带、调制通带信号和解调波形。原文档提到“信道有一定的延迟”这个延迟的真相是信号经过 DSB AM 解调器的内部滤波器会产生相位延迟Rate Transition 在做采样率转换时也会引入缓存延迟两者叠加后在示波器上看起来就像整体平移了一段。这属于正常现象后续做误码率统计时必须先做对齐否则误码率会虚高。4. 2FSK 链路搭建M-FSK 的 M、频偏与复数基带连接4.1 为什么 2FSK 用 M-FSK 基带调制而不是两个正弦波切换有人会想2FSK 不就是两个不同频率的振荡源交替输出吗直接在 Simulink 里放两个 Sine Wave用开关按基带信号切换不就行了理论上可以实操上全是坑。两个正弦源相位不连续切换瞬间会产生毛刺在频谱上表现为宽带泄漏切换逻辑用 Switch 模块实现时还要处理布尔信号和浮点信号的类型匹配模型难看且难调。M-FSK Modulator Baseband 模块把这一切封装好了。它接受整数符号 0 到 M-1M 设为 2 时就是 2FSK内部完成符号到频率的映射并且采用连续相位调制切换过程平滑不会产生额外的频谱毛刺。这就是原文档 2FSK 链路选择 M-FSK 基带调制模块的根本原因。4.2 参数怎么定M2FrequencySeparation 至少等于码元速率M-FSK 调制器最关键的两个参数是 M 和 FrequencySeparation。M 决定调制进制数取 2 就是 2FSK。FrequencySeparation 对应两个相邻频率的间隔也就是 |f1 - f2|单位是 Hz。按照第 2 章的结论这个值必须大于码元速率推荐取 2 倍码元速率。码元速率 1 kHz 时频偏设 2 kHz 比较理想双峰清晰可辨带宽增加也不夸张。如果设成 500 Hz小于码元速率频谱立刻合并成单峰解调器无法区分两个频率。SamplesPerSymbol 参数决定每个符号周期内输出多少个采样点。这个值影响频谱分辨率和仿真速度取 8 到 16 即可。它和 MaxStep 的关系需要留意码元速率 1 kHz 时符号周期 1 msSamplesPerSymbol 取 8则调制器输出采样率是 8 kHz模型全局步长必须小于等于 1/8000 s 才能完整捕获每个采样点。4.3 复数基带的特殊连接顺序Real-Imag to Complex 与 AWGN 输入模式2FSK 链路和 2ASK 最大的不同是信号形式。M-FSK Modulator Baseband 输出是复数基带信号AWGN Channel 要接收这种信号必须把输入处理模式切到 Complex baseband。原文档中的 Real-Imag to Complex 模块正是用来处理复数信号的拆分与组合常见做法是把调制器输出的实部和虚部分开观察或者在连接示波器前把复数信号转换为实部信号。具体连接顺序为伯努利随机数产生器 → M-FSK 调制器 → AWGN 信道 → M-FSK 解调器 → 示波器。如果需要在频谱仪上观察信号频谱需要把复数信号送入 Spectrum Scope它会自动处理复数输入的功率谱计算。sine wave 模块在这个链路里通常不是必需的如果用了一般是作为参考载波或频谱校准用途参数保持默认即可。4.4 set_param 配置脚本频偏、信噪比与复基带模式一次设齐以模型名 fsk_sim 为例配置脚本如下。mdl fsk_sim; open_system(mdl); % 全局设置仿真时长 0.02 s最大步长 1e-5 s set_param(mdl, StopTime, 0.02, MaxStep, 1e-5); % 1) 信源0/1 等概码元周期 1 ms set_param([mdl /Bernoulli Random Binary Generator], ... Probability, 0.5, ... SampleTime, 1e-3); % 2) M-FSK 调制器M2频偏 2000 Hz2 倍码速每符号 8 个采样点 set_param([mdl /M-FSK Modulator Baseband], ... M, 2, ... FrequencySeparation, 2000, ... SamplesPerSymbol, 8); % 3) AWGN 信道SNR-3 dB必须指定为复数基带输入 set_param([mdl /AWGN Channel], ... SNR, -3, ... InputProcessing, Complex baseband, ... SignalPower, 1); sim(mdl);脚本里的 InputProcessing 参数是复数基带链路能否跑通的分水岭。如果这里保持默认的 Real basebandAWGN 信道只处理实信号复数信号的虚部会被直接丢弃解调器收到的信号缺了一半误码率不堪入目。SignalPower 设为 1 是为了匹配 SNR 的计算基准如果实际信号功率偏离 1必须在调制器输出端用方差测量模块测一下真实功率再填进去。4.5 看结果时重点看两处谱峰间隔与解调波形延迟2FSK 仿真结果的频谱图上CH1 是基带信号功率谱CH2 是调制后信号的功率谱。调制谱上最显眼的特征是在 f1 和 f2 两个位置出现离散谱线两根谱线之间的间距就是 FrequencySeparation。用上文的参数设置两根谱线间隔应该是 2000 Hz双峰形态清晰。如果两根谱线挨得太近甚至合并说明频偏设置过小回到 4.2 修改即可。示波器三个窗口的波形中解调信号相对原始基带同样存在延迟。这个延迟除了来自解调器滤波器和 Rate Transition 之外还多了 M-FSK 调制器内部连续相位累积的影响。在码元速率 1 kHz、频偏 2 kHz 的条件下延迟通常在一个符号周期以内问题不大。真正需要注意的是解调器输出的数据类型M-FSK Demodulator Baseband 输出的是整数符号估计直接连示波器没问题但如果要连其他数值模块可能需要先做数据类型转换。5. 避坑指南波形错乱、频谱单峰、噪声失效的五个高频问题5.1 现象解调波形整体右移一大段看起来像丢码仿真后发现解调波形比原始基带慢了好几个码元周期示波器上对不齐误码率统计也异常偏高。原因信号链路里有多个模块会引入延迟。DSB AM 解调器内部有滤波器Rate Transition 在缓存模式下会积累整段数据再输出M-FSK 解调器也有内部状态。多个延迟叠加后示波器上就是明显的“整体平移”。解决先确认延迟量在示波器上用游标读出解调波形第一个跳变沿相对原始基带的时间差。然后调整对齐方式常见做法是在原始基带路径上也添加同样长度的延迟模块做补偿或者直接使用 Communications Toolbox 里的 Error Rate Calculation 模块自带的 Receive delay 参数把这个延迟值填进去仿真结果即可对齐。5.2 现象2FSK 频谱双峰消失变成一大坨单峰误码率飙升频谱仪上应该出现的两根离散谱线不见了整个频谱只有一个宽峰解调输出全是错误符号。原因FrequencySeparation 参数值小于等于码元速率。按第 2 章的结论|f1 - f2| ≤ R_b 时连续谱合并为单峰接收端无法区分两个频率误码率自然失控。解决打开 M-FSK Modulator Baseband 参数面板把 FrequencySeparation 改为码元速率的 1.5 到 2 倍。码元速率 1 kHz 时至少设 1500 Hz推荐 2000 Hz。改完重新运行频谱双峰就会恢复。5.3 现象AWGN 的 SNR 填了但波形和频谱看不出任何噪声在 AWGN Channel 里明明设置了 SNR但示波器上调制波形依然光滑频谱也干净得不像有噪声。原因AWGN Channel 有两种工作模式Signal to noise ratio (SNR) 和 Eb/N0。如果停留在 Eb/N0 模式却没有正确填写 Symbol period模块内部计算的噪声功率就是错的等效于没加噪声。另一个可能是 SignalPower 参数与调制器实际输出功率不匹配信噪比被严重高估。解决在参数面板把 Mode 显式设为 Signal to noise ratio (SNR)SignalPower 填 1。如果要用 Eb/N0 模式必须同时填写 Symbol period并确认符号周期和码元速率一致。我一般直接在 set_param 脚本里写死这两个字段避免每次手动点。5.4 现象M-FSK 解调器输出全 0 或全 1波形是一条直线2FSK 链路仿真能跑通但解调输出恒为某个固定值原始数据完全无法恢复。原因M-FSK 解调器的输入数据格式不匹配。部分版本中M-FSK Modulator Baseband 的输入必须是整数类型而伯努利随机数产生器默认输出 double 类型另外调制器和解调器的 SamplesPerSymbol 如果不一致解调器内部符号定时就会错乱。解决在两个模块之间加一个 Data Type Conversion把 double 转成 uint8 或 int8。同时检查 M-FSK 调制器和解调器的 SamplesPerSymbol 参数保持一致两者不一致时解调器根本无法正确恢复符号。5.5 现象2ASK 解调输出是正弦包络不是能直接读的方波示波器上第三路波形看起来是起伏的正弦包络和原始方波完全两回事。原因DSB AM 解调器输出的是解调后的模拟基带包络里面还残留高频载波分量直接用示波器看当然不是干净方波。原文档链路里挂了一个 Compare to Constant 模块这才是真正用来做判决的环节而不是只看解调器原始输出。解决在 DSB AM Demodulator Passband 后面接一个低通滤波器或抽样判决器。低通滤波器截止频率设为码元速率量级滤掉残余载波然后接 Compare to Constant阈值设在包络幅度中间比如归一化包络幅度为 1 时阈值取 0.5。这样输出才是与原始基带对齐的 0/1 方波。6. 用误码率曲线把 2ASK 和 2FSK 的差距量化出来波形图只能说明链路通了要说清楚两套调制方式谁抗噪声能力更强、原文档为什么把 2ASK 的 SNR 设为 -6 dB 而 2FSK 设为 -3 dB得把误码率曲线拉出来对比。MATLAB 自带的 berawgn 函数可以直接给出理论参考值先跑一遍理论曲线再和 Simulink 仿真结果对比就能验证链路是不是真的建对了。EbNo -3:1:12; % 横轴比特信噪比 berOOK berawgn(EbNo, ook, noncoherent); % 2ASK 非相干 berFSK berawgn(EbNo, fsk, 2, noncoherent); % 2FSK 非相干 semilogy(EbNo, berOOK, o-, EbNo, berFSK, s-); grid on; xlabel(Eb/N0 (dB)); ylabel(BER); legend(2ASK (OOK 非相干), 2FSK 非相干, Location, southwest);从理论曲线能看出一条重要规律同样的 Eb/N0 下2FSK 的误码率比 2ASK 低约 3 dB。也就是说2FSK 达到和 2ASK 相同的误码率所需的信噪比更小。这也正是原文档把 2FSK 的 AWGN 信噪比设为 -3 dB、2ASK 设为 -6 dB 的原因如果两个系统用同一信噪比2FSK 的波形会比 2ASK 干净太多对比效果就不明显。在 Simulink 链路里验证这个结论时我的做法是在发射端和接收端各引出信号送入 Error Rate Calculation 模块把 Receive delay 设为第 5 章测出的延迟值仿真结束后从 MATLAB 工作区读取误码率再在同一张图上叠加理论曲线。这里最需要警惕的是延迟没对齐误码率直接变成 50%让人误以为仿真链路是错的。理论上 2ASK 在 8 dB 附近误码率降到 1e-32FSK 在 5 dB 附近就能达到同样水平如果仿真曲线和理论曲线整体偏移超过 2 dB先回头查 SNR 模式和信号功率而不是怀疑模块本身。从那以后我每次搭调制解调链路运行前都会先花两分钟确认三件事码元周期与采样时间是否全局一致载频和频偏是否满足理论约束AWGN 的模式到底是 SNR 还是 Eb/N0。看似都是小事翻车率直接降一半。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑