⛄一、获取代码方式
获取代码方式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_fsTn+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(2piJ_fs*Tn);
end
%噪声产生
Nn = 3;
nlen = Nnslen;
nstate = Nnslen - 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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除