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:2000
    AI=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:2000
    dt=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:16000
     if xx(i)<0
        xx1(i)=-1;
    else
        xx1(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:N
    out(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

 

  • 13
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
基于MATLAB直接序列扩频通信系统仿真可以分为以下几个步骤: 1. 生成伪随机码序列直接序列扩频通信系统中,发送端需要使用伪随机码序列对待传输的数据进行扩频。在MATLAB中,可以使用randi函数生成一组伪随机序列。 2. 数据调制:将待传输的数据进行调制,常用的调制方式包括二进制相移键控(BPSK)和四进制相移键控(QPSK)。在MATLAB中,可以使用相应的调制函数进行数据调制。 3. 产生扩频信号:将调制后的数据序列与伪随机码序列进行点乘操作,得到扩频信号。MATLAB提供了矩阵乘法函数,可以进行信号点乘操作。 4. 添加信道噪声:为了模拟实际通信环境中的信道噪声,需要在扩频信号上加上高斯噪声。在MATLAB中,可以使用awgn函数来模拟添加高斯噪声。 5. 解扩:接收端接收到含有噪声的扩频信号后,需要使用相同的伪随机码序列进行解扩,将扩频信号恢复为原始信号。在MATLAB中,可以使用矩阵乘法操作将扩频信号解扩。 6. 解调:解扩后的信号进行解调,恢复成原始的调制信号。在MATLAB中,可以使用相应的解调函数进行解调操作。 7. 数据解调:将解调后的信号还原为原始数据。在MATLAB中,可以使用bitxor函数进行数据解扩。 8. 性能评估:通过计算误码率等指标,评估所设计直接序列扩频通信系统的性能。可以使用MATLAB提供的误码率计算函数进行性能评估。 以上就是基于MATLAB直接序列扩频通信系统仿真的基本流程。可以根据需要对系统进行进一步改进和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MatpyMaster

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

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

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

打赏作者

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

抵扣说明:

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

余额充值