
简介一份语音信号频带传输通信系统仿真的课程设计报告基于 MATLAB/Simulink 平台围绕 PCM 编码、PSK 调制解调、高斯白噪声信道等核心环节完整呈现从语音信号数字化、带通传输到接收恢复的系统设计思路。报告面向通信工程、电子信息类专业学生可用于课程设计、仿真实验或毕业设计参考。下载包为 1 个 docx 文档约 3.29MB正文共 26 页包含设计目的与要求、PCM 编解码原理、PSK 调制解调原理、系统模型搭建、仿真结果及分析等章节可直接用于撰写报告或对照复现。内容还覆盖了数字通信相较于模拟通信的优势、A 律 13 折线压扩特性、BPSK/QPSK 等知识点能帮助读者理解并独立完成同类语音传输系统仿真。目前已有 359 人学习适合需要参考完整设计流程与写作结构的同学。1. 从语音数字化到频带传输这套仿真到底在模拟什么如果你只在 Simulink 里拖过几个模块大概率会觉得 PCM 和 PSK 是两个各自独立的知识点一个管模拟转数字一个管数字上载波。但把两者串成一个完整的语音频带传输系统时才会意识到真正的门槛不在某个模块怎么配而在“码元怎么对、时序怎么对齐、滤波器截止频率按什么定、误码从哪里来”。这套基于 PCM 编码和 PSK 调制的仿真就是用一段真实语音信号把采样量化编码、载波调制、加噪传输、相干解调、译码恢复的全链路走通最终在示波器上对比输入输出波形用误码率说话。它适合两类人一类是正在做通信原理课程设计、需要从原理图到模块参数都能自洽的学生另一类是已经工作、想快速验证数字带通传输系统中“编码-调制-信道-解调-译码”各环节性能损耗的工程师。整个系统的核心链路并不复杂但参数之间相互牵制PCM 的采样速率决定基带信号带宽PSK 的载波频率决定带通滤波器的通带范围噪声方差直接反映在误码率上。下面从 PCM 编码端拆起逐步把这条链路的每一级参数和仿真细节还原出来。2. PCM 编译码A 律 13 折线在 Simulink 里怎么搭2.1 为什么语音编码选 A 律而不是均匀量化语音信号的动态范围很大但小信号出现的概率高。如果用均匀量化为了覆盖大信号幅度量化间隔必须足够大小信号部分会被严重劣化听感上就是噪声和失真。PCM 语音编码采用非均匀量化对小信号用小的量化间隔对大信号用大的量化间隔等效于在量化前先做对数压缩。A 律压扩特性在 A87.56 时用 13 折线近似正负半轴各分 8 段每段内再均匀分 16 级总计 256 个量化级正好对应 8 位编码。在 Simulink 里实现 A 律压扩的常见做法不是自己写对数公式而是用 Lookup Table 模块直接做输入-输出映射。这要求你先算好 A 律压扩曲线上的分界点。13 折线正半轴各段起始点为 0、1/128、1/64、1/32、1/16、1/8、1/4、1/2、1对应的 y 轴分界点按 A 律公式计算后填入查找表。负半轴关于原点对称所以只需要设计正半轴表项输入经过 Abs 取绝对值后再查表最后用符号位恢复极性。2.2 编码端模块链路的搭建与参数编码端的核心思路是限幅 → 取绝对值 → 查表压扩 → 量化 → 整数转比特。在新建的 MDL 模型里依次放入 Saturation、Abs、Lookup Table、Gain、Quantizer、Integer to Bit Converter 和 Mux 等模块连线方式与图 3-1 对应的编码端电路一致。这里的关键是 Relay 模块的极性保持功能。Relay 模块在这里的作用不是传统的滞环比较而是把输入信号的符号提取出来。设置 Relay 的 On/Off 阈值时通常把 Switch on point 设为 0Switch off point 也设为 0这样输出只取决于输入的正负输入大于 0 输出 1小于 0 输出 0。这个符号位会和量化后的幅度编码一起通过 Mux 拼成完整的 8 位码组。Saturation 模块的上下限设置为 -1 和 1保证输入信号幅度不超出 A 律压扩的定义域。Lookup Table 模块的 Vector of input values 填入 13 折线各折点的横坐标Vector of output values 填入对应的纵坐标如果点数少于折点Simulink 会自动线性插值。为了更精确可以在每段内再插入中间值比如每段 16 个点这样能够匹配 16 级均匀量化的粒度。Quantizer 模块的量化间隔设置为 1/16对应每段内的 16 级均匀量化。注意这里的“均匀”是在压扩之后的 y 域均匀映射回 x 域就是非均匀的。量化后的输出范围是 0 到 1 之间但包含小数不能直接作为二进制索引。为了得到编码值需要把量化结果乘上一个增益将区间映射到 0~15 的整数。% 在 MATLAB 脚本里计算 A 律 13 折线表项供 Lookup Table 使用 A 87.56; x_breaks [0 1/128 1/64 1/32 1/16 1/8 1/4 1/2 1]; % 折线分界点 y_breaks zeros(size(x_breaks)); for i 1:length(x_breaks) x x_breaks(i); if x 1/A y_breaks(i) A*x / (1 log(A)); else y_breaks(i) (1 log(A*x)) / (1 log(A)); end end % 输出 y_breaks 作为 Lookup Table 的 output values这段代码先算出 13 折线各分界点在 A 律压扩后的纵坐标。因为折线在每段内是线性的Lookup Table 在两点之间插值就能得到足够精度。对于工程仿真来说不需要把对数曲线逐点离散化折点加线性插值已经能满足课程设计要求的“处理结果与理论一致”。Integer to Bit Converter 模块负责把量化后的整数转成 8 位无符号二进制。在这里要注意这个模块默认输出的是 boolean 类型而后续 PSK 调制通常需要 double 类型。可以在 Integer to Bit Converter 之后加一个 Data Type Conversion 模块把输出转成 double 的 0/1 序列避免类型不匹配报错。编码端的 Mux 把符号位和 8 位幅度码拼在一起得到 9 位码组但标准的 A 律 PCM 是 8 位码组所以符号位需要处理。常见做法是 Mux 的输入数量为 2一个接 Relay 输出的符号位一个接 Integer to Bit Converter 输出的 8 位并行数据最终通过一个 Bus Creator 或者直接向量拼接形成 9 位但在后面的帧变换和 PSK 调制前会再裁掉冗余位。更常见的做法是把符号位作为最高位与 7 位幅度码组合成 8 位这时 Quantizer 的量化级数要改成 128即每段 16 级总共 8 段对应 7 位幅度码去掉一个冗余段。在本设计中为了简化也可以直接保留 8 位幅度码并单独传输符号位后续帧变换按 9 位处理。关键是保证发送端和接收端的位宽一致。2.3 译码端的镜像结构与验证译码端是编码端的逆过程Bit to Integer Converter 把比特恢复成整数反查 Lookup Table 得到压扩前的幅度再乘上符号位最后经过低通滤波器平滑波形。这里的 Lookup Table 要使用反向映射表即输入是 y 域的量化值输出是 x 域的幅度。Bit to Integer Converter 的 Number of bits per integer 必须与编码端的 Integer to Bit Converter 一致。如果编码端每样本 8 位译码端就是 8 位。反查表可以用 MATLAB 算出每个量化级对应的 x 值% 计算 A 律译码查找表 y_levels (0:15)/16; % 每个折线段内 16 级 x_values zeros(size(y_levels)); for i 1:length(y_levels) y y_levels(i); if y 1/(1log(A)) x_values(i) (2^y - 1) / A; % 反函数 else x_values(i) exp((y*(1log(A))-1)) / A; end end验证 PCM 编译码是否正常最直接的方法是让信号不经过 PSK直接编码后译码用示波器对比输入输出。从图 3-12 可以看到原信号和译码波形基本重合说明量化噪声在可接受范围内。注意这里有一个细节如果输入信号是正弦波频率设置要远低于采样率否则会引入频谱混叠。Simulink 里的 Signal Wave 模块频率一般设为 200*pi rad/s即 100 Hz而 PCM 采样率按电话语音标准取 8 kHz满足奈奎斯特条件。3. PSK 调制解调从基带矩形脉冲到带通信号3.1 为什么用 PSK 而不是 ASK 或 FSK数字调制有三种基本方式ASK、FSK、PSK。ASK 抗噪声能力最差因为幅度容易受信道增益和噪声影响FSK 带宽利用率低适合慢速传输PSK 通过相位携带信息在相同信噪比下误码率最低而且实现相对简单。对于语音 PCM 编码后的 64kbit/s 数据流BPSK 的带宽需求为 2 倍基带速率在带通信道中是很合理的折中。本系统采用的就是二进制绝对相移键控即 2PSK也叫 BPSK。绝对 PSK 存在“倒 π”模糊问题即接收端载波恢复如果相差 180 度解调输出会全部反相。但在仿真中我们通常假设收发端载波同步直接用同一个载波源或者通过锁相环恢复所以不讨论差分编码。实际工程中会改用 DPSK 解决相位模糊课程设计里一般不做这个扩展。3.2 调制端的信号源与码变换调制端的信号源在组合系统里就是 PCM 编码输出的比特流。但在单独的 PSK 仿真中需要一个二元序列作为输入。信号源模块通常设置成 Pulse Generator 或者 Bernoulli Binary Generator。前者输出周期矩形波适合观察波形后者输出随机 0/1 序列适合统计误码率。码变换器的作用是把单极性 0/1 码变成双极性不归零码即 0 映射为 -11 映射为 1。这一步可以在 Simulink 里用 Gain 和 Bias 组合实现也可以直接用 MATLAB Function 模块。载波用 Sine Wave 模块产生频率设为 2000pi rad/s也就是 1 kHz。基带信号频率设为 200pi rad/s即 100 Hz。乘法器将双极性码与载波相乘输出就是 2PSK 信号当发送 1 时相位为 0发送 0 时相位为 π。代码层面如果是用 MATLAB 脚本做纯算法仿真可以用下面的方式生成 2PSK 信号Fs 8000; % 采样率 8kHz T 1; % 仿真时长 1 秒 t (0:1/Fs:T-1/Fs); fc 1000; % 载波 1kHz data randi([0 1], 1, 100); % 100 个随机比特 data_upsampled repelem(data, Fs/100); % 每个比特用 80 个采样点表示 bipolar 2*data_upsampled - 1; carrier cos(2*pi*fc*t); psk_signal bipolar .* carrier;这里用 repelem 实现了基带信号的保持每个比特持续 80 个采样点对应 100 bit/s 的基带速率。载波频率 1kHz 远高于基带速率满足带通调制的要求。注意 2PSK 的信号功率是恒定的因为双极性码的幅度固定只是符号翻转这比 ASK 的抗幅度衰落能力强。3.3 带通滤波器与低通滤波器的截止频率设定带通滤波器放在发送端或接收端。在接收端带通滤波器的作用是抑制带外噪声和干扰。它的最低频率和最高频率要根据载波和基带信号带宽来设定。对于 2PSK已调信号的主瓣带宽是基带速率的 2 倍。本设计中基带信号频率为 200pi rad/s即 100 Hz载波为 1000 Hz那么带通滤波器的下截止频率设置为 1000-100900 Hz上截止频率设置为 10001001100 Hz。换算成角频率就是 2000pi-200pi1800pi rad/s 和 2000pi200pi2200*pi rad/s。低通滤波器在相干解调之后使用作用是滤除二倍载频分量。截止频率应设置为基带信号频率即 100 Hz也就是 200*pi rad/s。如果低通截止频率设得过高会残留高频噪声设得过低会削弱基带信号的边缘导致判决困难。在 Simulink 的 Analog Filter Design 模块中带通滤波器选择 Butterworth 二阶即可通带纹波不是主要考虑因素。低通滤波器同理。注意滤波器的阶数会影响波形的延迟高阶滤波器延迟更大后续需要配合延时补偿。3.4 相干解调与抽样判决相干解调在接收端将收到的 2PSK 信号与本地载波相乘输出包含基带分量和二倍频分量s_demod(t) e_PSK(t) * cos(2*pi*fc*t)当 e_PSK(t) 为 cos(2pifct) 时乘积为 0.5 0.5cos(4pifct)当 e_PSK(t) 为 -cos(2pifct) 时乘积为 -0.5 - 0.5cos(4pifct)。经过低通滤波后剩下正负半波抽样判决器在定时脉冲到来时刻判断样值大于 0 判为 1小于 0 判为 0。抽样判决器的参数设置要与基带信号频率匹配。它需要接收外部定时脉冲定时脉冲的频率等于比特速率。在本设计中比特速率为 100 bit/s定时脉冲周期为 0.01 秒。判决时刻应取在每个比特的中间避开码元边缘的过渡区域。Simulink 中可以用 Sample and Hold 模块配合 Pulse Generator 实现或者在 MATLAB Function 中按符号周期进行采样% 对低通滤波后的信号 y_lpf 做抽样判决 samples y_lpf(symbol_center_indices); % 每个比特中心时刻采样 decoded_bits double(samples 0); % 大于0判1否则判0这里的 symbol_center_indices 是每个比特持续区间内靠近中心的采样点索引。选择中心时刻是因为滤波器引入的暂态响应在码元边缘最严重中心时刻的判决余量最大。3.5 误码率的统计方式误码率在 Simulink 中可以用 Error Rate Calculation 模块统计。它把发送端的延迟后比特与接收端判决比特逐位比较输出误码数和误码率。在单独的 PSK 仿真中误码率为 0 是正常的因为信道没有加噪。但在组合系统中加入高斯白噪声后误码率会明显上升。单独仿真 PSK 时示波器上自上而下的波形依次是载波、基带矩形脉冲、已调信号、接收端带通滤波器输出、低通滤波器输出、抽样判决输出。对比第二个和第六个波形可以看到判决输出还原了原始比特序列只是存在固定的时延。这个时延来源于信道中滤波器群的群延迟需要在后续连接 PCM 解码器之前做对齐。4. 组合系统与高斯白噪声信道帧变换和时延补偿4.1 为什么要做帧变换Buffer/UnbufferPCM 编码输出的并行比特需要串行化后才能进入 PSK 调制器。但在组合系统中PCM 编码是逐样本输出的每个采样点对应 8 个或更多并行比特而 PSK 调制器是按照串行比特流工作的。帧变换的作用就是把并行比特打包成一帧一帧的序列每帧包含 n 个比特然后按顺序逐个发送。Buffer 模块在这里是关键的帧同步手段。它将输入向量按照 Buffer size 参数重组为帧矩阵Unbuffer 再将帧拆回串行序列。这里选择的帧大小要与 PCM 每个样本的比特数一致通常设成 8 或 9。如果 Buffer size 设置与编码位宽不匹配会出现比特错位接收端解码恢复的信号会完全失真。帧变换还会引入额外的延迟。Buffer 需要等待填满一帧才能输出所以延迟大约是帧长度乘上比特周期。延时子系统专门用来补偿这个延迟确保发送端的参考信号与接收端译码输出的信号在时间上对齐才能进行波形对比和误码统计。4.2 子系统之间的信号类型匹配组合系统的信号流中存在多种类型boolean 比特、double 脉冲、整数索引、模拟波形。在 Simulink 中信号线红色表示 double蓝色表示 boolean绿色表示整数。PSK 调制器的乘法器要求两个输入都是 double所以 PCM 编码输出的 boolean 必须通过 Data Type Conversion 转成 double 的 0/1。而在 PSK 解调后抽样判决输出的是 double 的 0/1进入 PCM 解码器之前又需要转成整数或 boolean这取决于 Bit to Integer Converter 的输入类型。最容易被忽视的是 Buffer 模块的缓冲长度。Buffer 按采样数缓存如果前面的信号采样率是 8000 Hz比特速率是 100 bit/s那么每个比特占据 80 个采样点。Buffer size 如果设置为 80输出的就是 80 个采样点的一组但这并不等于一个比特因为 Buffer 只是时间维度上的重排没有解调功能。正确的做法是先用 Unbuffer 把并行比特展开为串行再通过 Zero-Order Hold 或者 Rate Transition 处理采样率差异然后再进入 PSK 调制。4.3 高斯白噪声的功率设定高斯白噪声模块在 Simulink 中是 AWGN Channel参数包括 SNR(dB) 或者噪声方差。在这个系统中信号经过 PCM 量化已经引入了少量噪声PSK 调制后的信号功率固定加入的高斯噪声会直接影响解调判决。SNR 的设置决定了误码率的上限。2PSK 在加性高斯白噪声下的理论误码率为Pe 0.5 * erfc(sqrt(SNR))其中 SNR 是信噪比线性值。如果仿真中设置 SNR 10 dB理论误码率约为 7.8e-6在 8000 个码元中基本看不到误码。而图 3-35 显示 7998 个码元中出现了 18 个误码对应的误码率约为 0.45%反推 SNR 大约在 0 dB 左右。这说明噪声功率不能设得太低否则误码率为 0 反而不利于观察系统性能。AWGN Channel 的 SNR 是相对于信号功率还是比特能量需要看清楚模块设置。常见的设置是“SNR (dB)”模式它要求输入信号功率已知。如果信号是幅度为 1 的双极性码与幅度为 1 的载波相乘信号功率为 0.5 W。噪声方差根据 SNR 计算。4.4 延时补偿的两种做法延时补偿有两种常见方案。第一种是在发送端前向路径上插入一个与信道延迟相等的 Delay 模块让参与对比的原始信号经过同样时间的延迟从而在示波器上与接收端输出对齐。第二种是在接收端解码后根据实际测量出的延迟量对译码输出进行时间平移。在 Simulink 中最好使用 Group Delay 的概念来估算滤波器带来的延迟。Butterworth 滤波器的群延迟在通带内近似为常数但不同阶数不同所以实践中更可靠的办法是用一个固定延迟模块先观察示波器上输入输出波形的时间差再调整延迟参数。延时子系统实际上就是用 Variable Integer Delay 模块输入端口连接延迟量可以通过 MATLAB 脚本计算出滤波器延迟后自动赋值。4.5 组合系统的示波器波形解读组合系统里示波器的波形从上到下依次为载波、输入语音信号、PSK 调制输出、带通滤波后信号、低通滤波后信号、抽样判决输出。在加噪情况下带通滤波后的波形上可以看到明显的噪声毛刺低通滤波后毛刺减少判决输出则同步存在少量误码。对比输入语音信号和解码后的输出如果延迟对齐良好两条波形基本重合但输出波形上会有细微的量化噪声和误码导致的毛刺。如果出现波形整体偏移先检查延时参数是否太大如果出现大量随机跳变检查误码率是否过高通常需要降低噪声功率。语音信号在 PCM 编码前需要经过低通滤波限制在 300~3400 Hz 的电话语音带宽内。但在该仿真中输入信号直接用低频正弦波模拟语音频率 100 Hz没有体现带限滤波过程。这不影响系统结构验证但如果要更贴近实际语音可以用 From Wave Device 读取真实录音配合 Band-Limited White Noise 模块模拟背景噪声。5. 参数联动验证从误码率反推信噪比与滤波器设计5.1 用仿真结果校验理论误码率组合系统跑完仿真后记录误码率和码元总数与理论公式对比。比如误码器显示 7998 个码元中出现 18 个误码误码率约 0.00225。查 2PSK 误码率曲线对应信噪比约为 1~2 dB。如果 AWGN 模块设置的 SNR 是 3 dB仿真结果基本符合理论。如果想做一组对比实验保持其他参数不变把 SNR 从 -2 dB 以 2 dB 步进增加到 10 dB记录每组误码率然后画成曲线与理论误码率曲线叠加。在 Simulink 中可以用 sim 命令在循环里修改 SNR 参数snr_list -2:2:10; ber_list zeros(size(snr_list)); for k 1:length(snr_list) set_param(pcm_psk_AWGN/AWGN Channel, SNR, num2str(snr_list(k))); sim(pcm_psk_AWGN); ber_list(k) ber_out(end); % 从工作空间读取误码率 end semilogy(snr_list, ber_list, o-); hold on; snr_lin 10.^(snr_list/10); ber_theory 0.5*erfc(sqrt(snr_lin)); semilogy(snr_list, ber_theory, r-);这段脚本的核心价值是把仿真与理论串起来如果两条曲线偏离较大说明系统里有额外的失真源比如滤波器带宽不足、帧同步偏移或者抽样时刻不准确。每修改一次 SNR 都要重新运行仿真所以模型要配置成把误码率输出到工作空间而不是只在示波器上显示。5.2 滤波器阶数与群延迟对误码的影响带通和低通滤波器如果阶数过低阻带衰减不够噪声会泄漏到信号频带内阶数过高则群延迟变大容易造成码间串扰。对于 BPSK 信号接收端带通滤波器的最优带宽理论上是 2/Tb但在存在定时偏差时稍微放宽带宽能减少码间串扰。实际调参时可以固定 SNR 5 dB将带通滤波器的通带宽度从 1.2 倍信号主瓣逐步增大到 2.0 倍观察误码率变化。会发现带宽过窄时误码率较高因为信号高频分量被滤掉带宽过宽时噪声功率增加误码率也会上升。最优值在 1.4~1.6 倍之间。低通滤波器的截止频率不宜超过基带频率的 1.2 倍。% 低通滤波器设计示例直接使用 butter 函数计算系数 Fc 100; % 截止频率 100Hz Fs 8000; % 采样率 8kHz [b, a] butter(4, Fc/(Fs/2), low); % 4阶巴特沃斯低通 y_lpf filter(b, a, demod_signal);注意这里用 filter 而不是 filtfilt因为 filtfilt 是零相位滤波会借用未来数据在实时通信仿真中不成立。用 filter 会带来固定群延迟这个延迟要在后续抽样判决前补偿。补偿量为 groupdelay 函数计算的采样点数也可以用 grpdelay(b,a,1) 直接得到零频处的群延迟。5.3 PCM 量化信噪比与系统总信噪比的权衡PCM 编码本身会引入量化噪声。对于均匀量化量化信噪比公式为SQNR(dB) 6.02N 4.77 - 20*log10(A)N 是编码位数A 是信号峰值与量化范围的比值。如果输入信号幅度远小于量化范围SQNR 会下降。因此在连接语音信号时一定要确保经过归一化处理幅度接近满量程但不削波。A 律压缩的优点是扩大了小信号的有效位数实质上等价于在小信号段提高了 SQNR。在组合系统的总误码率中PCM 量化噪声与信道噪声是叠加关系。如果信道噪声很小误码率逼近 0但输出波形仍然与输入有细微差异这就是量化噪声。可以通过减小正弦信号幅度来观察量化噪声对波形的影响。将信号幅度从 1 降到 0.1Saturation 限幅范围不变量化电平利用率降低输出波形会出现阶梯状失真。5.4 同步误差的敏感性实验PSK 相干解调对载波同步和定时同步非常敏感。在仿真中故意加入一个小的时间偏移比如将抽样判决器的定时脉冲延迟半个码元周期误码率会急剧上升。这是因为 BPSK 的比特能量集中在一个比特周期内采样点偏到边界处信号幅度可能接近 0噪声主导了判决。在 Simulink 中模拟定时偏移可以在抽样判决模块前添加一个 Transport Delay 模块延迟时间设置成比特周期的 0.1 倍、0.3 倍、0.5 倍分别观察误码率变化。一般当偏移超过比特周期的 0.4 倍误码率接近 0.5系统完全失效。这个实验能直观理解为什么接收端需要时钟恢复环路。% 计算不同定时偏移下的误码率 offset_ratio 0:0.1:0.5; for k 1:length(offset_ratio) set_param(pcm_psk_AWGN/Timing Error, DelayTime, ... num2str(offset_ratio(k) * symbol_period)); sim(pcm_psk_AWGN); ber_timing(k) ber_out(end); end bar(offset_ratio, ber_timing);这里 symbol_period 是 0.01 秒。实验结果会显示误码率随偏移量单调上升在 0.5 附近达到 0.5。这说明判决时刻的选择不是无关紧要的细节而是决定系统性能的关键参数。5.5 用 Spectrum Analyzer 观察频谱搬移除了示波器观察时域波形频谱分析能更直观地看到基带信号被搬移到载波附近的过程。在 PSK 调制器输出端加入 Spectrum Analyzer 模块能看到主瓣中心位于 1kHz宽度为 200Hz 的带通信号。在接收端低通滤波器输出处再放一个 Spectrum Analyzer看到的又是回到 0 附近的基带频谱。对比两个频谱图可以检查带通滤波器是否让信号通过而不产生明显畸变。如果滤波器带宽设置不合理频谱形状会左右不对称甚至出现凹陷。这是验证滤波器参数正确性的快速方法比只看时域波形更敏感。6. 进阶技巧把语音文件换成真实录音并批量测量性能前面的仿真用的是 Signal Wave 正弦波代替语音信号。要更贴近实际可以把音频文件读入 Simulink用 From Multimedia File 模块读取 WAV 文件然后经过归一化、PCM 编码、PSK 调制、加噪传输、解调、解码最后用 To Audio Device 播放输出或写入新的 WAV 文件对比听感。音频文件导入时要注意采样率必须与 PCM 编码模块的采样速率一致。如果 WAV 文件是 44.1kHz而 PCM 设计为 8kHz就需要先做重采样。Simulink 中可以用 FIR Interpolation 和 FIR Decimation 模块组合实现或者直接在 MATLAB 里用 resample 函数预处理[audio, fs_orig] audioread(speech.wav); audio_mono mean(audio, 2); % 转单声道 audio_8k resample(audio_mono, 8000, fs_orig); % 重采样 audio_norm audio_8k / max(abs(audio_8k)); % 归一化 audiowrite(speech_8k.wav, audio_norm, 8000);预处理后的文件可以直接接入 From Multimedia FileSample time 设置为 1/8000。注意 Simulink 模型中的采样时间需要全局一致否则会报告速率不匹配。对于性能测量不要只跑一次就下结论而是固定某一信噪比连续运行多个随机数种子统计平均误码率。在 Simulink 的 Configuration Parameters 里设置随机数种子为不同值或者用 sim 命令循环修改 AWGN 模块的种子参数。收集多组误码率后取均值和方差能够反映出系统在统计意义上的性能而不是某一次特定噪声实现的结果。最后一个值得尝试的技巧是采用 BPSK 与 QPSK 对比。将 PSK 调制与解调部分从 BPSK 改成 QPSK载波数量从 1 个正交分量变成 2 个发送端用两个乘法器分别处理同相和正交支路接收端同样用两个相干解调器。QPSK 在相同带宽下传输速率翻倍但误码率劣化约 2~3 dB。在课程设计报告中给出 BPSK 和 QPSK 在相同数据速率下的误码率对比曲线是提高设计深度的加分项。修改方法是在现有的二进制数据流上启用串并转换把 1 个比特变成 I、Q 两个支路各一个比特然后用余弦载波调制 I 路、正弦载波调制 Q 路。接收端解调后并串转换将两路比特合并再进行 PCM 解码。本文还有配套的精品资源点击获取