|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
function y=cons(N)
%N为输入数据对应的星座图点数;
%该函数是根据星座图映射原理b={v(b-1),v(b-2),....v(0)}为输入数据对应的比特值,则星座点(X,Y)的整数值X和Y可用二进制补码
%表示为(v(b-1),v(b-3),..v(1),1)和(v(b-2),v(b-4),...v(0),1).最高位v(b-1)和v(b-2)分别是X
%和Y的符号位,当二者为0时表示为正值,为1时为负值。当b为偶数时,星座图映射成正方阵,当b为奇数时,星座图映射为长方阵
%clear all;
%clc;
%N=32;
b=ceil(log2(N));%星座图的比特数
jo=mod(b,2);%查看输入的比特位数是偶数位还是奇数位
p=zeros(N,b);%假设输入数据转化的二进制数后的矩阵
M(N,b+1)=0;%输入数据(0-1024间的整数)转化为比特和映射成对应的星座图
for k=0:(N-1)
u=dec2bin(k);%把十进制数0-(N-1)转换为二进制字符
w=zeros(1,length(u));
for i=1:length(u)
w(i)=str2num(u(i));%把字符转换为矩阵
end
v=[zeros((b-length(w)),1)',w];
p(k+1,:)=v;%输入数据转化后的比特矩阵
end
if(jo==0)%如果输入数据最大比特位数是偶数时
xv=p(:,1:2:(b-1));%生成星座图点的x 坐标值对应的比特位矩阵是1,3,5,7...b-1
l=length(xv(1,:));
yv=p(:,2:2:b);%生成星座图点的y坐标值对应的比特位矩阵是2,4,6,...b
t=length(yv(1,:));
else%如果输入数据最大比特位数是奇数时
xv=p(:,1:2:b);%生成星座图点的x 坐标值对应的比特位矩阵是1,3,5,7...b
l=length(xv(1,:));
yv=p(:,2:2:b-1);%生成星座图点的y坐标值对应的比特位矩阵是2,4,6,...b-1
t=length(yv(1,:));
end
for n=1:N
if(xv(n,1)==0)%如果x坐标值矩阵第一列的值等于0,表明是正值
xx(n)=sum(xv(n,:).*(2.^(0:l-1)))+1;%得到的对应x值
else%如果x坐标值矩阵第一列的值等于1,表明是负值
xf(n,:)=~xv(n,:);%关于原矩阵求反,为了求其补码
xx(n)=(-1)*(sum(xf(n,:).*(2.^(0:l-1)))+1);%得到的对应x值
end
if(yv(n,1)==0)%如果y坐标值矩阵第一列的值等于0,表明是正值
yy(n)=sum(yv(n,:).*(2.^(0:t-1)))+1;%得到的对应y值
else%如果y坐标值矩阵第一列的值等于1,表明是负值
yf(n,:)=~yv(n,:);%关于原矩阵求反,为了求其补码
yy(n)=(-1)*(sum(yf(n,:).*(2.^(0:t-1)))+1);%得到的对应y值
end
com(n)=xx(n)+j*(yy(n));%星座映射后输入数据转换后的复值
M(n,:)=[p(n,:) com(n)];%输入数据对应的比特和星座值
end
%plot(com,'*');
注释我懂,但是整体上很模糊,哪位高人说下你对这个程序的整体理解 |
|