Rake接收机
使用选择性合并、最大比值合并、等增益合并算法进行Rake接收机的仿真

clc,clear;       %使用选择性合并、最大比值合并、等增益合并算法进行Rake接收机的仿真
user = 1;       %用户数
Nc = 16;        %扩频因子
ISI_Length = 1; %码元长度
SNR = [0:1:10]; %信噪比(dB)
Tlen = 5000;    %数据长度
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( user, Tlen * Nc );
ray1 = zeros( user, 2*Tlen*Nc );
ray2 = zeros( user, 2*Tlen*Nc );
ray3 = zeros( user, 2*Tlen*Nc );
for i = 1:userx0 = 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 );
ray3( 2*ISI_Length + 1:2*Tlen*Nc ) = ray1( 1:2*Tlen*Nc - 2*ISI_Length );
for nEN = 1:length( SNR )%EbN0dBEbNo = 10^( SNR(nEN)/10 );     %信噪比转换pn = sqrt( 32/(2*EbNo) );%接收信号demp = power_unitary_factor1*ray1+...power_unitary_factor2*ray2+...power_unitary_factor3*ray3+...( randn( 1,2*Tlen*Nc )+randn( 1,2*Tlen*Nc )*i )*pn;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 = dt*wal16_d(1,:).';%WALSH码延迟wal16_delay1(1,2:32) = wal16_d(1,1:31);%解扩第二径输出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 = 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);elseif(maxu==u2)rd_m3 = real(rdata2);elserd_m3 = real(rdata3);endend%三种方法判决输出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
figure(1)%绘制图像
plot(SNR,Bit_Error_Rate1,'r*-');hold on;grid on;
plot(SNR,Bit_Error_Rate2,'bo-');hold on;grid on;
plot(SNR,Bit_Error_Rate3,'g.-');grid on;
legend('最大比合并','选择式合并','等增益合并');
xlabel('信噪比'),ylabel('误比特率');
title('三种分集合并方式性能比较');
figure(2)
semilogy(SNR,Bit_Error_Rate1,'b*-');hold on;grid on;
semilogy(SNR,Bit_Error_Rate2,'go-');hold on;grid on;
semilogy(SNR,Bit_Error_Rate3,'k+-');grid on;
legend('最大比合并','选择式合并','等增益合并');
xlabel('信噪比'),ylabel('误比特率');
title('三种分集合并方式性能比较');
%采用最大比合并时误码率最低
%Rake接收机可以较好的解决多径问题
%白噪声对Rake接收机误码率影响不大,随着信噪比的增大,Rake接收机的误码率迅速下降
clear all;%接收部分code
user = 1;
Nc = 16;    %扩频因子
ISI_Length = 1;%码元长度
SNR = [0:1:30];%信噪比
Tlen = 8000;    %数据长度%误比特率初始值
Bit_Error_Number1 = 0;
Bit_Error_Number2 = 0;
Bit_Error_Number3 = 0;%功率因子
power_unitary_factor1 = sqrt( 6/9 );
power_unitary_factor2 = sqrt( 2/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( user, Tlen*Nc );
ray1 = zeros( user, 2*Tlen*Nc );
ray2 = zeros( user, 2*Tlen*Nc );
ray3 = zeros( user, 2*Tlen*Nc );
for i = 1:userx0 = 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 );
ray3( 2*ISI_Length + 1:2*Tlen*Nc ) = ray1( 1:2*Tlen*Nc - 2*ISI_Length );for nEN = 1:length( SNR )EbNo = 10^( SNR(nEN)/10 );     %信噪比转换pn = sqrt( 32/(2*EbNo) );%接收信号demp = power_unitary_factor1*ray1+...power_unitary_factor2*ray2+...power_unitary_factor3*ray3+...( randn( 1,2*Tlen*Nc )+randn( 1,2*Tlen*Nc )*i )*pn;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 = dt*wal16_d(1,:).';%WALSH码延迟wal16_delay1(1,2:32) = wal16_d(1,1:31);%解扩第二径输出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 = 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);elseif(maxu==u2)rd_m3 = real(rdata2);else rd_m3 = real(rdata3);endend%三种方法判决输出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
plot(SNR,Bit_Error_Rate1,'r*-');hold on;
plot(SNR,Bit_Error_Rate2,'bo-');hold on;
plot(SNR,Bit_Error_Rate3,'g.-');
legend('最大比合并','选择式合并','等增益合并');
xlabel('信噪比');
ylabel('误比特率');
title('三种分集合并方式性能比较');
clear all;%发送部分代码
Numusers = 1;
Nc = 16;    %扩频因子
ISI_Length = 1;  %码元长度
EbN0db = 2;      %信噪比
Tlen = 10;       %数据长度%我们假设出的每径功率因子
power_unitary_factor1 = sqrt( 6/9 );
power_unitary_factor2 = sqrt( 2/9 );
power_unitary_factor3 = sqrt( 1/9 );
s_initial = randsrc( 1, Tlen );     %产生数据源1或-1
figure(1)
stairs(s_initial,'Color','r');
ylim([-1.5,1.5]);
title('信号源序列','Color','b')
xlabel('数据长度')
ylabel('幅度')
%根据扩频因子等于16产生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:Numusersx0 = 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 );     %信噪比转换sigma = sqrt( 32/(2*en) );%收到信号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 = dt*wal16_d(1,:).';%将walsh码延迟wal16_delay1(1,2:32) = wal16_d(1,1:31);%解扩后第二径输出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 = 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);elseif(maxu==u2)rd_m3 = real(rdata2);else rd_m3 = real(rdata3);endend%输出数据r_Data1 = sign(rd_m1)';r_Data2 = sign(rd_m2)';r_Data3 = sign(rd_m3)';end
figure(2)
subplot(3,1,1)
stairs(r_Data1,'Color','r');
ylim([-1.5,1.5]);
title('最大比合并方式','Color','b')
xlabel('码元长度')
ylabel('幅度')
subplot(3,1,2)
stairs(r_Data2,'Color','r');
ylim([-1.5,1.5]);
title('等增益合并','Color','b')
xlabel('码元长度')
ylabel('幅度')
subplot(3,1,3)
stairs(r_Data3,'Color','r');
ylim([-1.5,1.5]);
title('选择式合并','Color','b')
xlabel('码元长度')
ylabel('幅度')
figure(3)
subplot(3,1,1)
stairs(s_initial,'Color','r');
ylim([-1.5,1.5]);
hold on
stairs(r_Data3,'Color','g');
ylim([-1.5,1.5]);
title('最大比值合并和初始序列比较','Color','b')
xlabel('码元长度')
ylabel('幅度')
ylim([-1.5,1.5]);
subplot(3,1,2)
stairs(s_initial,'Color','r');
ylim([-1.5,1.5]);
hold on
stairs(r_Data2,'Color','g');
ylim([-1.5,1.5]);
title('等增益合并和初始序列比较','Color','b')
xlabel('码元长度')
ylabel('幅度')
ylim([-1.5,1.5]);
subplot(3,1,3)
stairs(s_initial,'Color','r');
ylim([-1.5,1.5]);
hold on
stairs(r_Data1,'Color','g');
ylim([-1.5,1.5]);
title('选择式合并和初始序列比较','Color','b')
xlabel('码元长度')
ylabel('幅度')
ylim([-1.5,1.5]);

无线通信与编码_Rake接收机_三种合并算法_MATLAB仿真代码相关推荐

  1. 基于内容的推荐java代码_三种推荐算法简介:基于用户的协同过滤、基于物品的协同过滤、基于内容的推荐...

    1.推荐算法 1.1.协同过滤 协同过滤是目前应用最广泛的推荐算法,它仅仅通过了解用户与物品之间的关系进行推荐,而根本不会考虑到物品本身的属性. 可分成两类: 1.基于用户(user-based)的协 ...

  2. 四旋翼飞行器12——飞控接收机的三种接收模式

    四旋翼飞行器12--飞控接收机的三种接收模式 文章目录 四旋翼飞行器12--飞控接收机的三种接收模式 一.PWM型 二.PPM型 三.SBUS 无线遥控就是利用高频无线电波实现对模型的控制.如天地飞的 ...

  3. dncnn图像去噪_三种图像去噪方法的比较研究

    齐艳丽 [摘 要]图像噪声会严重影响其视觉效果,采用适当的方法进行图像去噪是一项必不可少的预处理操作.本文对几种常用的图像去噪方法进行了分析,通过仿真高斯噪声和椒盐噪声,着重对基于均值滤波.中值滤波以 ...

  4. Xdelta3 bsdiff Courgette三种差分算法比较

    今天介绍常用的三种差分算法,分别是Xdelta3 bsdiff Courgette. Xdelta3 官网地址: http://xdelta.org 源码地址:https://github.com/j ...

  5. 【JVM】四种GC算法(分代收集+三种标记算法)

    目录 参考文章 四种GC算法 分代收集算法(理论) 标记清除算法 标记整理算法 标记复制算法 三种算法的优缺点 参考文章 JVM的4种垃圾回收算法.垃圾回收机制与总结_我是guyue,guyue就是我 ...

  6. python 三种聚类算法(K-means,AGNES,DBScan)

    python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44   作者:weixin_42134141 这篇文章主要介绍了pyth ...

  7. 近似装箱问题(三种联机算法实现)

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 "近似装箱问题(三种联机算法实现)" 的idea 并用源代码加以实现: 0.2) 近似 ...

  8. 三种Hash算法对比以及秒传原理.

    三种Hash算法对比以及秒传原理 CRC (32/64)   MD5  Sha1 分5个点来说 1.校验值长度 2.校验值类别 3.安全级别 4.应用场景 1).校验值长度 CRC(32/64) 分别 ...

  9. 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型

    常用的三种线性模型算法–线性回归模型.岭回归模型.套索回归模型 线性模型基本概念 线性模型的一般预测模型是下面这个样子的,一般有多个变量,也可以称为多个特征x1.x2.x3 - 最简单的线性模型就是一 ...

  10. 20172328 蓝墨云实验——三种查找算法练习

    20172328 蓝墨云实验--三种查找算法练习 课程:<软件结构与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强老师 实验日期:2018年10月1 ...

最新文章

  1. 递归解决八皇后问题-小昝
  2. 一个c语言构造函数调用的问题(有趣)
  3. bailian 2754八皇后
  4. ThinkPHP(3)SQL查询语句
  5. date(w) 输出后对应的周几不对的问题
  6. Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件
  7. 怎么看Windows11系统是激活的 Windows11检查激活状态方法
  8. SCCM2012 R2系统部署时,客户端报0x80004005错误(2)
  9. Eclipse中Jar包的反编译(通过jar包查看源码)
  10. PHP实现的服务器端,PHP实现服务器端允许客户端ajax跨域
  11. java中容器如何维护其内容
  12. Mathematic Mac 中文版的下载和破解
  13. maltab datenum函数与正则表达式巧用:逐日数据转为逐月数据、日序转月序
  14. 从电商到软件市场,阿里双十一战火蔓延
  15. 解决电脑桌面程序图标变白问题
  16. IPAD1代做win10的无线拓展屏
  17. 去掉设备和驱动器的百度网盘
  18. 【CC】| 创建三维模型教程
  19. 操作系统采用可变分区分配存储管理方法期末复习题
  20. 使用TPC控制UR3机器臂python代码

热门文章

  1. Ubuntu16.04火狐浏览器问题汇总
  2. JxBrowser的概述与简单应用
  3. html中设置圆角div,Javascript 圆角div的实现代码
  4. laydate 在vue中使用_如何在vue-cli项目里用layer的layData日期组件(代码)
  5. 青岛发文:3年将在全市全面实施电子劳动合同和电子集体合同
  6. 【Python】发送UDP数据(保姆级图文+附测试工具文件+api例程)
  7. golang微信小程序爬虫教程offer秀
  8. Android校准指南针,电子罗盘的工作原理及校准 电子罗盘,电子指南针,android.docx...
  9. IE浏览器自带打印控件WebBrowser
  10. 圆周率中查找指定数字