📄 test_code.m
字号:
%发送和接收合在一块的程序
%修改于2004/11/17
%发送BPSK信号
%适合于CM3和CM4信道,估计时每80ns平均一次
%包括编码、脉冲成型、信道估计、RAKE接收、解码
%======================发送信号部分===========================
clear;
clf;
%=======第一部分:基本参数========
SNR_db=5; %输入信噪比
Dg=0.5; %高斯脉冲宽度
Ts=0.05; %信号采样周期
Tf=80; %Tf=80,duty_cycle=1:160
Num_Tf=Tf/Ts; %每个符号持续时间内采样点个数
Num_pluse= Dg/Ts;
Eb=Eb_halfcos(Ts,Dg); %一个脉冲周期内的码元能量
%信道估计需要的训练序列长度
N_monocycle=5;
A=ones(1,10);
%码元同步需要的训练序列
%N_Syn=12;
%数据长度
N_Data=100;
Sim_Data=randint(1,N_Data); %产生数据序列;
%% Liu Na thinks Sim_Data= sign (randn(1,N_Data));
%---------------------------------------------
%========第二部分:生成基本波形==========
%产生占空比1:160的半余弦脉冲波形,脉冲波形的占空比可以通过Num_Tf调整
for n=0:Num_Tf-1
gt(n+1)=halfcos_generator(Dg,n*Ts);
end
%========第三部分:生成信道冲激响应及高斯白噪声==========
Th=Dg; %信道冲激响应间隔
h0=UWB_SV_channel(2,4,Th); %信道冲激响应
h1=h0(:,2);
h=n_upsample(h1,Th,Ts);
%=============
Noise_sigma=sqrt(Eb/(1*Dg*10^(SNR_db/10))); %S/N=(Eb/T)/(N0*B) 高斯白噪声
%============第四部分:信道估计过程==========================
%信道估计过程
st0=(A'*gt)';
st=reshape(st0,1,[]); %理想发送信号
figure(1);
subplot(2,1,1);
plot(0:Ts:(length(st)-1)*Ts,st);
rt0=conv(st,h);
rt_len=length(rt0); %通过信道后的信号
%subplot(4,1,3);
%plot([0:Ts:(rt_len-1)*Ts],rt0);
%------------------
rt=rt0 +Noise_sigma*randn(1,rt_len); %接收信号
subplot(2,1,2);
plot([0:Ts:(rt_len-1)*Ts],rt);
[peak_h,t_h]=ch_est(rt,Ts,N_monocycle,gt,Tf,Dg,h);
N_path=4;
[Tao,Atten]=selectpath(peak_h,t_h,N_path); %选择比较大的多径分量;N_path表示所需要的多径数
%===================信道估计过程到此结束=====================
%==============第五部分:同步以及信号接收==============
pn_code=[1,1,1,1,1,-1,-1,1,1,-1,1,-1,1];
N_symbol = length (pn_code); % 要改的呀,只是第一次试一试,而用了巴克码13,其实不然
g=[1 0 0 0 0 1 0 1; 1 0 1 0 1 0 1 1]; %卷积编码生成矩阵
k0=1; %编码器一次输入个数
coded_Data=cnv_encd(g,k0,Sim_Data); %卷积编码后的数据
Total_Num=length(coded_Data);
%syn_training=spreadgren(randn(1,12),pn_code); %同步训练序列
spread_Data=spreadgren(coded_Data,pn_code); %扩频并且加上训练序列(未扩频的)后的数据,[1,-1]
%trans_data=[syn_training,spread_Data];
Train_st0=(spread_Data'*gt)';
Train_st1=reshape(Train_st0,1,[]); %理想发送信号
Train_rt=conv(Train_st1,h);
Train_rtlen=length(Train_rt);
Train_rt=Train_rt + Noise_sigma*randn(1,Train_rtlen); %接收信号
% figure(2);
% subplot(3,1,1);
% plot(Train_st1);
% subplot(3,1,2);
% plot(Train_rt);
yt=MRC_combine(Tao,Atten,Train_rt,Tf,Ts,Total_Num*N_symbol); %多径合并过程,不进行相关积分
% subplot(3,1,3);
% plot(0:Ts:(length(yt)-1)*Ts,yt);
% xlabel('ns');
%肖婕桢和刘娜的程序从此开始=============
%=====================
%=====================
%=====================
%=====================
%=====================
% chip 级别上的判决
% Note 一定要改
for ii = 0:N_symbol*Total_Num-1;
for tt= 1:Num_pluse;
Data = sum (yt(ii*Num_Tf+tt).*gt(tt))*Ts;
end;
Data_Rake_Rx (ii+1) = sign(Data);
end;
% function PN_syn_for_AWGN_SBS(Rx,1/Ts,Dg,Dg/Tf,1)
% 解扩
for j = 0:Total_Num-1;
Rx_Dispread(j+1) = sum(Data_Rake_Rx(j*N_symbol+1:j*N_symbol+N_symbol).*pn_code) > 0;
end;
err_bit_rate=sum(abs(Rx_Dispread-coded_Data))/Total_Num;
decoder_output=viterbi(g,k0,Rx_Dispread);
err_decode_rate=sum(abs(decoder_output-Sim_Data))/Total_Num;
% %画图
% figure(3);
% plot(gt(1:80));
%
% temp=ones(1,20);
% source_data=reshape((Sim_Data'*temp)',1,[]);
% out_data=reshape((Rx_Dispread'*temp)',1,[]);
% figure(4);
% subplot(2,2,1);
% plot(source_data);axis([0 500 -0.5 1.5 ]);
% subplot(2,2,2);
% plot(Train_st1(1:2000));
% subplot(2,2,3);
% plot(out_data);axis([ 0 500 -0.5 1.5]);
% subplot(2,2,4);
% plot(Train_rt(1:2000));
%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -