我是靠谱客的博主 悦耳绿草,最近开发中收集的这篇文章主要介绍格雷映射星座图讲解及MATLAB实现 part 1,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

运用MATLAB仿真QPSK信号星座图:

Part 1 不加高斯噪声

星座点在复域内对称地位于一个单位圆上,QPSK复信号矢量可表示为S˜m = e^(jθm) , m = 0, 1, 2, 3 , θm ∈ {π/4 , 3π/4 , 5π/4 , 7π/4 }.

在Matlab中,我们将二进制位序列建模为有限长向量。生成长度为50000的位矢量,然后使用格雷编码的QPSK调制将这些位映射到复信号上。
(注意这里50000指的是五万个点,例如:00, 01,11,10)

使用Matlab函数randi生成二进制位序列“0”和“1”的概率相等。
格雷编码星座图

clc;
clear all;
%%%%%%%%%%%%%%
data=randi([0 1],1,100000); %产生随机的100000个0-1随机数
% 将随机数分为两列
a=reshape(data,50000,2);
a1=a(:,1); %第一列代表实部
b1=a(:,2); %第二列代表虚部
s = a1+b1*i; % 产生50000长度的复信号
q1=0+0*i; %代表 θm=pi/4
q2=0+1*i;%代表 θm=3pi/4
q3=1+1*i;%代表 θm=5pi/4
q4=1+0*i;%代表 θm=7pi/4
sig=zeros(50000,1); % sig 代表原始信号,产生0数组,以备后面存储

for i=1:50000
    if (s(i)==q1)
       x=sqrt(2)/2; y=sqrt(2)/2; %对应00信号
       sig(i)=x+y*1i; %映射后的信号保存到sig数组中
    end

    if (s(i)==q2)
       x=-sqrt(2)/2; y=sqrt(2)/2;%对应01信号
       sig(i)=x+y*1i;%映射后的信号保存到sig数组中
    end
    if (s(i)==q3)
       x=-sqrt(2)/2; y=-sqrt(2)/2;%对应11信号
       sig(i)=x+y*1i;%映射后的信号保存到sig数组中
    end
    if (s(i)==q4)
       x=sqrt(2)/2; y=-sqrt(2)/2;%对应10信号
       sig(i)=x+y*1i;%映射后的信号保存到sig数组中
    end
end

figure(1);
plot(real(sig),imag(sig),'o');
title('QPSK modulation with Gray encoding');

当然,不用if判断语句也可以实现,例如:运用数电中学过的‘真值表’来求出映射后的关系,直接写出关系式也可以,方法很多种。

结果:在这里插入图片描述

(后续:第二部分讲解加上高斯噪声后的星座图)

最后

以上就是悦耳绿草为你收集整理的格雷映射星座图讲解及MATLAB实现 part 1的全部内容,希望文章能够帮你解决格雷映射星座图讲解及MATLAB实现 part 1所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部