本文之前已经给出完整的BPSK波形(波形是指传输体制涉及的所有内容)仿真程序,包含帧头和组帧的内容,还包括调制解调编解码的内容。为了去除相位模糊度,还会将BPSK改为DBPSK!实际环境大多会采用仿真来预先设计波形的调制方式!但对于一个完整的波形而言,还需要完善的地方依旧有很多!比如如何仿真出帧检测概率?
后续会继续讲解这方面的内容,会涉及到载波相位的前馈估计内容。再接回文章大学毕业设计一席谈之二十 BPSK相干解调仿真(14)信噪比等效! 所讲的知识体系。
大家在公 众号的文章里会发现完整的调制解调器程序里面都是有滚降成型的,那么之前的相干解调程序中提出过这样的问题,大家还记得吗?
本文的程序会一并给出答案!大家看了上一篇文章的程序后,也许会问滚降成型的目的是为了找到最佳采样点?不仅如此哦,还能限制信号带宽!这样系统间的干扰就少了很多!
2025年3月,续写此系列,一年一篇文章,只为出精品。本文超过五千字,涉及程序的升级过程,只为让大家能够看出环路的关键参数的变化过程,非专业人士莫入。
那就接着PLL_BPSK_sim4_3继续深入下去,于是有了下面这三个程序!图中有背景点亮的三个文件。
我带着大家看看sim3程序。之前的程序体现的是程序升级的过程。最重大的改变就是加入滚降成形了!!!但加的方式好像和《通信原理》书中说的不一样!!!
cnr_number = 1; % 仿真循环次数
%----- 帧头 20 位 ------
Iframe_head = [ 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1];
%---- 信息内容 10000 位 -----
indisplay1 = randi([0 1],1,10000);
information1 = 2*indisplay1-1;
%-----起始内容是BTR位 ----
Ibit_flow = [Iframe_head information1];
% information Iframe_head information Iframe_head information];
%-------- 调制 ------
len = length(Ibit_flow);
inf_phase = zeros(1,len);
%----- BPSK ---
Tra_baseI = Ibit_flow;
%---- 滚降成型 ----
sr = 2.4e3;
sps = 8; % 每个符号的采样点数
samplefre = sps*sr;
Isignalsample = upsample(Tra_baseI, sps);
%%% 滚降滤波器
rollof_factor = 0.5; % 滚降因子,可调整
rcos_fir = rcosdesign(rollof_factor,6,sps);
rcos_Isignalsample = filter(rcos_fir,1,Isignalsample);
%----- 生成有载波调制的数据 -----
fcarrier = 3*sr;
foffset = 30; % Hz 频偏值
ophase = pi/3;
time = (0:length(rcos_Isignalsample)-1)/samplefre;
tra_IFsignal = rcos_Isignalsample.*cos(2*pi*(fcarrier+foffset).*time+ophase);
%%%%%%%%%%%%%%%%%%%%
%%%%% 信道部分 %%%%%%
%%%%%%%%%%%%%%%%%%%%%
for ebn0 = 6 % 单个值仿真成功后再进行多值测试
%------加性高斯白噪声信道----
spow=sum(tra_IFsignal.^2)/len;
attn=0.5*spow*1/2*10.^(-ebn0/10);
% 这里有错误,不影响算法,但影响误码性能的判断!
attn=sqrt(attn); % sqrt: built in function
noise = randn(1,length(tra_IFsignal)).*attn;
IFsignal = tra_IFsignal + noise;
% IFsignal = awgn(tra_IFsignal, snr, 'measured'); %设置载噪比
% 设置信号的起始位置signal_start
% 不同的值可以模拟不同时刻的开机捕获过程
signal_start = 1;
realIFsignal = IFsignal(signal_start:length(IFsignal));