草庐IT

恒模盲均衡算法(CMA)及修正MCMA算法

qq_1432825237 2025-02-02 原文

提供源代码及说明文档

伸手党走远点儿。上来就口吐莲花的请自重,注意自己的素质和境界。

恒模盲均衡算法(CMA)
        在各种盲均衡算法中,恒模算法(CMA)是一种重要的盲信道均衡方法,广泛地应用在了数字通信系统中,这种算法隐含地利用了接收信号的高阶统计量。结构框图可由下图所示。

误差函数可定义为:

其中R2是一个依赖于信源序列高阶统计量的一个实常数,可定义如下式,p由信源序列决定:

(目前见到的QAM信号,P=2)

抽头系数更新可由下式表示:

 系统均衡输出可表示为:

修正MCMA算法
MCMA 针对 CMA 的代价函数进行改进,将其分为实部和虚部两部分,通过对实部和虚部同时进行信道均衡实现对载波相位恢复。MCMA 的代价函数为:

式中 R2,R 和 R2,I 分别由输入序列的实部和虚部计算,其定义式为:

类似于CMA,易得 MCMA 的误差函数为:

将误差e(k)代入下式,可得更新公式:

其中,

y(k)为均衡器的输出。

MCMA 将均衡器输入信号分为实部和虚部,也就是将复数运算简化为实数运算,即转换为信号的幅度和相位信息,有效降低了计算复杂度,便于硬件实现。

二、关键参数理论分析(算法性能分析)
1.均衡器抽头个数
均衡器采用 17 阶横向抽头结构,中心抽头系数初始化为 1,其他抽头系数初始化为 0。(均衡器抽头个数对均衡结果有影响,但对最终误码率影响不大)

2.CMA与MCMA算法性能差异
MCMA分别使用实况及虚部信息进行均衡(包含了相位信息),而CMA只使用了幅度信号进行均衡。因此:

MCMA对信息的利用更精确和细化,其性能必然优于CMA
CMA无法校正相位旋转,MCMA可以进行相位校正
CMA只关心数模值,可能会带来附加的相位旋转
仿真中,使用两组信道冲击响应来验证算法性能。

第1组:h= [0.26, 0.93, 0.26];  

第2组:h = [0.26-i*0.1, 0.93-i*0.2, 0.26];

第1组为实系数,不会产生相位旋转;第二级为复系数,会导致星座图产生相位旋转。

3.迭代步长
若步长 μ 设置较小,虽然收敛效果很好但是收敛的速度却很慢;若步长 μ 设置较大,虽然收敛速度加快但是稳态误差较大,会导致误码率性能下降,通过调整步长 μ使系统的均衡性能达到最优。

三、仿真验证(算法性能验证)
3.1代码结构说明
恒定参数
M = 16;                      % Size of signal constellation

N_seq = 1e4;                 % Number of symbols

k = log2(M);                 % Number of bits per symbol

n = N_seq*k;                 % Number of bits to process

numSamplesPerSymbol = 1;     % Oversampling factor

生成信号
%% Generate 16QAM signal

% Create a binary data stream as a column vector.

rng default                 % Use default random number generator

dataIn = randi([0 1],n,1);  % Generate vector of binary data

% Perform a bit-to-symbol mapping.

dataInMatrix = reshape(dataIn,length(dataIn)/k,k);   % Reshape data into binary k-tuples, k = log2(M)

dataSymbolsIn = bi2de(dataInMatrix);                 % Convert to integers

% Apply modulation.

dataModG = qammod(dataSymbolsIn,M);                  % Gray coding, phase offset = 0

加入信道
z=filter(h,1,dataModG);

len_h = length(h);

% Calculate the SNR when the channel has an Eb/N0 = 10 dB.

EbNo = 15;

snr = EbNo + 10*log10(k) - 10*log10(numSamplesPerSymbol);

% Pass the signal through the AWGN channel

receivedSignalG = awgn(z,snr,'measured');

仿真结果
误码率性能对比
实信道

以h= [0.26, 0.93, 0.26]为例,设迭代步长为mu = 1e-4; EbNo = 15;

星座图如下:

无均衡(绿色为经信道后的信号,黑色为理想信号)

CMA均衡

MCMA均衡

从上图可看出:

均衡后,星座图汇聚,均衡算法起效。

MCMA星座图汇聚效果更好,星座图方正;CMA汇聚效果略差,且星座图有轻微旋转。推测MCMA算法误码率低于CMA算法。仿真结果与第二部分理论分析一致。

单次仿真误码率:

Without equalization,the Gray coding bit error rate = 5.00e-01, based on 4996 errors

With CMA equalization,The Gray coding bit error rate = 7.50e-02, based on 749 errors

With MCMA equalization,The Gray coding bit error rate = 1.41e-02, based on 141 errors

可以看出,不均衡条件下,误码率为50%,解调结果完全不可信。均衡后,误码率<10%,且MCMA算法误码率显著小于CMA算法。

复信道

以h=[0.26-i*0.1, 0.93-i*0.2, 0.26]为例,设迭代步长为mu = 1e-4; EbNo = 15;

过程图略。

均衡后,星座图汇聚,均衡算法起效。

MCMA星座图汇聚效果更好,星座图方正;CMA汇聚效果略差,且星座图有旋转。推测MCMA算法误码率低于CMA算法。仿真结果与第二部分理论分析一致。
 

有关恒模盲均衡算法(CMA)及修正MCMA算法的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  3. ruby - 在 Ruby 中实现 Luhn 算法 - 2

    我一直在尝试用Ruby实现Luhn算法。我一直在执行以下步骤:该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:从最右边的校验位开始向左移动,每第二个数字的值加倍。将乘积的数字(例如,10=1+0=1、14=1+4=5)与原始数字的未加倍数字相加。如果总模10等于0(如果总和以零结尾),则根据Luhn公式该数字有效;否则无效。http://en.wikipedia.org/wiki/Luhn_algorithm这是我想出的:defvalidCreditCard(cardNumber)sum=0nums=cardNumber.to_s.s

  4. Ruby 斐波那契算法 - 2

    下面是我写的一个计算斐波那契数列中的值的方法:deffib(n)ifn==0return0endifn==1return1endifn>=2returnfib(n-1)+(fib(n-2))endend它工作到n=14,但在那之后我收到一条消息说程序响应时间太长(我正在使用repl.it)。有人知道为什么会这样吗? 最佳答案 Naivefibonacci进行了大量的重复计算-在fib(14)fib(4)中计算了很多次。您可以将内存添加到您的算法中以使其更快:deffib(n,memo={})ifn==0||n==1returnnen

  5. ruby-on-rails - Rails add_index 算法 : :concurrently still causes database lock up during migration - 2

    为了防止在迁移到生产站点期间出现数据库事务错误,我们遵循了https://github.com/LendingHome/zero_downtime_migrations中列出的建议。(具体由https://robots.thoughtbot.com/how-to-create-postgres-indexes-concurrently-in概述),但在特别大的表上创建索引期间,即使是索引创建的“并发”方法也会锁定表并导致该表上的任何ActiveRecord创建或更新导致各自的事务失败有PG::InFailedSqlTransaction异常。下面是我们运行Rails4.2(使用Acti

  6. ruby - 趋势算法 - 2

    我正在开发一个类似微论坛的项目,其中一个特殊用户发布一条快速(接近推文大小)的主题消息,订阅者可以用他们自己的类似大小的消息来响应。直截了当,没有任何形式的“挖掘”或投票,只是每个主题消息的响应按时间顺序排列。但预计会有很高的流量。我们想根据它们引起的响应嗡嗡声来标记主题消息,使用0到10的等级。在谷歌上搜索了一段时间的趋势算法和开源社区应用示例,到目前为止已经收集到两个有趣的引用资料,但我还没有完全理解它们:Understandingalgorithmsformeasuringtrends,关于使用基线趋势算法比较维基百科页面浏览量的讨论,在SO上。TheBritneySpearsP

  7. ruby-on-rails - EC2 实例在负载均衡器中停止服务 - 2

    我有一个EC2实例正在运行。我有一个负载均衡器,它与EC2实例相关联。PingTarget:HTTP:3001/healthCheckTimeout:5secondsInterval:24secondsUnhealthythreshold:2Healthythreshold:10现在该实例显示为OutofService。我什至尝试更改监听端口等等。一切正常,直到重新启动我的EC2实例。任何帮助将不胜感激。仅供引用:我有一个在端口3001上运行的Rails应用程序,我有一个用于HTTP:80(loadbalancer)到HTTP:3001的监听器。我还在终端中通过ssh检查了正在运行的应

  8. Ruby - 不支持的密码算法 (AES-256-GCM) - 2

    我收到错误:unsupportedcipheralgorithm(AES-256-GCM)(RuntimeError)但我似乎具备所有要求:ruby版本:$ruby--versionruby2.1.2p95OpenSSL会列出gcm:$opensslenc-help2>&1|grepgcm-aes-128-ecb-aes-128-gcm-aes-128-ofb-aes-192-ecb-aes-192-gcm-aes-192-ofb-aes-256-ecb-aes-256-gcm-aes-256-ofbRuby解释器:$irb2.1.2:001>require'openssl';puts

  9. java实现Dijkstra算法 - 2

    文章目录一.Dijkstra算法想解决的问题二.Dijkstra算法理论三.java代码实现一.Dijkstra算法想解决的问题解决的问题:求解单源最短路径,即各个节点到达源点的最短路径或权值考察其他所有节点到源点的最短路径和长度局限性:无法解决权值为负数的情况二.Dijkstra算法理论参数:S记录当前已经处理过的源点到最短节点U记录还未处理的节点dist[]记录各个节点到起始节点的最短权值path[]记录各个节点的上一级节点(用来联系该节点到起始节点的路径)Dijkstra算法步骤:(1)初始化:顶点集S:节点A到自已的最短路径长度为0。只包含源点,即S={A}顶点集U:包含除A外的其他顶

  10. 对于体育新闻中文文本关键字提取有哪些关键字提取算法及其步骤 - 2

    对于体育新闻中文文本的关键字提取,常用的算法包括TF-IDF、TextRank和LDA等。它们的基本步骤如下:1.TF-IDF算法: -将文本进行分词和词性标注处理。-统计每个词在文本中的词频(TF)。-计算每个词在整个语料库中出现的文档频率(DF)和逆文档频率(IDF)。-计算每个词的TF-IDF值,并按照值的大小进行排序,选择排名前几的词作为关键字。2.TextRank算法:-将文本进行分词和词性标注处理。-将分词结果转化成图模型,每个词语为节点,根据词语之间的共现关系建立边。-对图模型进行迭代计算,计算每个节点的PageRank值,表示该节点的重要性。-选择排名前几的节点作为关键字。3.

随机推荐