基于MATLAB的m序列产生与CDMA扩频与解扩实现

基于MATLAB的m序列产生与CDMA扩频与解扩实现


一、什么是m序列?

1.1 概念与理解

m序列是由n级线性移位寄存器产生的周期为P=2^ n-1,码分多址(CDMA)主要采用两种长度的m序列:一种是周期为P=2^ 15-1的短PN序列,另一种是P=2^42-1的长PN序列。
用于随机信号源的伪随机序列发生器。还用于数据加扰与保密通信领域。

1.2 产生m序列的条件

一个线性移位反馈寄存器能否产生m序列的条件决定于它的反馈系数Ci,如下图所示:
图1-1

将八进制转换为二进制代入即可。比如以m序列级数n=4为例,它的周期为15,反馈系数为23(八进制)转换为二进制是10011,所以C0=1,C1=0,C2=0,C3=1,C4=1。故取C1-C4为0011.

1.3 产生m序列

以4级m序列为例,该序列码发生器如下图所示,假设初始状态X1~X4为0001,又因为4级m序列的反馈系数为23,所以C1-C4为0011,故产生的时序表如下图所示:
在这里插入图片描述
如图可以看出从初始状态0到时钟14正好是周期15,到时钟15的时候成为了初始0的状态,所以得出相应的4级m序列为100010011010111,这就产生了4级m序列。其他级m序列生成也类似,只是在更高级的m序列在反馈系数选择不同,得到的m序列也不同。(随手画的有些丑)
在这里插入图片描述

1.4 用MATLAB实现m序列的产生

(1)编写mseq函数实现序列发生器的运行:

function[mseq]=mseq(fbconnection) 
n=length(fbconnection); 
N=2^n-1;  
register=[zeros(1,n-1) 1];  %移位寄存器的初始状态  需要修改每次初始状态
mseq(1)=register(n);        %m序列的第一个输出码元 
for i=2:N      
newregister(1)=mod(sum(fbconnection.*register),2);     
for j=2:n          
newregister(j)=register(j-1);     
end;      
register=newregister;     
mseq(i)=register(n); 
end    

再调用该函数,输出即可:

mesq=mseq([0 0 1 1]);         %从左往右C1 C2 C3等  mseq函数参数对应M序列的反馈系数变为二进制
plot(mesq)
axis([0 15,0 1.5]);

仿真图如图所示:
在这里插入图片描述

仿真结果与计算结果一致,生出了m序列。

二、二、CDMA扩频与解扩

2.1 直接序列码分多址介绍

将需要传送的具有一定带宽的信号,用另一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,即扩频。接收端使用完全相同的伪随机码,与接收的信号作相关处理,把宽带信号转换成原始的窄带信号即解扩,以实现信息通信。本次使用的伪随机码是m序列码。
在进行扩频解扩操作之前先写各模块的函数用来调用。

2.2 MATLAB实现扩频和解扩

(1)suiji.m (用来随机生成用户的信息信号)

function [x] = suiji(L)
x=rand(1,L);
x(find(x<0.5))=-1;
x(find(x>=0.5))=1;
end

(2)de_mod.m (用来进行用户信息信号的扩频)

%参数c为使用的伪随机码
%参数x为输入的信息信号
%参数y为得到的扩频后的信号
function y = ds_mod(c,x)
tmp = c*x;
y = tmp(:);
end

(3)de_demod.m (用来进行对扩频信号的解扩)

%参数c为使用的伪随机码
%参数y为扩频信息信号
%参数y为得到的解扩后的信号
function x = ds_demod(c,y)
tmp=reshape(y,length(c),length(y)/length(c));
tmp=tmp';
x=tmp*c;
x=x';
end

(4)main.m (用来进行实现扩频解扩操作)

clc;
clear all;
n=4;                    %用周期为15的m序列来进行扩频与解频
x_num=10;               %传输信息码元数
X=suiji(x_num);         %生成随机数
subplot(411)
plot(X);
title('原信息');
 
C=mseq([0 0 1 1]);         
%从左往右C1 C2 C3等  mseq函数参数对应M序列的反馈系数23变为二进制 初始值X1X2X3X4分别为0001
subplot(412)
Y=ds_mod(C(:),X);       %扩频
plot(Y);
title('扩频后信息信号');
 
subplot(413)
Y_AWGN=awgn(Y,1);
plot(Y_AWGN);
title('加性高斯白噪声扩频信号');
 
 
X_Result=ds_demod(C(:),Y_AWGN);
 X_Result(find(X_Result>=0))=1;
 X_Result(find(X_Result<0))=-1;
subplot(414)
plot(X_Result);
title('解扩后信息');

使用的是周期为15的m序列作为伪随机码进行调制,结果仿真图如图所示:
在这里插入图片描述

总结:从仿真图中可以看出,原始信号经扩频后长度扩大了15倍,倍数是周期,加了AWGN后,扩频信号变得很难辨别,但通过m序列的调制,发送与接收端用m序列进行调制,最终解扩后得到了原始的窄带信号,故实现了信息通信。

各位同学读完文章觉得有用的话,一键三连支持一波哈!!!

  • 44
    点赞
  • 213
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草莓味的徐大力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值