MATLAB通信系统仿真设计——基于BPSK的直接序列扩频通信系统仿真

一.实验原理

直接序列扩频,就是直接用高码率的扩频码序列在发端去扩展信号的频谱,在收端用相同的扩频码去解扩,把展宽的扩频信号还原成原始的基带信号。 在发端输入的信息与扩频码发生器产生的伪随机码序列(这里使用的是m序列)进行波形相乘,得到复合信号,实现信号频谱的展宽,展宽后的信号再调制射频载波发送出去。由于采用平衡调制可以提高系统抗侦波的能力,所以直接序列扩频调制一般都采用二相平衡调制方式。一般扩频调制时一个信息码包含一个周期的伪码,用扩频后的复合信号对载波进行二相相移监控(BPSK)调制,当gt从“0”变成“1”或从“1”变到“0”时,载波相位发生180度相移。 接收端的本振信号与发射端射频载波相差一个中频,接收端收到的宽带射频信号与本振信号混频、低频滤波后得到中频信号,然后与本地产生的与发端相同并且同步的扩频码序列进行波形相乘,实现相关解扩,再经信息解调,恢复出原始信号。

二.模型组成

1.扩频调制

用扩频码发生器产生一个伪随机码 pn(这里用的是m序列),与信源信息码序列xt相乘,实现频谱的展宽

2.BPSK调制

调制的方式可以有二相相移监控BPSK、四相相移键控QPSK、偏移四相相移监控OQPSK、最小频移监控MSK。QPSK调制的目的是节省频谱。

3.BPSK解调

选用的是科斯塔斯环,因为它的突出优点是能够解调移相键控信号和抑制了载波的信号,且环路的工作频率与输入信号载波频率完全相同。

4.扩频解调

由于相关解扩在性能上很好,在接收端产生的本地pn’码,可以用科斯塔斯环实现与发端的pn码精确的同步。

三.实现代码
clear
clc
x_code=sign(mgen(19,11,2000)-0.5); %PN码
pn=rectpulse(x_code,8);%每个伪码元内采样8个点
plot(pn);
axis([0 1000 -1.5 1.5]);
title('伪随机码序列');
grid on;
%%
code_length=20;  %信息码元个数
N=1:code_length;
rand('seed',0);
x=sign(rand(1,code_length)-0.5);  %信息码从0、1序列变成-1、1序列
x1=rectpulse(x,800);%每个码元内采样800个点
figure(2)
plot(x1);
axis([0 16000 -1.5 1.5]);
title('信源信息码序列');
grid on;
figure(3)
gt=x1.*pn;
plot(gt);
axis([0 1000 -1.5 1.5]);
title('复合码序列');
grid on;
figure(4);
%% 用BPSK调制f0=6000;%载波频率
fs=5*f0;%采样频率
for i=1:2000AI=2;dt=fs/f0;n=0:dt/7:dt;   %一个载波周期内采样8个点cI=AI*cos(2*pi*f0*n/fs);x_bpsk((1+(i-1)*8):i*8)=gt((1+(i-1)*8):i*8).*cI;
end
subplot(3,1,1)
plot(x_bpsk);
axis([0 200 -2.5 2.5]);
title('BPSK调制后的波形');
grid on;	SNR=10;
gt1=awgn(x_bpsk,SNR);%加高斯白噪声形成接收信号f0=6000;%载波频率
fs=5*f0;%采样频率
for i=1:2000dt=fs/f0;n=0:dt/7:dt;   %一个载波周期内采样8个点cI=cos(2*pi*f0*n/fs);x_bpsk1((1+(i-1)*8):i*8)=gt1((1+(i-1)*8):i*8).*cI;
end
subplot(3,1,3)
plot(x_bpsk1);
axis([0 200 -2.5 2.5]);
title('加噪后已调波的波形');
grid on;
figure(6)
%% 解调
for i=1:2000 dt=fs/f0;n=0:dt/7:dt; %一个载波周期内采样八个点cI=cos(2*pi*f0*n/fs);s((1+(i-1)*8):i*8)= x_bpsk1((1+(i-1)*8):i*8).*cI;
end
plot(s);
axis([0 200 -2.5 2.5]);
title('解调后的波形');
grid on;
figure(7)
%% 相关解扩
jk_code=s.*pn;
%% 低通滤波
wn=1/500;  
b=fir1(16,wn);
H=freqz(b,1,16000);
xx=filter(b,1,jk_code);
plot(xx);
axis([0 16000 -1.5 1.5]);
title('解扩并滤波后的波形');
grid on;
for i=1:16000if xx(i)<0xx1(i)=-1;elsexx1(i)=1;end
end
%% 信源信息码与收端恢复出的波形的比较
figure(8)
subplot(2,1,1);
plot(x1);
axis([0 16000 -1.5 1.5]);
title('信源信息码序列');
grid on;
subplot(2,1,2);
plot(xx1);
axis([0 16000 -1.5 1.5]);
title('收端接收到的波形');
grid on;
[m,n]=symerr(xx1,x1);%m表示误码个数,n表示误码率function[out]=mgen(g,state,N)
gen=dec2bin(g)-48;
M=length(gen);
curState=dec2bin(state,M-1)-48;
for k=1:Nout(k)=curState(M-1);a=rem(sum(gen(2:end).*curState),2);curState=[a curState(1:M-2)];
end
end

 

 最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/473459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

指针习题回顾(C语言)

目录 数组指针和指针数组 编程题&#xff1a; 字符串逆序 字符串左旋 题目1概述&#xff1a; 代码实现&#xff1a; 题目2概述&#xff1a; 代码实现&#xff1a; 调整奇偶顺序 题目概述&#xff1a; 代码实现&#xff1a; 冒泡排序 二级指针 代码解读&#xff1a; …

阅读笔记(BMSB 2018)Video Stitching Based on Optical Flow

参考文献 Xie C, Zhang X, Yang H, et al. Video Stitching Based on Optical Flow[C]//2018 IEEE International Symposium on Broadband Multimedia Systems and Broadcasting (BMSB). IEEE, 2018: 1-5. 摘要 视频拼接在计算机视觉中仍然是一个具有挑战性的问题&#xff0…

概率基础——二项分布

概率基础——二项分布 介绍 在统计学中&#xff0c;二项分布是一种离散型概率分布&#xff0c;它描述了在一系列独立同分布的伯努利试验中成功的次数。这里我们以抛硬币为例&#xff0c;将一个硬币抛掷 n n n次&#xff0c;每次抛掷结果为正面向上的概率为 p p p&#xff0c;…

吴恩达深度学习-L1 神经网络和深度学习总结

作业地址&#xff1a;吴恩达《深度学习》作业线上版 - 知乎 (zhihu.com) 写的很好的笔记&#xff1a;吴恩达《深度学习》笔记汇总 - 知乎 (zhihu.com) 我的「吴恩达深度学习笔记」汇总帖&#xff08;附 18 个代码实战项目&#xff09; - 知乎 (zhihu.com) 此处只记录需…

顺序表(下)

1.扩容的实现&#xff08;在使用这些函数时包含其头文件&#xff09; 2.初始化&#xff08;给定一个初始值&#xff09; 3.销毁 &#xff08;也就是将空间释放&#xff0c;并将指针赋为空指针&#xff09; 4.插入 1.头插 2.尾插 3.任意位置插入 5.删除 1.头删 2.尾删 3.任意…

池化层1x1的作用!

池化层11的尺寸虽然很小&#xff0c;但在卷积神经网络中仍然具有降维的作用。尽管它不会改变特征图的空间尺寸&#xff0c;但通过减少特征图的通道数&#xff0c;池化层11可以实现降维的效果。这有助于减少计算量和参数数量&#xff0c;提高模型的效率和性能。 11的池化层具体…

mysql 2-16

安全等于<> 最大最小LEAST,GREATEST BETWEEN AND 条件一是下限 IN LIKE关键字 转移字符 逻辑运算符 位运算符 排序数据 升序降序&#xff0c;默认升序 二级排序 8.0新特性 小拓展 多表查询 多表查询 别名 多表查询的分类 非等值连接 自连接 内连接与外连接 sql92实现外连…

c高级day4作业

终端输入一个字符&#xff0c;判断是大写字母小写字母还是数字字符。 #!/bin/bash read -p "input字符--->" a case $a in[[:upper:]])echo 大写字母$a;;[[:lower:]])echo 小写字母$a;;[0-9])echo 数字字符$a;;*)echo "error" esac终端输入年月&#x…

防御保护--内容安全过滤

目录 文件过滤 内容过滤技术 邮件过滤技术 应用行为控制技术 DNS过滤 URL过滤 防火墙 ---- 四层会话追踪技术 入侵防御 ---- 应用层深度检测技术 深度包检测深度流检测 随着以上俩种的成熟与完善&#xff0c;提出了所谓的内容安全过滤 当然上网行为确实需要治理&…

CCF编程能力等级认证GESP—C++8级—20231209

CCF编程能力等级认证GESP—C8级—20231209 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)奖品分配大量的工作沟通 答案及解析单选题判断题编程题1编程题2…

Linux系统——拓展LVM逻辑卷分区与磁盘配额

一、LVM逻辑卷分区 1.检测并确认新硬盘 1.1fdisk 查看或管理硬盘分区 fdisk -l&#xff08;小写的L&#xff09; &#xff08;硬盘设备&#xff09; 或 fdisk 硬盘设备 1.2实际操作 1.2.1fdisk查询结果详解 Device&#xff1a;分区的设备文件名称Boot&#xff1a;是否…

【刷题】牛客— NC21 链表内指定区间反转

链表内指定区间反转 题目描述思路一&#xff08;暴力破解版&#xff09;思路二&#xff08;技巧反转版&#xff09;思路三&#xff08;递归魔法版&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&…