?? sim_main.m
字號:
%發(fā)送和接收合在一塊的程序
%修改于2004/11/29
%評注:信噪比較低時會出現(xiàn)誤碼率,加上擴頻碼(barker碼13)低占空比情況下也具有較好的性能
%發(fā)送BPSK信號
%適合于CM3和CM4信道,估計時每80ns平均一次
%======================發(fā)送信號部分===========================
clear;
%=======第一部分:基本參數========
%SNR_db=5; %輸入信噪比
Dg=0.5; %高斯脈沖寬度
Ts=0.05; %信號采樣間隔
Tf=80; %Tf=80,duty_cycle=1:160
Num_Tf=Tf/Ts; %每個符號持續(xù)時間內采樣點個數
Num_pluse= Dg/Ts;
Eb=Eb_halfcos(Ts,Dg); %一個脈沖周期內的碼元能量
%信道估計需要的訓練序列長度
N_monocycle=10;
A=ones(1,N_monocycle);
%數據長度
N_Data=100;
%========第二部分:生成基本波形==========
%產生占空比1:160的半余弦脈沖波形,脈沖波形的占空比可以通過Tf調整
gt=waveshape(Dg,Ts,Tf);
gt_len=length(gt);
%========第三部分:生成信道沖激響應及高斯白噪聲==========
Th=Dg; %信道沖激響應間隔
h0=UWB_SV_channel(2,4,Th); %信道沖激響應
h1=h0(:,2);
h=n_upsample(h1,Th,Ts);
clear h0 h1 Th;
%=============
pn_code=[1,1,1,1,1,-1,-1,1,1,-1,1,-1,1];
%pn_code=1;
N_symbol = length (pn_code); % PN碼長度
gt1=waveshape(Dg,Ts,5); %實際的數據波形,占空比為1:Tf1
snrstep=0.5;
SNR_db=[0:snrstep:8];
snr_len=length(SNR_db);
sim_times=2;
for p=1:sim_times %第p次仿真,每次仿真中都計算snr_len種SNR_db情況下的誤碼率
for k=1:snr_len
Sim_Data=randn(1,N_Data)>0; %產生數據序列;
%---------------------------------------------
Noise_sigma=sqrt(Eb/(1*Dg*10^(SNR_db(k)/10))); %S/N=(Eb/T)/(N0*B) 高斯白噪聲
%============第四部分:信道估計過程==========================
%信道估計過程
st=gt'*A;
st=reshape(st,1,[]); %理想發(fā)送信號
% figure(1);
% subplot(2,1,1);
% plot(0:Ts:(length(st)-1)*Ts,st);
rt=conv(st,h);
rt_len=length(rt); %通過信道后的信號
%subplot(4,1,3);
%plot([0:Ts:(rt_len-1)*Ts],rt0);
%------------------
rt=rt +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表示所需要的多徑數
clear st rt rt_len peak_h t_h;
%===================信道估計過程到此結束=====================
%==============第五部分:同步以及信號接收==============
%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(Sim_Data,pn_code); %擴頻并且加上訓練序列(未擴頻的)后的數據,[1,-1]
%trans_data=[syn_training,spread_Data];
% Total_symbol=N_Data*N_symbol;
% for i=1:Total_symbol
% tempa=spread_Data(i);
% for j=1:gt_len
% tempb=gt(j);
% k=(i-1)*gt_len+j;
% Train_st1(k)=tempa*tempb;
% end
% end
Train_st0=gt1'*spread_Data;
Train_st1=reshape(Train_st0,1,[]); %理想發(fā)送信號
Train_rt=conv(Train_st1,h);
clear Train_st0 Train_st1 spread_Data;
Train_rtlen=length(Train_rt);
Train_rt=Train_rt + Noise_sigma*randn(1,Train_rtlen); %接收信號
% figure(2);
% subplot(3,1,1);
% plot(0:Ts:(length(Train_st1)-1)*Ts,Train_st1);
% title('理想發(fā)射信號');
% gtext('time(ns)');ylabel('amplitude');
% subplot(3,1,2);
% plot(0:Ts:(length(Train_rt)-1)*Ts,Train_rt);
% title('接收機輸入信號(CM4,信道沖激響應間隔0.5ns,SNR=5dB)');
% gtext('time(ns)');ylabel('amplitude');
%ref_st=reshape((pn_code'*gt)',1,[]);
%yt=MRC_combine(Tao,Atten,Train_rt,Tf,Ts,N_Data*N_symbol); %多徑合并過程,不進行相關積分
yn=MRC_Rake(Tao,Atten,Train_rt,Dg,10,Ts,N_Data,pn_code,gt1);
% subplot(3,1,3);
% plot(0:Ts:(length(yt)-1)*Ts,yt);
% title('RAKE多徑合并結果(CM4,信道沖激響應間隔0.5ns,SNR=5dB)');
% xlabel('time(ns)');ylabel('amplitude');
%肖婕楨和劉娜的程序從此開始=============
%=====================
%=====================
%=====================
%=====================
%=====================
err_bit_rate(p,k)=sum(abs(yn-Sim_Data))/N_Data;
clear yn Sim_Data;
clear Tao Atten Train_rt Noise_sigma;
end
end
ave_err=sum(err_bit_rate)/sim_times;
%[decoder_output,survivor_state,cumulated_metric]=viterbi(g,k0,Rx_Dispread);
% %畫圖
% figure(3);
% plot(0:Ts:79*Ts,gt(1:80));
% title('半余弦脈沖波形');
% xlabel('time(ns)');ylabel('amplitude');
%
% temp=ones(1,100);
% 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 1000 -0.5 1.5 ]);
% title('發(fā)射數據');
%
% subplot(2,2,2);
% plot(4500*Ts:Ts:14500*Ts,Train_st1(4500:14500));axis([4500*Ts 14500*Ts -1 1]);
% title('理想發(fā)射波形');
% xlabel('time(ns)');ylabel('amplitude');
% subplot(2,2,3);
% plot(out_data);axis([ 0 1000 -0.5 1.5]);
% title('判決結果');
% subplot(2,2,4);
% plot(4500*Ts:Ts:14500*Ts,Train_rt(4500:14500));axis([4500*Ts 14500*Ts -0.5 0.5]);
% %plot(Train_rt(4500:14500));axis([0 10000 -0.5 0.5 ]);
% title('接收機輸入信號');
% xlabel('time(ns)');ylabel('amplitude');
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -