1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y56TlJlv
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
扩展频谱通信,简称扩频通信,是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列(一般是伪随机码)来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据。
4.部分源码
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
%成型滤波
%内插,使数据在调制之前与调制信号采样率相同
%如果有成型滤波,则内插零;如成型滤波器为矩形,内插相当于采样
% disp('成型滤波')
% define filter-related parameters
rolloff=0.5; % rolloff factor of filter
rate=nsamp; % rate is the number of points in each input symbol period of length T
N_T=[-2 2]; % a length-two vector that indicates the number of symbol periods before and after the peak response
FirCoefNum=4*nsamp;
% create a square root raised cosine filter
[rrcfilter,sample_time] = rcosfir(rolloff, N_T, rate, 1,'sqrt');
% % plot impulse response
% figure; impz(rrcfilter,1);
% figure; freqz(rrcfilter,1);
% upsample and apply square root raised cosine filter
BW_rrcfilter=10;
rrcfilter_FixPoint=HSSSim_FixPointFunc(rrcfilter,max(abs(rrcfilter)),BW_rrcfilter);
ShapedDataI= (rcosflt(FrameDataI,1,nsamp,'filter',rrcfilter))';
ShapedDataQ= (rcosflt(FrameDataQ,1,nsamp,'filter',rrcfilter))';
SendData=ShapedDataI+1i*ShapedDataQ;
%%
%通过信道
%choice1:不加噪声和相偏
% ReceivedData=SendData;
%choice2:通过高斯加性白噪声信道
ReceivedData=awgn(SendData,EcN0(tt),'measured','db');
% % %加随机相偏
ReceivedData=ReceivedData*exp(1i*2*pi*0.33);
% % % % % % % %加频偏
fd=53; %频偏为60k
Rc=3840;%码片速率
afa=fd/Rc/nsamp;%频偏
ReceivedData=ReceivedData.*exp(1i*2*pi*afa*[1:length(ReceivedData)]);
%%
%AD:满量程为16V 量化为13个比特
BW_AD=13;
ReceivedDataI=real(ReceivedData);
ReceivedDataQ=imag(ReceivedData);
ReceivedDataI_FixPoint=HSSSim_FixPointFunc(ReceivedDataI,16,BW_AD);
ReceivedDataQ_FixPoint=HSSSim_FixPointFunc(ReceivedDataQ,16,BW_AD);
%%
%匹配滤波
MatchedDataI=filter(rrcfilter_FixPoint,1,ReceivedDataI_FixPoint);
MatchedDataQ=filter(rrcfilter_FixPoint,1,ReceivedDataQ_FixPoint);
Es_BW_MatchedData=ceil(log2(max([abs(MatchedDataI) abs(MatchedDataQ)])))+1; %匹配滤波后数据的有效位长
BW_MatchedDataTrunc=10; %截尾7比特
MatchedDataI=HSSSim_TruncateFunc(MatchedDataI,BW_MatchedDataTrunc);
MatchedDataQ=HSSSim_TruncateFunc(MatchedDataQ,BW_MatchedDataTrunc);
%%
%码同步
X=16;
P=256;
M=P*X;
%做码相关
i=0; %采样点序号
k=0; %部分相关后的序号
ChipSynFlag=0;
FirstSampleChipSyn=0;
SynLoc=0;
ChipSynFailNum=0;
UniqueCodeCorrFailNum=0;
while ChipSynFlag==0
i=i+1;
k=0;
for ii=1:X*P %一次PMF运算需要的点数
PMFInputI(ii)=MatchedDataI(i+(ii-1)*nsamp)*SynCodeIni_polar(rem(ii-1,SynCodeLength)+1);
PMFInputQ(ii)=MatchedDataQ(i+(ii-1)*nsamp)*SynCodeIni_polar(rem(ii-1,SynCodeLength)+1);
if rem(ii,X)==0 %部分相加
k=k+1;
PMFDataI(k)=sum(PMFInputI(ii-X+1:ii));
PMFDataQ(k)=sum(PMFInputQ(ii-X+1:ii));
end;
end;
Es_BW_PMFData=ceil(log2(max([abs(PMFDataI) abs(PMFDataQ)])))+1; %PMF数据的有效位长
PMFData=PMFDataI+1i*PMFDataQ;
PMF_FFT=floor(fft(PMFData,P));
%对FFT后的数据加窗
PMF_FFT_W=PMF_FFT(2:end-1)-floor(0.5*PMF_FFT(1:end-2))-floor(0.5*PMF_FFT(3:end));
Es_BW_PMF_FFT_W=ceil(log2(max([abs(real(PMF_FFT_W)) abs(real(PMF_FFT_W))])))+1; %PMF做FFT运算后数据的有效位长
% Abs_PMF_FFT=abs(PMF_FFT)/M;%归一化FFT
Abs_Max_PMF_FFT_W=floor(abs(PMF_FFT_W)/M);%归一化FFT
% [Max_PMF_FFT Max_loc]=max(Abs_PMF_FFT);
[Max_PMF_FFT_W(i) Max_loc_W]=max(Abs_Max_PMF_FFT_W);%频偏为afa=Max_loc_W/X/P/nsamp
TH_Max_PMF_FFT_W=2*mean(Max_PMF_FFT_W); %自适应捕获门限
if FirstSampleChipSyn==0
if Max_PMF_FFT_W(i)>TH_Max_PMF_FFT_W
FirstSampleChipSyn=1; %用来寻找最佳采样点
SynLoc=i;
FreqOffsetLoc=Max_loc_W;
Max_PMF_FFT_In3=Max_PMF_FFT_W(i);
else
FirstSampleChipSyn=0;
end;
elseif FirstSampleChipSyn==1 %状态判断 %只要超出门限,就继续计算该样点后面两个点的Max_PMF_FFT_W,取3个中的最大点作为同步点。
FirstSampleChipSyn=2; %状态判断
if Max_PMF_FFT_W(i)>Max_PMF_FFT_In3
Max_PMF_FFT_In3=Max_PMF_FFT_W(i);
SynLoc=i;
FreqOffsetLoc=Max_loc_W;
end;
elseif FirstSampleChipSyn==2
ChipSynFlag=1;
FirstSampleChipSyn=0;
if Max_PMF_FFT_W(i)>Max_PMF_FFT_In3
Max_PMF_FFT_In3=Max_PMF_FFT_W(i);
SynLoc=i;
FreqOffsetLoc=Max_loc_W;
end;
end;
end;
%%
% %频偏校正
if ChipSynFlag==1 %如果完成码同步和频偏估计,则进行频偏校验及独特码同步
afa_est=Max_loc_W/X/P/nsamp;
MatchedData=MatchedDataI+1i*MatchedDataQ;
MatchedData_FdRevised=MatchedData.*exp(-1i*2*pi*afa_est*[1:length(ReceivedData)]);
MatchedDataI=real(MatchedData_FdRevised);
MatchedDataQ=imag(MatchedData_FdRevised);
%%
%独特码同步
A186