格雷映射星座图讲解及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判断语句也可以实现,例如:运用数电中学过的‘真值表’来求出映射后的关系,直接写出关系式也可以,方法很多种。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请漫慢生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值