基于QPSK调制的多天线无编码通信系统中ZF、MMSE、SIC、ML符号检测性能比较。

article/2025/11/9 19:51:18

一、题目

        输入数据为猫图,并行分成5个数据流,每个都是QPSK调制,分别通过5个天线并行发送,单经瑞丽衰落信道(5x5信道中每个元素皆为CN(0,1)分布)外加AWGN,接收端为5个接收天线。比较ZF,MMSE,SIC,ML符号检测的BER性能。(无信道信源编码)

  1. 画出0:10:30dB输出猫图
  2. 在一个图中,画出0:10:30dB 4种算法的BER性能
  3. 在一个图中,画出4种算法仿真时间。分析时间复杂度与BER性能的关系。

二、题目分析

1、算法原理

        (1)ZF(零离差)算法:

        ZF 算法是一种线性检测算法,其核心思想是通过自适应滤波的方式减少通道的影响。ZF 算法中,需要对传输通道进行估计和反演,从而得到接收信号的估计值,然后根据估计值来计算符号的似然概率,选择具有最大似然概率的符号作为输出。

        (2)MMSE(最小均方误差)算法:

        MMSE 算法是一种非线性检测算法,其核心思想是通过最小化符号估计值与实际值之间的均方误差,提高检测性能。MMSE 算法中,需要通过先验概率分布和后验概率分布来优化符号的估计过程,从而获得更准确的符号估计值。

        (3)SIC(逐步干扰消除)算法:

        SIC 算法是一种迭代检测算法,其核心思想是通过消除多径干扰,提高符号检测精度。SIC 算法中,首先需要对接收信号进行多次干扰消除,然后根据估计值得到符号的似然概率,选择具有最大似然概率的符号作为输出。

        (4)ML(最大似然)符号检测算法:

        ML 算法是一种基于统计估计的非线性检测算法,它通过最大化符号的似然概率来实现符号检测。ML 算法中,需要对所有可能的符号序列进行枚举,计算其似然概率,然后选择具有最大似然概率的符号序列作为输出。

2、实现步骤

        题目总体上要求我们通过仿真比较ZF、MMSE、SIC、ML四种符号检测算法在不同信噪比下的BER性能和运行时间。具体步骤如下:

        (1)定义仿真参数:

        我们需要定义仿真所需的各种参数,包括调制方式、信道、信噪比、数据流数、天线数等。对于该题目,调制方式为 QPSK,信道为复高斯随机数信道,天线数为 5,数据流数为 5。

​​​​​​​        (2)生成随机数据:

        我们需要生成测试所需的随机猫图数据,该题目要求将数据并行分成 5 个数据流,每个流再进行 QPSK调制。

​​​​​​​        (3)发送信号:

        我们需要将生成的数据流通过 5 个天线并行发送,并经过单经瑞利衰落信道 (信道系数为 5x5 CN(0,1) 噪声矩阵),再加入 AWGN 噪声。

        (4)​​​​​​​接收信号:

        我们需要在接收端使用 5 个接收天线接收到发射的信号,并对接收到的信号进行复信道估计,以便后续的符号检测。(为了更简便地看到四种符号检测算法的性能区别,这一步假定信道已经做了精准的估计,所以直接使用原有的信道数据)

        (5)​​​​​​​符号检测:

         我们需要使用四种不同的符号检测算法 (ZF, MMSE, SIC, ML) 对接收到的数据进行解调和符号检测,以恢复原始猫图数据。

        (6)​​​​​​​计算误差率:

        我们需要将检测错误的比特数除以总比特数,计算各个算法在不同信噪比下的误比特率 (BER) 。   

        (7)​​​​​​​绘制输出猫图:

        我们需要将模拟的猫图数据绘制输出,以便观察模拟效果。

        (8)​​​​​​​绘制BER性能曲线:

        我们需要将四种符号检测算法在不同信噪比下的误比特率 (BER) 计算结果,绘制 BER 性能曲线,以方便比较四种算法的性能。

​​​​​​​        (9)计算仿真时间:

        我们需要在进行第6步的同时记录每种符号检测算法的仿真时间,并根据信噪比和数据流数的不同进行比较分析。

三、仿真结果 

​​​​​​​​​​​​​​​​​​​​​

(a) ZF                        (b) MMSE                       (c) SIC                  (d) ML

1 不同检测算法与不同信噪比下输出猫图

2 四种检测算法的输出误码率比较

3 四种检测算法的仿真时间对比

四、结果分析

        本次仿真主要比较ZF、MMSE、SIC、ML四种符号检测算法的性能。因为在信噪比SNR大于10dB之后,四种算法的误码率基本趋于0,故将信噪比范围限定在0至10dB,观察输出的各种指标。

        图1(a)(b)(c)(d)分别是ZF、MMSE、SIC、ML四种算法在0至10dB情况下输出的猫图。

        图2是四种检测算法的输出误码率比较。由图2可以看出,在任何信噪比情况下,ML算法都是四种算法中性能最好的,因为其牺牲了算法的复杂度来换取高性能,由图3可以看出ML是这四种算法中时间复杂度最高的一种。

        由图2还可以看出,当信噪比较低的时候,非线性检测算法 MMSE 比线性检测算法 ZF 和 SIC 更具优势。这是因为在低信噪比下,信号受到的噪声干扰非常大,而线性检测算法无法完全抵消这些噪声干扰。然而,非线性检测算法能够利用先验的信号统计信息估计符号的先验概率分布,从而更好地抵抗噪声干扰。

        而随着信噪比的提高,SIC 算法相对于 MMSE 算法在性能表现方面会出现逐渐超越的情况,这主要是因为SIC 算法可以通过多次干扰消除的方式来消除干扰(从图3也可以看出其正因为多次干扰消除的步骤,使得时间复杂度相对于ZF和MMSE稍高),从而最大化接收信号的质量。在高信噪比的情况下,SIC算法能够更好地将有效信号与噪声和干扰分离开来,减少信号受到噪声和干扰的影响,从而提高检测性能。

        综上所述,在使用不同的符号检测算法时,需要根据具体的情况进行选择和权衡,并进行适当的优化和调整,以实现最佳的性能和效果。

五、代码

clear ;
close all;% 生成QPSK调制的发送数据
M = 4; % 调制阶数
k = log2(M); % 每个符号所需比特数
img = imread('coolLearn.PNG');              % 读取彩色图片
data = reshape(img, [], 1);                 % 将图像数据展开为列向量
bData = dec2bin(data,8);                %转换为8位二进制数
bData1 = reshape(bData, [], k);         %将二进制数分为4组,每组2位
decData = bin2dec(bData1);              %将二进制转成十进制0-3
% 序列补位
N = length(decData);                    % 获得序列元素个数
zero_tail = mod(5-mod(N,5),5);          % 获得需要对输入序列进行补位的个数
decData_0 = [decData;zeros(zero_tail,1)]; % 末尾以0补位s_qam = qammod(decData_0, M, 'gray');       % QPSK调制发送数据   
X = reshape(s_qam, 5, []);                  % 将发送数据并行分成5个流% 设置信道参数
N_TX = 5;        % 发送天线数
N_RX = 5;        % 接收天线数
H = (randn(N_RX, N_TX) + 1j * randn(N_RX, N_TX)) / sqrt(2); % 生成信道矩阵
SNRdB = 0:2:10;       % 信噪比范围(单位:dB)
% 初始化BER和time结果变量
berZF = zeros(length(SNRdB), 1);
berMMSE = zeros(length(SNRdB), 1);
berSIC = zeros(length(SNRdB), 1);
berML = zeros(length(SNRdB), 1);
timeZF = zeros(length(SNRdB), 1);
timeMMSE = zeros(length(SNRdB), 1);
timeSIC = zeros(length(SNRdB), 1);
timeML = zeros(length(SNRdB), 1);%% 开始仿真过程
for i = 1:length(SNRdB)% 生成高斯白噪声sigma = sqrt(10^(-SNRdB(i)/10)); % 信噪比计算公式n = sigma*(randn(N_RX,length(X))+1i*randn(N_RX,length(X)))/sqrt(2);   % 生成接收信号Y = H*X + n;%% ZF符号检测tstart = tic; % 计算运行时间   tZF = pinv(H.'*H)* H.' *Y;      % ZF检测tZF1 = reshape(tZF, [], 1);     % 重构为向量sZF = qamdemod(tZF1, M, 'gray');% QPSK解调toc(tstart);timeZF(i) = toc(tstart); % 记录运行时间[~,berZF(i)] = biterr(decData_0 , sZF)% 计算ZF误码率sZF = sZF(1: end-zero_tail);    %去掉补位的零ZFb1 = dec2bin(sZF,2);ZFb2 = reshape(ZFb1,[],8);ZFd1 = bin2dec(ZFb2);           %二进制转十进制ZFd2 = reshape(ZFd1,size(img))/255;figure(1)subplot(length(SNRdB),1,i);imshow(im2uint8(ZFd2));%画猫图title(['SNRdB=',num2str(SNRdB(i)),'dB']);%% MMSE符号检测tstart = tic; % 计算运行时间gamma = 10 ^ (- SNRdB(i) / 10); %设置信噪比参数LAMBDA = gamma * eye(N_RX); % 计算正比例参数wMMSE = H' * pinv(H * H' + LAMBDA);%计算MMSE检测权重tMMSE = wMMSE * Y;%进行MMSE检测tMMSE1 = reshape(tMMSE, [], 1);%重构为向量sMMSE = qamdemod(tMMSE1, M, 'gray');%QAM解调toc(tstart);timeMMSE(i) = toc(tstart); % 记录运行时间[~,berMMSE(i)] = biterr(decData_0 , sMMSE)%计算MMSE误码率sMMSE = sMMSE(1: end-zero_tail);%去掉补位的零MMSEb1 = dec2bin(sMMSE,2);MMSEb2 = reshape(MMSEb1,[],8);MMSEd1 = bin2dec(MMSEb2);%二进制转十进制MMSEd2 = reshape(MMSEd1,size(img))/255; figure(2)subplot(length(SNRdB),1,i);imshow(im2uint8(MMSEd2));%画猫图title(['SNRdB=',num2str(SNRdB(i)),'dB']);%% SIC检测tstart = tic; % 计算运行时间squares_sum = sum(abs(H) .^2, 1);% 计算H每列的平方和[~, sort_idx] = sort(squares_sum);% 对平方和进行排序,并返回排序后的索引H_sorted = H(:,sort_idx);  % 按索引顺序排序H每列Y_temp = Y ;              tSIC = zeros(size(X));     %给还原的数据预分配一个数组空间for sic_i = 1:N_TXX_temp = pinv(H_sorted.'*H_sorted)* H_sorted.' * Y_temp;   % ZFtSIC(end-sic_i+1,:) = qamdemod(X_temp(end,:),4); % 取ZF功率最大的一行,解调Y_temp = Y_temp - H_sorted(:,end)*qammod(tSIC(end-sic_i+1,:),4); % 更新Y_tempH_sorted = H_sorted(:,1:end-1);% 删除已估计的列end% 恢复原始矩阵行数顺序[~, original_idx] = sort(sort_idx);tSIC = tSIC(original_idx, :);toc(tstart);timeSIC(i) = toc(tstart); % 记录运行时间sSIC = reshape(tSIC, [], 1);%sic过程中已经解调,直接重构为向量[~,berSIC(i)] = biterr(decData_0 , sSIC)%计算SIC误码率sSIC = sSIC(1: end-zero_tail);%去掉补位的零SICb1 = dec2bin(sSIC,2);SICb2 = reshape(SICb1,[],8);SICd1 = bin2dec(SICb2);%二进制转十进制SICd2 = reshape(SICd1,size(img))/255;figure(3)subplot(length(SNRdB),1,i);imshow(im2uint8(SICd2));%画猫图title(['SNRdB=',num2str(SNRdB(i)),'dB']);%% ML检测tstart = tic; % 计算运行时间permutation_list = (dec2base(0:M^N_TX-1, 4) - '0').'; % 生成所有可能的符号排列permutation_list_qam = qammod(permutation_list,4);  % 对可能的符号进行QPSK调制num_permutations = size(permutation_list,2);        % 统计有多少种符号排序distance = zeros(1,num_permutations);       %初始化一个距离矩阵tML = zeros(size(X));                       %给还原的数据预分配一个数组空间for ml_i = 1:length(Y)ml_xk_matrix = H*permutation_list_qam;distance = sum(abs(Y(:,ml_i) - ml_xk_matrix).^2);[~, ml_index] = min(distance);tML(:,ml_i) = permutation_list(:,ml_index);endtoc(tstart);timeML(i) = toc(tstart); % 记录运行时间sML = reshape(tML, [], 1);              %ML过程已解调,直接重构为向量[~,berML(i)] = biterr(decData_0 , sML)  %计算ML误码率sML = sML(1: end-zero_tail);            %去掉补位的零MLb1 = dec2bin(sML,2);MLb2 = reshape(MLb1,[],8);MLd1 = bin2dec(MLb2);%二进制转十进制MLd2 = reshape(MLd1,size(img))/255;figure(4)subplot(length(SNRdB),1,i);imshow(im2uint8(MLd2));title(['SNRdB=',num2str(SNRdB(i)),'dB']);
end% 绘制结果图像
figure(5);
semilogy(SNRdB, berZF, 'b-o',...SNRdB, berMMSE, 'r-s',...SNRdB, berSIC, 'g-d',...SNRdB, berML, 'm-p', 'LineWidth', 2);
grid on;
xlabel('SNR(dB)');
ylabel('BER');
legend('ZF', 'MMSE', 'SIC', 'ML');figure(6);
semilogy(SNRdB, timeZF, 'b-o',...SNRdB, timeMMSE, 'r-s',...SNRdB, timeSIC, 'g-d',...SNRdB, timeML, 'm-p','LineWidth', 2);
grid on;
xlabel('SNR(dB)');
ylabel('Time (s)');
legend('ZF', 'MMSE', 'SIC', 'ML');


http://chatgpt.dhexx.cn/article/FgbWHCI0.shtml

相关文章

mmse 语音降噪_懷舊篇, 單通道降噪, MMSE

記錄一下單通道降噪的一個經典方法, MMSE-STSA, MMSE-LSA, 已經是 1984 左右的文章了. 單通道降噪 OMLSA 也從這衍生出來的. 我們先從 MMSE-STSA 說起, 全名是 minimum mean-square error short time spectral amplitude. $y(t)x(t)d(t),0leq tleq T$ $x$, $d$, $y$ 分別是 spe…

MMSE法用于MIMO系统

MMSE法用于MIMO系统 MMSE方法用于MIMO系统程序如下: 之前讲到过迫零响应法(ZF)在MIMO系统中的应用,而另外一种均衡方法也常常用在不理想传输信道中,这就是最小误差法(Minimum Mean Square Error&#xff0c…

信道估计---LS、MMSE、LMMSE准则

本期目录 引言基本假设LS信道估计LS信道估计工程实现 MMSE信道估计LMMSE信道估计LMMSE实现 引言 信道估计主要分为非盲信道估计和盲信道估计。顾名思义,非盲信道估计需要使用基站和接收机均已知的导频序列进行信道估计,并使用不同的时频域插值技术来估计…

MIMO系统Vblast检测算法误码率matlab仿真,对比了zf,mmse,mmse-sic,zf-sic,osic

目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 3.1zf 3.2mmse 3.3osic 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 ................................................ for i1:length (SNRs)SNR(i) 10^(SNR…

MIMO系统信号检测之MMSE推论

定义 MMSE (Minimum Mean Square Error)表示最小均方误差。 它是一种以最小化接收数据的MSE为目的的接收机模型。过程 我们从以下最简单的信道模型开始: MMSE是一种后处理均衡算法。 它用于找出尽可能接近原发送数据(X)的接收数据(Y)。 以下图示意,M…

MMSE (Minimum Mean Square Error)均衡原理讲解

MMSE是一种将接收数据的MSE(均方误差)最小化的模型。有了这句话,很多问题就会在你的脑海中蹦出来。 什么是均方误差?最小化MSE "的物理含义是什么? 等等。 让我们从一个我们现在已经非常熟悉的信道模型开始。(我希…

MMSE(Minimum Mean Square Error)

MMSE是一种最小化接收数据的MSE(均方误差)的模型。关于这句话,你的脑海里就会出现很多问题: 什么是均方误差? “最小化MSE”的物理意义是什么? 让我们从一个我们现在非常熟悉的信道模型开始. MMSE作为一种均衡器,是一种后处理算法,它帮助…

信道估计之MMSE算法

信道估计之MMSE算法 前言MMSE估计的原理总结 前言 前篇分析了LS信道估计算法,也说明了由于没有考虑SNR的影响,所以LS算法不适合在低信噪比的情况下使用。本篇来学习信道估计的另外一种常用的算法–MMSE。 为什么说LS没有考虑噪声大小的情况呢&…

冲顶数据产品经理笔试题及解答

一个社交APP, 它的新增用户的次日留存、7日留存、30日留存为52%、25%、14%, 请模拟出来,每天如果日新增6万用户,那么30天后,它的日活数会达到多少? 请使用Excel做答,截图并且说明计算方法。 从下面是某出行公司周报相关报表&…

做APP,从头到尾产品经理需要做什么?—项目上线后

摘要: 项目上线后,作为产品需要关注的事情有几个方面,一是APP数据,二是用户反馈,三是需求提取。这三个方面的流程见下。 之前给大家介绍了两个部分,项目启动前和项目执行中。项目上线后,作为产品需要关注的…

移动APP产品经理必学的工具和必上的酷站

一、移动APP产品经理工具篇: 1、processon (产品必备软件) ProcessOn是一个在线协作绘图平台,支持在线创作流程图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。一款免费在线协同作图软件ProcessOn 之前25学堂也跟大家分享过几个优秀的APP原型…

产品经理的七个阶段

一、第一阶段:需求细化与研发跟进 这个阶段基本上每天的工作都是写PRD、画原型、做DEMO。也就是基本处于一种被动分配任务的状态,接收的都是“二手需求”。一般而言自己思考产生的产品优化会比较少。也就是目前IT行业里面数百万的产品助理,甚…

得到app产品体验报告

产品体验报告-得到app 一、产品概况 1.1体验环境 体验产品:得到app软件版本:v7.6.0体验机型:iPhone8操作系统:iOS13.1.2体验时间:2019.12.08 1.2产品简介 类型:在线教育、知识付费、知识服务应用 slog…

广联达产品经理笔试题目

你喜欢网上购物吗,请列举出京东和淘宝的区别(如果没使用过京东和淘宝,列举其他的网上购物产品区别也可)? 参考答案: (产品定位,商家入驻,用户群体、物流、仓储、真货假货…

产品经理面试技巧

互联网公司的新一轮春招已经开始,在此总结下自己之前面试阿里、百度、腾讯等公司的经历,分享一下自己一路走来的经验感想。 我 杭州电子科技大学(非211、985) 本科信息管理与信息系统专业 2015年4月在阿里巴巴移动事业部实习 20…

产品经理入门知识点

😄,作为一个全方面发展的程序媛,第一步当然要先深入需求方啦。以下内容均为本人在编程之外学习的产品经理课程的归纳总结。属于精简重点版。(偷偷约束一下啥也不懂的产品经理) *产品经理定位 为产品和用户服务&#x…

得物APP产品研究

得物APP产品研究 得物立足于年轻消费者市场,在懂得如何发掘年轻人的心理的情况下挖局年轻人的需求,也随着潮元素的迅速张开的市场,得物在潮流的领域上开拓出了新的天地,基于互联网大数据的时代-典型的马太效应,使得得物变成了年轻…

产品经理一

前言:产品思维产品技能 产品经理的基础认知,跑,从0到1搭建一个实战项目---电商 一、产品经理的基础认知: 1.产品经理的定义: a产品经理:设计者,规划者,推动者,运营者—…

智能硬件产品经理跟纯APP产品经理的主要区别在哪里?

最近在混智能硬件的产品经理圈,一直在思考,产品的种类很多,硬件类的产品经理跟纯APP的区别主要在哪里呢?我想我们这里很多的各种类别的产品经理,大家都来说说,自己思维里,各种产品的差别跟主要能…

产品经理做APP从头到尾的所有工作流程详解!

本文转载自互联网,如有侵权,请联系我及时删除。谢谢。 一、项目启动前 从事产品的工作一年多,但自己一直苦于这样或者那样的困惑,很多人想要从事产品,或者老板自己创业要亲自承担产品一职,但他们对产品这个…