Simulink仿真PCM与PSK语音频带传输系统:从编码到解调的完整设计
2026/9/19 7:12:03 网站建设 项目流程

简介:一份语音信号频带传输通信系统仿真的课程设计报告,基于 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 律压扩特性在 A=87.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 设为 0,Switch 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/(1+log(A)) x_values(i) = (2^y - 1) / A; % 反函数 else x_values(i) = exp((y*(1+log(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 映射为 -1,1 映射为 +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-100=900 Hz,上截止频率设置为 1000+100=1100 Hz。换算成角频率就是 2000pi-200pi=1800pi rad/s 和 2000pi+200pi=2200*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/Unbuffer)

PCM 编码输出的并行比特需要串行化后才能进入 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.1,Saturation 限幅范围不变,量化电平利用率降低,输出波形会出现阶梯状失真。

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 File,Sample 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 解码。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询