【扩频通信】直接序列扩频通信系统仿真(调制方式BPSK)【含Matlab源码 4012期】

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【扩频通信】基于matlab直接序列扩频通信系统仿真(调制方式BPSK)【含Matlab源码 4012期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏信号处理(Matlab)

备注:
点击上面蓝色字体付费专栏图像处理(Matlab),扫描上面二维码,付费299.9元订阅海神之光博客付费专栏,凭支付凭证,私信博主,可免费获得5份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:5份本博客上传CSDN资源代码

⛄二、部分源代码

% beginning of file********
% Module: Main_DSBPSK.m
% Note: 实现直接序列扩频通信系统的仿真,调制方式BPSK.
%**************************************************************************
clear all;
close all;
clc;

%仿真参数设定*
%宏参设定
Ml = 1; %每个符号所占比特数目(调制阶数)
SymNum = 800; %符号数目
SNJ1 = 1:10; %干信比
SNJ = 1:10; %信噪比
NumLoop= 20; %仿真循环次数

%数据编码参数
Encode_type = 2; %编码方式 1、未编码 2、卷积编码
Encode_rate = 0.5; %编码率
Decode_tlen = 5; %译码跟踪长度

%扩频码初值设定
UserNum = 1; %用户数目
SeqType = 1; %序列类型 1:m序列 2:Gold序列
Seqstage = 9; %反馈寄存器的阶数
ptaps1 = [1 3]; %第一个反馈寄存器的系数
ptaps2 = [2 3]; %第二个反馈寄存器的系数
Reg1ini = ones(1,Seqstage); %第一个反馈寄存器初始化
Reg2ini = ones(1,Seqstage); %第二个反馈寄存器初始化

%滤波器参数设定
alpha = 1; %滚降因子
firlen = 4; %滤波器阶数
sample_rate = 4; %采样率
Ts = 4;

%信道特性参数设定
delay_tau = 0;

%干扰特性参数设定
J_type = 1; %干扰类型 1:宽带干扰 2:余弦单音干扰3:脉冲单音干扰
J_fs = 2048; %单音干扰频率
J_theta = 0; %单音干扰相位
J_tone = 0.5; %脉冲单音干扰占空比
J_p = sqrt(250); %干扰功率

%模块生成****
%滤波器生成
ht = rcosfir(alpha,firlen,sample_rate,Ts,‘sqrt’); %发送或接受滤波器
ht = (1-alpha+alpha*4/pi).*ht./max(ht);

%扩频码生成
switch SeqType
case 1
code = MSeq(Seqstage,ptaps1,Reg1ini,UserNum);
code = [code.*2-1,1];
case 2
m1 = MSeq(Seqstage,ptaps1,Reg1ini,UserNum);
m2 = MSeq(Seqstage,ptaps2,Reg2ini,UserNum);
code = Goldseq(m1, m2, UserNum);
code = [code.*2-1,-1];
end
code_len = length(code);

%原始序列生成*
%发送端
data = randsrc(UserNum,Ml*SymNum,[0 1]); %产生信息序列
switch Encode_type
case 1 %未编码
codedata = data;
case 2 % 卷积编码
trel = poly2trellis(3,[4 7]);
codedata = convenc(data,trel);
end
codedata = 2.*codedata-1; %变成双极性
sdata = Enspread(codedata,code,sample_rate); %扩频调制并采样

signalsend = conv2(sdata,ht,‘same’); %成型滤波
slen = length(signalsend);
Tn = delay_tau:Ts/code_len/sample_rate:Tslength(codedata)-Ts/code_len/sample_rate+delay_tau;
FF=fft(signalsend(1:1000));
plot(abs(FF));
%信道干扰选择
switch J_type
case 1
Jatter = 0;
SNJ = SNJ1;
case 2
Jatter = sqrt(2).J_p.cos(2piJ_fs
Tn+J_theta);
case 3
Jsn = fix(J_tonecode_lensample_rate);
sn = 1:slen;
Jatter = zeros(1,slen);
Jatter(mod(sn-1,code_lensample_rate)<Jsn) = J_p;
Jatter = Jatter.cos(2pi
J_fs*Tn);
end

%噪声产生
Nn = 3;
nlen = Nnslen;
nstate = Nn
slen - slen;
nrandseq = randn(1,nlen);
error_rate = zeros(1,length(SNJ));

%开始仿真****
for jns = 1:length(SNJ)
error_num = 0;
%干扰方差
Jatp = 10^(SNJ(jns)/10);
Eb = 512;
TbTc=512;
spow=sum(abs(signalsend).^2)/SymNum/TbTc;
Jsgma = sqrt(Eb*2/Jatp);

for ii = 1:NumLoop 
    %计算噪声序列
    nstart = randi(nstate);
    s_noise = Jsgma.*nrandseq(nstart+1:nstart+slen);    
    %加噪声和干扰
    rcvsignal = signalsend + s_noise + Jatter;  

% % rcvsignal = signalsend;
%功率限幅法去除单音干扰
if J_type~= 1
fs = fft(rcvsignal);
sn = find(abs(fs)>1e5);
fs(sn) = 1e5.*exp(j.*angle(fs(sn)));
rcvsignal = ifft(fs);
end

    %接收端 
    rcvsignal = conv2(rcvsignal,ht,'same');
    rdata   = Despread(rcvsignal,code,sample_rate);
    rdata = (rdata >= 0);
    
    switch Encode_type
        case 1
            decodedata = rdata;
        case 2
            decodedata = vitdec(rdata,trel,Decode_tlen,'trunc','hard');
    end
    
    %判决,计算无码个数
    liminal = data - decodedata;
    error_num = error_num + length(find(liminal~=0));
end

%由于仿真耗时,所以记录下仿真数据
data_len_totel = SymNum*NumLoop;
bit_err_rate = error_num/data_len_totel;
fprintf('%d\t%d\t%d\t%e\n',SNJ(jns),error_num,data_len_totel,bit_err_rate);                  
error_rate(jns) = bit_err_rate;
if bit_err_rate == 0
    break;
end

end
%仿真结束*********
theo_err_rate = zeros(1,length(SNJ));
%计算理论性能
for the_err = 1:length(SNJ)
theo_err_rate(the_err) = qfunc(sqrt(210^(SNJ(the_err)/10)));
end
% save(‘theo_err_rate.mat’,‘theo_err_rate’);
%性能仿真图示
****

%模块频谱
figure(1);
subplot(3,2,1);
plot(signalsend);
title(‘扩频后信号’);
subplot(3,2,2);
plot(rcvsignal);
title(‘携带干扰信号’);
subplot(3,2,3);
plot(abs(fft(signalsend)));
title(‘扩频后中频信号频谱图’);
subplot(3,2,4);
plot(abs(fft(rcvsignal)));
title(‘携带干扰信号频谱图’);
subplot(3,2,5);
plot(ht);
title(‘滤波器冲击序列’);
subplot(3,2,6);
plot(abs(fft(ht)));
title(‘滤波器频谱图’);

%误码性能
switch J_type
case 1
figure(2);
semilogy(SNJ,theo_err_rate,‘r-.’,‘LineWidth’,2);
hold on;
semilogy(SNJ,error_rate,‘b-',‘LineWidth’,2);
grid on;
axis([SNJ(1),SNJ(length(SNJ)),0,1]);
ylabel(‘误码率’);
xlabel(‘信干比/dB’);
if Encode_type == 1
legend(‘无编码理论误码率曲线’,‘无编码仿真误码率曲线’);
title(‘仿真性能图(宽带干扰,无编码)’);
else
legend(‘无编码理论误码率曲线’,‘1/2卷积编码仿真误码率曲线’);
title(‘仿真性能图(宽带干扰,1/2卷积编码)’);
end
case 2
filename = [‘error_w_’ num2str(J_fs) ‘.mat’];
save(filename,‘error_rate’);
figure(2);
semilogy(SNJ,error_rate,'r-
’,‘LineWidth’,2);
grid on;
axis([SNJ(1),SNJ(length(SNJ)),0,1]);
ylabel(‘误码率’);
xlabel(‘信噪比/dB’);
if Encode_type == 1
title(‘仿真性能图(单音干扰,无编码)’);
else
title(‘仿真性能图(单音干扰,1/2卷积编码)’);
end
case 3
filename = [‘error_p_’ num2str(ceil(J_tone*5)) ‘.mat’];
save(filename,‘error_rate’);

    figure(2);
    semilogy(SNJ,error_rate,'r-*','LineWidth',2);
    grid on;
    axis([SNJ(1),SNJ(length(SNJ)),0,1]);
    
    ylabel('误码率');
    xlabel('信噪比/dB');
    if Encode_type == 1
        title('仿真性能图(脉冲单音干扰,无编码)');
    else
        title('仿真性能图(脉冲单音干扰,1/2卷积编码)');
    end

end
%end of file***************

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab领域

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

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

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

打赏作者

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

抵扣说明:

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

余额充值