% ************************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:Ts*length(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(2*pi*J_fs*Tn+J_theta);
case 3
Jsn = fix(J_tone*code_len*sample_rate);
sn = 1:slen;
Jatter = zeros(1,slen);
Jatter(mod(sn-1,code_len*sample_rate)<Jsn) = J_p;
Jatter = Jatter.*cos(2*pi*J_fs*Tn);
end
%噪声产生
Nn = 3;
nlen = Nn*slen;
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(2*10^(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直接序列扩频通信系统仿真(调制方式BPSK)【含Matlab源码 4012期】.zip
共49个文件
mat:26个
bmp:11个
m:9个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 23 浏览量
2024-02-28
16:16:12
上传
评论
收藏 189KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信
资源推荐
资源详情
资源评论
收起资源包目录
【扩频通信】基于matlab直接序列扩频通信系统仿真(调制方式BPSK)【含Matlab源码 4012期】.zip (49个子文件)
【扩频通信】基于matlab直接序列扩频通信系统仿真(调制方式BPSK)【含Matlab源码 4012期】
运行结果1.jpg 36KB
Enspread.m 873B
testEb.m 478B
Main_DSBPSK.m 7KB
shift.m 1KB
Error_plot.m 2KB
Goldseq.m 720B
error_p_1.mat 255B
运行结果2.jpg 58KB
Despread.m 1016B
error_w_2048.mat 258B
error_p_3.mat 263B
MSeq.m 1KB
result
up_1_2.mat 243B
up_5_1.mat 224B
up_1_1.mat 266B
p_1_3.mat 227B
脉冲编码1.bmp 236KB
w_1_f1.mat 235B
单音无编码5.bmp 236KB
uw_1_t1.mat 235B
脉冲1.bmp 236KB
w_1_f3.mat 218B
p_1_1.mat 266B
单音无编码相位.bmp 236KB
uw_5_c.mat 226B
up_5_3.mat 230B
uw_1_f1.mat 261B
p_1_2.mat 226B
Error_plot.m 2KB
uw_1_t2.mat 227B
uw_5_f1.mat 267B
脉冲10.bmp 236KB
单音编码1.bmp 236KB
w_1_f2.mat 239B
uw_1_t3.mat 227B
单音干扰抑制.bmp 236KB
单音无编码1.bmp 236KB
uw_1_f2.mat 252B
uw_1_f3.mat 235B
宽带编码.bmp 236KB
error_p_3.mat 256B
宽带无编码.bmp 236KB
up_5_2.mat 252B
uw_5_f3.mat 236B
uw_5_f2.mat 265B
Error_plot.asv 2KB
宽带频谱.bmp 236KB
up_1_3.mat 244B
共 49 条
- 1
资源评论
海神之光
- 粉丝: 3w+
- 资源: 2093
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功