(57)MATLAB使用迫零均衡器和MMSE均衡器的BPSK调制系统仿真

文章目录


前言

本文给出仿真模型与MATLAB代码,分别使用具有ISI的三个不同传输特性的信道,仿真测试了使用迫零均衡器和MMSE均衡器的基带BPSK传输系统的性能,绘制出Eb/N0-SER性能曲线。


一、仿真测试模型

在设计和测试了迫零均衡器和MMSE线性均衡器之后,接下来在通信链路上测试它们的性能。线性均衡器的性能完全取决于通信发生的信道的特性。本文基于上一篇文章介绍的三个不同信道进行均衡器性能测试。

仿真测试模型如下:

在该仿真模型中,一串随机信源数据经过BPSK调制后,分别通过所设计的ISI离散信道,同时,传输的数据还叠加了加性白高斯噪声(由给定的Eb/N0值决定)。在接收端,接收到的数据分别通过延迟优化的迫零均衡器和MMSE均衡器,在两条不同的路径上独立处理。均衡器的输出通过阈值检测器,给出传输符号的估计。为了对比,还增加了一条没有均衡器的解调路径。最终,检测到的符号与原始数据序列进行对比,计算误码率。仿真在不同Eb/N0值下进行,并将结果绘制成性能曲线。

下面给出MATLAB代码。

二、仿真代码

代码如下:

c 复制代码
%---------Input Fields------------------------
N = 1e7;                     % 仿真发送的符号数
EbN0_dB = 0:2:30;
% EbN0_dB = 0:2:12;
M = 2;                       % 调制阶数

h_c = [0.04 -0.05 0.07 -0.21 -0.5 0.72 0.36 0.21 0.03 0.07];      % 信道A
% h_c = [0.407 0.815 0.407];                                        % 信道B
% h_c = [0.227 0.460 0.688 0.460 0.227];                            % 信道C
% h_c = [0.0102 0.0227 0.0460 0.688 0.0460 0.0227 0.0102];          % 信道D,弱ISI

nTaps = 31;                                       % 均衡滤波器的抽头数
snr = EbN0_dB - 10*log10(0.5);                    % 0.5是因为实信号
[~,Imax] = max(h_c);                              % 取信道响应的最大值作为判决值

SER_zf = zeros(length(EbN0_dB),1);
SER_mmse = zeros(length(EbN0_dB),1);
SER_noeq = zeros(length(EbN0_dB),1);

%-----------------Transmitter---------------------
d = randi([0,1],1,N);                             % 生成均匀分布的随机信源符号
ref = cos(((M:-1:1)-1)/M*2*pi);                   % BPSK星座,[-1, 1]
s = ref(d+1);                                     % BPSK调制

%----------------Channel---------------------
x = conv(s,h_c);                                  % ISI信道作用于调制符号

%%

for i=1:length(EbN0_dB)
    %----------------Channel---------------------
    r = awgn(x,snr(i),'measured');

    %---------------Receiver--------------------
    %(1)不使用信道均衡
    y_noeq = r(Imax:Imax+length(d)-1);
    dcap_noeq = (y_noeq >= 0);                                    % 判决,判决结果是d帽
    SER_noeq(i) = sum((d~=dcap_noeq))/N;                          % 计算误符号率

    %(2)延迟优化MMSE均衡器
    [h_mmse,MSE,optDelay] = mmse_equalizer(h_c,EbN0_dB(i),nTaps); % 设计MMSE均衡器
    y_mmse = conv(h_mmse,r);                                      % 对接收信号进行MMSE均衡
    y_mmse = y_mmse(optDelay+1:optDelay+N);                       % 考虑均衡延时
    dcap_mmse = (y_mmse >= 0);                                    % 判决
    SER_mmse(i) = sum((d~=dcap_mmse))/N;                          % 计算误符号率

    %(3)延迟优化迫零均衡器
    [h_zf,error,optDelay] = zf_equalizer(h_c,nTaps);              % 设计迫零均衡器
    y_zf = conv(h_zf,r);                                          % 对接收信号进行迫零均衡
    y_zf = y_zf(optDelay+1:optDelay+N);                           % 考虑均衡延时
    dcap_zf = (y_zf >= 0);                                        % 判决
    SER_zf(i) = sum((d~=dcap_zf))/N;                              % 计算误符号率
end

%(4)BPSK的误符号率理论值
EbN0 = 10.^(EbN0_dB/10);
SER_theoretical = 0.5*erfc(sqrt(EbN0));

三、仿真结果

仿真结果如下:

信道A:

信道B:

信道C:

可见,两种均衡器的性能在信道A中最佳,信道A具有典型的理想电话信道的响应(信道响应在整个频带内逐渐变化,没有频谱零点)。对于频谱特性最差的信道C,MMSE均衡器的性能优于ZF均衡器。信道B的MMSE均衡器性能次佳。信道B仍然存在频谱零点,但不像信道C那样严重。迫零均衡器在信道B和信道C上的性能最差。这是因为迫零均衡器在计算抽头权重时,只考虑消除码间串扰,而忽略了信道噪声。

四、迫零均衡器和MMSE均衡器的实现

1.均衡器的MATLAB实现

迫零均衡器和MMSE均衡器的实现见:
(49)MATLAB实现迫零均衡器原理与代码

(53)MATLAB实现MMSE均衡器原理与代码

2.均衡器的性能测试

迫零均衡器和MMSE均衡器的性能仿真见:
(51)MATLAB迫零均衡器系统建模与性能仿真

(55)MMSE均衡器系统MATLAB建模与性能仿真


总结

线性均衡器在表现良好的信道上能提供良好的性能,这些信道不表现出频谱零点。另一方面,对于表现出频谱零点的信道,它们不足以完全消除码间串扰,这往往是实际情况。决策反馈均衡器为这个问题提供了一个有效的解决方案,这将在后续文章中给出介绍和仿真。



相关推荐
SeaTunnel1 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影1 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code2 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121312 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城4 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience5 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao5 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
j7~5 小时前
【Linux】二十二.《Linux 信号机制完全指南:表示、捕捉与处理》
linux·信号处理·volatile·可入重函数·保存信号
爱喝水的鱼丶5 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
脱胎换骨-军哥6 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust