QPSK调制解调Matlab实现(ing待补充说明)

自写

%QPSK
close all;clc;
%思路:1.输入一组随机初始信息x=[01矩阵];
%      2.按两两一组通过for循环判别4种组合,分别对应星座图4个点
%      3.做星座图        
%      a.过程中考虑过将01序列两两分开表示出来,不知是否有必要,未实现
%      b.考虑两两分开后直接定位一个组合,映射到星族图,未实现.利用y-
a=randi([0,1],1,20) %产生一组随机初始信息矩阵
[r,c] = size(a)     % 读取行r、列c
y=[];  p=1; 
 for u = 1:r      % 建立for循环嵌套
    for t=1:2:c
        k=t+1;
        if a(u,t)==0&&a(u,k)==0 
            y(p)=-1-1i;
        elseif a(u,t)==0&&a(u,k)==1
            y(p)=-1+1i;
        elseif a(u,t)==1&&a(u,k)==0 
          y(p)=1-1i;
        else a(u,t)==1&&a(u,k)==1
          y(p)=1+1i; 
        end
        p=p+1;
    end
 end                             %for循环,将4中组合映射到星座图位置
    scatterplot(y)               %画星座图
%     v=pskdemod(y,4)
%     scatterplot(v) 
ys = awgn(y,10);
scatterplot(ys)
[n,m] = size(ys)
q=[];j=1;
for b=1:n      % qpsk解调
    for d=1:m
        if abs(ys(b,d))<0&&imag(ys(b,d))<0
            q(b,j)=0;q(b,j+1)=0; 
        elseif abs(ys(b,d))<0&&imag(ys(b,d))>0
            q(b,j)=0;q(b,j+1)=1;
        elseif  abs(ys(b,d))>0&&imag(ys(b,d))<0
            q(b,j)=1;q(b,j+1)=0;
        else  abs(ys(b,d))>0&&imag(ys(b,d))>0
            q(b,j)=1;q(b,j+1)=1;
        end
        j=j+2;
    end
end
ys
a
q
numErrs = symerr(a,q) %输出与输入相比,计算错误比特数

归一化相关转于:https://blog.csdn.net/hudada19/article/details/97623075
星座映射归一化因子是如何得到的?

答:所有能量求平均后开方得到的就是波形幅度值,其倒数就是归一化因子。比如,

比如16QAM,取值为,能量为2有4个星座点,为10有8个点(±1±3i),为18有4个点,共有能量72+80+8=160,然后这16个点的等概率分布是16分之1,所以要160除以16=10,这是平均能量,其平均后的波形幅度为sqrt(10),而QPSK共4个能量为2的星座,出现概率为四分之一,所以为8除以4=2,结果为sqrt(2),其他类推。
能量(功率)归一化有什么用?

答:添加功率归一化因子,目的在于使得不同调制方式(或者说对于所有映射方式)都能够取得相同的平均功率。

实际上,归一化是为了方便系统性能的比较,所以就要分清比较的模块是什么。比如,信道编码的增益问题,无论有无信道编码,比特能量是一样的,所以比较要以Eb/No为基准,而不是以进入信道前的符号能量Es/No为基准。再比如,在比较空时码系统和单天线系统中,还是以进入时空码编码前信号能量为基准,那么发送时的总能量一致,即时空码系统中各天线发射功率总和应和单天线系统发射功率相同。一般而言,归一化都在发射端处理。

在仿真OFDM的IFFT变换时,为什么要乘以sqrt (fft的点数) 进行归一化?

答:在matlab中做完IFFT后要乘以sqrt(fft的点数),这样才能保证时域和频域上的功率相同,否则在计算功率上容易出错,如果不乘的话你只要知道也是可以的。至于信号功率归一化,是为了更方便的计算SNR,是为了在相同的标准下比较性能。

你可能感兴趣的:(QPSK,matlab)