第【83】期-- PAM通信系统中匹配滤波器的性能仿真与分析 --MATLAB完整代码

📅 2026/7/24 3:18:10 👁️ 阅读次数 📝 编程学习
第【83】期-- PAM通信系统中匹配滤波器的性能仿真与分析 --MATLAB完整代码

关注我,追更更多通信仿真代码!

文章目录

    • 摘 要:
    • 1 引言
    • 2 系统模型
      • 2.1 M-PAM信号模型
      • 2.2 AWGN信道模型
      • 2.3 脉冲形状
      • 2.4 匹配滤波器原理
        • 2.4.1 匹配滤波器的数学定义
        • 2.4.2 匹配滤波器的数字实现
    • 3 仿真流程与分析
      • 3.1 理论误码率公式
      • 3.2 仿真结果
      • 3.3 部分代码
    • 4 总结

摘 要:

本文针对加性高斯白噪声(AWGN)信道下的M进制脉冲幅度调制(M-PAM)系统,开展了基于匹配滤波器的接收机设计。研究采用三种不同的脉冲成形技术——矩形脉冲、三角形脉冲和升余弦脉冲,对2-PAM和4-PAM两种调制方案进行了系统考察。每种方案的性能从误比特率(BER)、符号差错率(SER)进行全面评估。并基于MATLAB的数值仿真和Simulink分别实现,并与理论BER表达式进行了对比,结果显示出一致性,验证了匹配滤波器接收机在AWGN条件下的最优性能。

1 引言

  • 在数字通信系统中,接收端如何从被噪声污染的信号中可靠恢复信息是核心问题。匹配滤波器(Matched Filter)是一种线性滤波器,它能在指定采样时刻最大化输出信噪比(SNR),因此被广泛应用于数字接收机中。脉冲幅度调制(PAM)是最基本的基带调制方式,通过将数字符号映射为不同幅度的脉冲序列来传输信息。PAM系统的接收端常采用匹配滤波器来优化检测性能。

  • 实际系统中,脉冲形状的选择对系统性能有显著影响:不同的脉冲具有不同的频谱特性和时域波形,影响带宽占用和码间干扰(ISI)。本文通过蒙特卡洛仿真,研究三种典型脉冲形状(矩形、三角形、升余弦)在匹配滤波器接收下的误码性能,评估2-PAM和4-PAM两种调制阶数在不同信噪比下的误比特率(BER)和符号差错率(SER),并与理论值对比,以验证匹配滤波器的有效性。

2 系统模型

2.1 M-PAM信号模型

2.2 AWGN信道模型

2.3 脉冲形状


升余弦脉冲满足奈奎斯特无码间干扰准则,是实际系统中广泛使用的脉冲成形方案。

2.4 匹配滤波器原理

2.4.1 匹配滤波器的数学定义

2.4.2 匹配滤波器的数字实现

3 仿真流程与分析

3.1 理论误码率公式

3.2 仿真结果


可以看到:所有脉冲形状的仿真BER曲线在整个SNR范围内均与理论Q函数曲线基本吻合。

3.3 部分代码

clear;clc;close all;fprintf('=== CIE 237 课程项目 - 完整仿真 ===\n\n');%%=====================参数设置=====================N=30000;%符号数 Sps=8;%每符号采样点数 rolloff=0.35;%升余弦滚降因子 span=6;%滤波器符号跨度 SNR_dB=-4:2:12;%信噪比范围(dB)M_list=[2,4];%待仿真的 PAM 阶数%%=====================脉冲形状=====================%所有脉冲均归一化为单位能量%1.矩形脉冲(方波) p_rect=ones(1,Sps);p_rect=p_rect/norm(p_rect);%2.三角形脉冲(帐篷形) p_tri=[linspace(0,1,Sps/2),linspace(1,0,Sps/2)];p_tri=p_tri/norm(p_tri);%3.升余弦脉冲(根升余弦公式) t=(-span*Sps/2:span*Sps/2)/Sps;den=1-(2*rolloff*t).^2;den(abs(den)<1e-10)=eps;%避免除零 p_rc=sinc(t).*cos(pi*rolloff*t)./den;p_rc=p_rc/norm(p_rc);%存储所有脉冲 pulses={p_rect,p_tri,p_rc};pulse_names={'矩形','三角形','升余弦'};colors={'b','r','g'};%%=====================演示:匹配滤波器可视化=====================%本节演示匹配滤波器的工作原理fprintf('演示匹配滤波器概念...\n');symbols_demo=[1,-1,1,-1,1];%测试符号 pulse_demo=p_rect;%使用矩形脉冲%生成发送信号(上采样+卷积) up=zeros(1,length(symbols_demo)*Sps);up(1:Sps:end)=symbols_demo;tx_demo=conv(up,pulse_demo,'full');%添加噪声 rx_demo=tx_demo+0.4*randn(size(tx_demo));%==========匹配滤波器实现(演示)==========mf_demo=fliplr(pulse_demo);%匹配滤波器系数 mf_out_demo=conv(rx_demo,mf_demo,'full');%应用匹配滤波器%=========================================================%绘制演示图figure('Position',[100,100,1100,750]);subplot(4,1,1);stem(symbols_demo,'filled','b','LineWidth',1.5);title('输入符号','FontSize',12);grid on;subplot(4,1,2);plot(tx_demo,'b','LineWidth',1.2);title('发送信号(脉冲成形后)','FontSize',12);grid on;subplot(4,1,3);plot(rx_demo,'r','LineWidth',1.2);title('接收信号(含 AWGN 噪声)','FontSize',12);grid on;subplot(4,1,4);plot(mf_out_demo,'g','LineWidth',1.2);title('匹配滤波器输出(符号位置出现峰值)','FontSize',12);grid on;%%=====================存储数组=====================BER_sim=zeros(3,length(SNR_dB),2);%[脉冲 x SNR x M]SER_sim=zeros(3,length(SNR_dB),2);BER_theo=zeros(length(SNR_dB),2);%%=====================主仿真循环=====================fprintf('\n运行主仿真...\n');form=1:length(M_list)M=M_list(m);k=log2(M);%每符号比特数%归一化 PAM 电平(单位平均能量) levels=(-(M-1):2:(M-1));levels=levels/sqrt(mean(levels.^2));forp=1:3pulse=pulses{p};%=========================================================%匹配滤波器构造%匹配滤波器是发送脉冲的时间反转版本。%这能在采样时刻最大化信噪比。%=========================================================mf=fliplr(pulse);%<---匹配滤波器在此构造!%=========================================================Lp=length(pulse);delay=Lp-1;%总滤波器延迟fors=1:length(SNR_dB)EbN0=10^(SNR_dB(s)/10);noise_var=1/(2*k*EbN0);%噪声方差%%-----发送端-----%生成随机符号 data=randi([0,M-1],1,N);%映射到 PAM 电平 symbols=levels(data+1);%上采样(符号间插入零) up=zeros(1,N*Sps);up(1:Sps:end)=symbols;%应用脉冲成形滤波器 tx=conv(up,pulse,'full');%%-----信道(AWGN)-----rx=tx+sqrt(noise_var)*randn(size(tx));%%-----接收端-----%=========================================================%匹配滤波器应用%将接收信号与匹配滤波器卷积,以在判决前最大化信噪比。%=========================================================mf_out=conv(rx,mf,'full');%<---此处应用匹配滤波器!%=========================================================%%-----采样-----%以符号速率采样(每 Sps 个样点)%考虑滤波器延迟 sample_idx=delay+1:Sps:delay+N*Sps;%确保索引不越界 sample_idx=sample_idx(sample_idx<=length(mf_out));sampled=mf_out(sample_idx);%若长度不足则补零iflength(sampled)<N sampled=[sampled,zeros(1,N-length(sampled))];end sampled=sampled(1:N);%%-----判决(最小距离)-----detected=zeros(1,N);fori=1:N[~,idx]=min(abs(sampled(i)-levels));detected(i)=idx-1;end%%-----误码计算-----errors=sum(detected~=data);SER_sim(p,s,m)=errors/N;BER_sim(p,s,m)=errors/(N*k);end%SNR 循环%进度指示fprintf(' 已完成: %s, %d-PAM\n',pulse_names{p},M);end%脉冲循环%%-----理论 BER/SER-----EbN0_lin=10.^(SNR_dB/10);arg=sqrt(6*k*EbN0_lin/(M^2-1));SER_theory=2*(M-1)/M*qfunc(arg);BER_theo(:,m)=SER_theory/k;end%M 阶数循环

4 总结

本文针对加性高斯白噪声(AWGN)信道下的M进制脉冲幅度调制(M-PAM)系统,开展了基于匹配滤波器的接收机设计。研究采用三种不同的脉冲成形技术——矩形脉冲、三角形脉冲和升余弦脉冲,对2-PAM和4-PAM两种调制方案进行了系统考察。每种方案的性能从误比特率(BER)、符号差错率(SER)进行全面评估。并基于MATLAB的数值仿真和Simulink分别实现,并与理论BER表达式进行了对比,结果显示出一致性,验证了匹配滤波器接收机在AWGN条件下的最优性能。

仿真完整代码可见往期文章文末VX公众号(包含往期博客所有代码),所见即所得