• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-11
  • 语言: 其他
  • 标签: QPSK  MMSE  

资源简介

在这个代码中我们利用MMSE检测算法对4输入4输出传输系统进行信号检测

资源截图

代码片段和文件信息

%译码算法
clear all
Nt=4;%发射天线数
Nr=1;%接收天线数
num_S=4;%每次发射的符号数量
num_slot=4;%时隙数
nit=1000;%采样点数
M_qam=4;%调制方式
num_bit_per_sym=log2(M_qam);%每个符号含有的比特数
snr_min=0;%最小信噪比
snr_max=20;%最大信噪比

graph_inf_bit=zeros(snr_max-snr_min+12);
for SNR=snr_min:1:snr_max
    clc
    disp(‘Wait Until SNR=‘);%disp文本形式显示矩阵
    disp(snr_max);
    SNR  %显示仿真进度
    graph_inf_bit(SNR-snr_min+11)=SNR;%横坐标取值;当前SNR存储到graph_inf_bit的第一列中的SNR-snr_min+1位置
    num_error_sym=0;%初始化误符号数
    num_error_bit=0;%初始化误比特数
    for num_sym=1:nit
        s0=randint(num_Snum_bit_per_sym);%产生随机数列;rand随机产生0到1之间的数,randint随机产生0到1之间的整数,即0或1
        s=zeros(num_S1);
        for i=1:num_S
            if s0(i:)==[0 0]
                s(i1)=-1+j;
            elseif s0(i:)==[0 1] 
               s(i1)=-1-j;
            elseif s0(i:)==[1 0]
               s(i1)=1+j;
            else
               s(i1)=1-j;   
            end
        end  %调制过程;以上是4QAM映射,s0(i:)表示s0矩阵的第i行,所有列 
        
        h=(randn(NtNt)+j*randn(NtNt))/sqrt(2);%路径增益 满足正态分布的伪随机数4*1
        de_snr=10^(SNR/10);%将信噪比从db数换算成十进制
        sig=sqrt(Nt/de_snr);
        noise=sig*(randn(num_slotNr)+j*randn(num_slotNr))/sqrt(2);%归一化处理
        r=h*s+noise;   %接收到的信号4*1
       
%----------------------part 1-----MMSE检测算法--------------

W_mmse=inv(h‘*h+eye(4)./de_snr)*h‘;%inv表示取逆
ss=W_mmse*r;
%Signal demodulation
re_sym=zeros(num_Snum_bit_per_sym);%存放译码结果,num_bit_per_sym每个符号含有的比特数

%----------------------part 2-----成对译码-------------
 qam_space_2=[-1+j
        -1-j
        1+j
        1-j];
    for i=1:num_S
        for ii=1:M_qam
            f_1_3=(abs(ss(i1)-qam_space_2)).^2;
        end
        [M1 N1]=min(f_1_3);%M1为(f_1_3)的最小值,N1为对应的s3
        re_sym(i1)=qam_space_2(N1)
    end


        for i=1:length(re_sym)
             if re_sym(i)==-1+j
                re_sym1(i:)=[0 0] ;   
            elseif re_sym(i)==-1-j
                re_sym1(i:)=[0 1] ;
            elseif re_sym(i)==1-j
                re_sym1(i:)=[1 1] ;
             else re_sym1(i:)=[1 0] ;
            end
        end                                  
        de_sym=bi2de(re_sym1);%二进制转化为十进制
        de_s0=bi2de(s0);
        for rp=1:num_S
            if de_sym(rp1)~=de_s0(rp1)%发射矩阵与译码接收的矩阵比较
                num_error_sym=num_error_sym+1;
                for mm=1:num_bit_per_sym
                    if re_sym1(rpmm)~=s0(rpmm)
                        num_error_bit= num_error_bit+1;
                    end
                end
            end
        end
    end
    per_bit= num_error_bit/(num_S*num_bit_per_sym*nit);%误比特率的计算,误比特率=错误的比特数/(符号长度*错误符号个数*符号数)
    graph_inf_bit(SNR-snr_min+12)=per_bit;
 end 
x=graph_inf_bit(:1);
y=graph_inf_bit(:2);
semilogy(xy‘k-o‘);
grid on
hold on

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3095  2017-12-02 14:00  MMSE.m

----------- ---------  ---------- -----  ----

                 3095                    1


评论

共有 条评论