当前位置: 首页 > article >正文

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

文章目录

  • 前言
  • 一、仿真测试模型
  • 二、仿真代码
  • 三、仿真结果
  • 四、迫零均衡器和MMSE均衡器的实现
    • 1.均衡器的MATLAB实现
    • 2.均衡器的性能测试
  • 总结


前言

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


一、仿真测试模型

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

仿真测试模型如下:

在这里插入图片描述

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

下面给出MATLAB代码。

二、仿真代码

代码如下:

%---------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建模与性能仿真


总结

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




http://www.kler.cn/a/379222.html

相关文章:

  • Android AndroidManifest 文件内标签及属性
  • 使用 MONAI Deploy 在 AMD GPU 上进行全身分割
  • 使用NCNN在树莓派部署深度学习模型流程
  • 25国考照片处理器使用流程图解❗
  • 数据结构 —— AVL树
  • 【4】函数与结构体
  • 用图说明 CPU、MCU、MPU、SoC 的区别
  • Chromium127编译指南 Linux篇 - 同步第三方库以及Hooks(六)
  • blender导入的图片渲染看不见,图片预览正常,但渲染不出
  • 什么影响网站的SEO排名
  • 【Excel】常用公式记录
  • Dubbo 构建高效分布式服务架构
  • 项目推荐:指针切换器
  • 骨传导耳机品牌排行榜前十名推荐!五款王牌爆款机型推荐!
  • warmup
  • (自用复习题)常微分方程08
  • 手游和应用出海资讯:可灵AI独立APP即将上架;Rollic在英国推出芭比合并解谜手游
  • UE Mutiplayer(1):网络概述
  • SpringBoot音乐天地:构建Web音乐网站
  • sublime python出现中文乱码怎么办
  • 文件上传和文件包含
  • 国家电网某话务中心IT基础监控应用案例
  • Vue3.js - 计算属性监视属性
  • Linux运行Java程序,并按天输出日志
  • 数论——约数
  • 【Android】使用productFlavors构建多个变体