对直接序列扩频(DSSS)技术进行端到端仿真(Matlab代码实现)

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

本文的目的是对直接序列扩频(DSSS)技术进行端到端仿真。这是一种将消息信号乘以伪随机序列来扩展消息带宽的技术,从而使消息信号的能量扩展到更宽的频谱,并以噪声的形式出现。直接序列扩频技术的动力来源于信道容量定理。它说,即使信噪比很低,我们也可以通过增加带宽来获得良好的通信性能。[1] DSSS增加了发射信号带宽以消除符号间干扰(ISI)和窄带干扰。它提供了传输的安全性,因为接收机必须知道伪随机序列才能获得传输的数据信号。否则,接收机无法检测到原始消息信号,只能将发送的信号视为噪声。DSSS技术的这一特性使其适用于军事通信系统。DSSS还允许多个用户使用带宽,因为每个用户将其消息信号乘以不同的伪随机序列,并且如果接收机具有发射机伪随机序列则接收机获得其消息信号。DSSS的过程如下所示。​

📚2 运行结果

主函数部分代码:

clear all;
​
%% parameters
Fs = 1000;
fc = 100;
fp = 4;
bit_t = 0.1;
​
%% message generation with BPSK
m = [0 0 1 1 1 1 0 0];
for bit = 1:length(m)
   if(m(bit)==0)
        m(bit) = -1;
   end
end 
​
message =  repmat(m,fp,1);
message =  reshape(message,1,[]);
​
%% PN generation and multiply with message
pn_code = randi([0,1],1,length(m)*fp);
​
for bit = 1:length(pn_code)
   if(pn_code(bit)==0)
        pn_code(bit) = -1;
   end
end 
​
DSSS = message.*pn_code;
​
%% create carrier and multipy with encoded sequence
t = 0:1/Fs:(bit_t-1/Fs);
s0 = -1*cos(2*pi*fc*t);
s1 = cos(2*pi*fc*t);
carrier = [];
BPSK = [];
for i = 1:length(DSSS)
    if (DSSS(i) == 1)
        BPSK = [BPSK s1];
    elseif (DSSS(i) == -1)
        BPSK = [BPSK s0];
    end 
    carrier = [carrier s1];
end    
​
%% demodulation
rx =[];
for i = 1:length(pn_code)
    if(pn_code(i)==1)
        rx = [rx BPSK((((i-1)*length(t))+1):i*length(t))];
    else
        rx = [rx (-1)*BPSK((((i-1)*length(t))+1):i*length(t))];
    end    
end 
​
demod = rx.*carrier;
result = [];
for i = 1:length(m)
   x = length(t)*fp;
   cx = sum(carrier(((i-1)*x)+1:i*x).*demod(((i-1)*x)+1:i*x));
   if(cx>0)
       result = [result 1];
   else
       result = [result -1];
   end    
end    
​
pn_codeWrong = randi([0,1],1,length(m)*fp);
resultWrong = [];
rx2 =[];
for i = 1:length(pn_code)
    if(pn_codeWrong(i)==1)
        rx2 = [rx2 BPSK((((i-1)*length(t))+1):i*length(t))];
    else
        rx2 = [rx2 (-1)*BPSK((((i-1)*length(t))+1):i*length(t))];
    end    
end 
​
demod2 = rx2.*carrier;
for i = 1:length(m)
   x = length(t)*fp;
   cx = sum(carrier(((i-1)*x)+1:i*x).*demod2(((i-1)*x)+1:i*x));
   if(cx>0)
       resultWrong = [resultWrong 1];
   else
       resultWrong = [resultWrong -1];
   end    
end    
message1 =  repmat(result,fp,1);
message1 =  reshape(message1,1,[]);
message2 =  repmat(resultWrong,fp,1);
message2 =  reshape(message2,1,[]);

🎉3 参考文献

[1]石熠. 直接序列扩频通信系统的干扰研究[D].西安电子科技大学,2011.

部分理论引用网络文献,若有侵权联系博主删除。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值