您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做|FPGA代做|Python代做--RAKE接收机MATLAB仿真

时间:2019-1-13 2:39:49 点击:

  核心提示:MATLAB代做|FPGA代做|Python代做--RAKE接收机MATLAB仿真...
clear all;
Numusers = 1;
Nc = 16;    %扩频因子
ISI_Length = 1;%每径延时为ISI_Length/2
EbN0db = [0:1:15];%信噪比,单位db
Tlen = 8000;    %数据长度

%误比特率的初始值
Bit_Error_Number1 = 0; 
Bit_Error_Number2 = 0;
Bit_Error_Number3 = 0;

%每径功率因子
power_unitary_factor1 = sqrt( 5/9 );    
power_unitary_factor2 = sqrt( 3/9 );
power_unitary_factor3 = sqrt( 1/9 );

s_initial = randsrc( 1, Tlen );     %数据源

%产生walsh矩阵
wal2 = [ 1 1; 1 -1 ];
wal4 = [wal2 wal2; wal2 wal2*(-1)];
wal8 = [wal4 wal4; wal4 wal4*(-1)];
wal16 = [wal8 wal8; wal8 wal8*(-1)];

%扩频
s_spread = zeros( Numusers, Tlen*Nc );
ray1 = zeros( Numusers, 2*Tlen*Nc );
ray2 = zeros( Numusers, 2*Tlen*Nc );
ray3 = zeros( Numusers, 2*Tlen*Nc );
for i = 1:Numusers
    x0 = s_initial( i,: ).'*wal16( 8,: );
    x1 = x0.';
    s_spread( i,: ) = ( x1(:) ).';
end
%将每个扩频后的输出重复为两次,有利于下面的延迟(延迟半个码元)
ray1( 1:2:2*Tlen*Nc - 1 ) = s_spread( 1:Tlen*Nc );
ray1( 2:2:2*Tlen*Nc ) = ray1( 1:2:2*Tlen*Nc - 1 );

%产生第二径和第三径信号
ray2( ISI_Length + 1:2*Tlen*Nc ) = ray1( 1:2*Tlen*Nc - ISI_Length );
ray2( 2*ISI_Length + 1:2*Tlen*Nc ) = ray1( 1:2*Tlen*Nc - 2*ISI_Length );

for nEN = 1:length( EbN0db )
    en = 10^( EbN0db(nEN)/10 );     %将Eb/N0的db值转化成十进制数值
    sigma = sqrt( 32/(2*en) );      %噪声系数
    %接收到的信号demp
    demp = power_unitary_factor1*ray1+...
           power_unitary_factor2*ray2+...
           power_unitary_factor3*ray3+...
           ( rand( 1,2*Tlen*Nc )+randn( 1,2*Tlen*Nc )*i )*sigma;
    dt = reshape( demp,32,Tlen )';
    %将walsh码重复为两次
    wal16_d(1:2:31) = wal16(8,1:16);
    wal16_d(2:2:32) = wal16(8,1:16);
    %解扩后rdata1为第一径输出
    rdata1 = dt*wal16_d(1,:).';
    %将walsh码延迟半个码片
    wal16_delay1(1,2:32) = wal16_d(1,1:31);
    %解扩后rdata2为第二径输出
    rdata2 = dt*wal16_delay1(1,:).';
    %将walsh码延迟一个码片
    wal16_delay2(1,3:32) = wal16_d(1,1:30);
    wal16_delay2(1,1:2) = wal16_d(1,31:32);
    %解扩后rdata3为第三径输出
    rdata3 = dt*wal16_delay2(1,:).';

    p1 = rdata1'*rdata1;
    p2 = rdata2'*rdata2;
    p3 = rdata3'*rdata3;
    p = p1 + p2 + p3;
    u1 = p1/p;
    u2 = p2/p;
    u3 = p3/p;

    %最大比合并
    rd_m1 = real( rdata1*u1+rdata2*u2+rdata3*u3);
    %等增益合并
    rd_m2 = (real(rdata1+rdata2+rdata3))/3;
    %选择式合并
    u = [u1,u2,u3];
    maxu = max(u);
    if(maxu==u1)
        rd_m3 = real(rdata1);
    else
        if(maxu==u2)
            rd_m3 = real(rdata2);
        else rd_m3 = real(rdata3);
        end
    end

    %三种方法判决输出
    r_Data1 = sign(rd_m1)';
    r_Data2 = sign(rd_m2)';
    r_Data3 = sign(rd_m3)';
    %计算误比特率
    Bit_Error_Number1 = length(find(r_Data1(1:Tlen) ~= s_initial(1:Tlen)));
    Bit_Error_Rate1(nEN) = Bit_Error_Number1/Tlen;
    Bit_Error_Number2 = length(find(r_Data2(1:Tlen) ~= s_initial(1:Tlen)));
    Bit_Error_Rate2(nEN) = Bit_Error_Number2/Tlen;
    Bit_Error_Number3 = length(find(r_Data3(1:Tlen) ~= s_initial(1:Tlen)));
    Bit_Error_Rate3(nEN) = Bit_Error_Number3/Tlen;
end

semilogy(EbN0db,Bit_Error_Rate1,'r*-');hold on;
semilogy(EbN0db,Bit_Error_Rate2,'bo-');hold on;
semilogy(EbN0db,Bit_Error_Rate3,'g.-');
legend('最大比合并','等增益合并','选择式合并');
xlabel('信噪比');
ylabel('误比特率');

title('三种主要分集合并方式性能比较');


联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

作者:RAKE接收机 来源:RAKE接收机
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做|matlab代写(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment