直接序列扩频通信DSSS扩频解扩matlab性能仿真

目录

1.扩频过程

2.解扩过程

3.离散时间域扩频解扩

4.MATLAB核心程序

5.仿真结果


        直接序列扩频(Direct Sequence Spread Spectrum, DSSS)是一种常用的扩频通信技术,它通过将信号扩展到一个宽得多的频带上,以增强信号的抗干扰能力、提供保密性和支持多用户接入。DSSS的工作原理包括扩频过程(发射端)和解扩过程(接收端)。

1.扩频过程

       在扩频过程中,原始数据信号(基带信号)首先被编码成数字序列,然后与一个高速伪随机码(扩频码)进行模二加运算(XOR),使得信号的频谱得以扩展。设原始数据信号为s(t),它是一个具有有限带宽的脉冲序列,可以表示为:

       扩频码c(t) 是一个高频率的伪随机码序列,其速率远高于原始信号的数据速率,且具有良好的自相关特性,通常为高斯白噪声性质。该码序列同样可以表示为:

其中,bm​ 是码片的取值(0或1),q(t) 是码片的形状函数,Tc​ 是码片周期,且 Tc​≪Tb​。

扩频信号S(t) 通过与扩频码进行模二加运算得到:

其中 ⊗ 表示卷积操作。由于Tc​ 远小于Tb​,扩频后的信号带宽远大于原始信号带宽,实现了频谱的扩展。

2.解扩过程

      在接收端,接收到的信号混入了噪声和可能的干扰,记作R(t)=S(t)+N(t),其中N(t) 是加性噪声。为了恢复原始信号,接收端需要使用与发送端相同的扩频码c(t) 对R(t) 进行解扩,这个过程也是通过模二加运算完成的:

由于 S(t)=s(t)⊗c(t),因此S(t)⊗c(t)=s(t)⊗c(t)⊗c(t),而由于c(t) 的自相关性(当c(t) 与自身相乘时,在码片周期Tc​ 处有尖峰,其余位置接近于0),我们得到:

     实际上,由于连续时间信号处理的复杂性,实际操作中会采用离散时间序列处理,且通常采用相关器或者匹配滤波器来实现解扩和信号恢复。

3.离散时间域扩频解扩

       考虑离散时间域,假设扩频码c[n] 是周期的,周期长度为Nc​,数据序列s[n] 也被采样为离散序列,解扩过程可以通过离散卷积来表达:

       其中r[n] 是接收到的扩频信号采样值,y[n] 是解扩后的信号估计值。为了简化计算,通常采用循环卷积代替无限长卷积,且在实际实现中,会使用滑动窗口或快速傅里叶变换(FFT)等高效算法来加速处理。

4.MATLAB核心程序

.........................................................
% 开始均匀噪声测试
for noise_range=0:.001:1  
  % 向DSSS信号中添加噪声
  noise = random('unif',-noise_range,noise_range,[1,length(dsss_signal)]);
  noisy_signal = noise + dsss_signal;

  % 提取原始信号
  extracted_signal = noisy_signal ./ PN_code;
  
  % 判断信号正负
  extracted_signal(extracted_signal>=0) = 1;
  extracted_signal(extracted_signal<0) = -1;
  
  % 检查提取信号是否匹配输入
  check = find(exp_input == extracted_signal); % 比较元素
  if (length(check) <= length(exp_input)/2)  % 若匹配少于50%
    break
  end

  % 对码片长度积分
  recovered_signal = sum(reshape(extracted_signal,chip_length,length(input_signal)));
  
  % 再次判断正负
  recovered_signal(recovered_signal>=0) = 1;
  recovered_signal(recovered_signal<0) = -1;

end

sprintf('The max range is: %g to %g.',-noise_range,noise_range)

%% Plot
subplot(5,1,1)
stairs(-.5:length(input_signal)+2,[0 input_signal 0 0])
title('输入信号')
axis([0.4 length(input_signal)+.6 -1.1 1.1])

subplot(5,1,2)
stairs(-.5:length(PN_code)+1,[0 PN_code 0])
title('伪随机码')
axis([0 length(PN_code)+.6 -1.1 1.1])

subplot(5,1,3)
stairs(-.5:length(dsss_signal)+1,[0 dsss_signal 0])
title('直扩频信号')
axis([0 length(dsss_signal)+.6 -1.1 1.1])

subplot(5,1,4)
stairs(-.5:length(noisy_signal)+1,[0 noisy_signal 0])
title('带噪信号')
axis([0 length(noisy_signal)+.6 1.1*min(noisy_signal) 1.1*max(noisy_signal)])


subplot(5,1,5)
stairs(-.5:length(recovered_signal)+2,[0 recovered_signal 0 0])
title('恢复信号')
axis([0.44 length(input_signal)+.6 -1.1 1.1])
MAMA4091

5.仿真结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fpga和matlab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值