生活随笔
收集整理的這篇文章主要介紹了
课程作业记录10:63位PN码序列扩频通信Matlab仿真
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
該過程中的擴頻與解擴均采用63位PN碼序列。
給出源碼如下:
clear all;
close all;SNR = -30:1:-20;
Eb_No = SNR-10*log10(4);T=100;
Fs=12600;
bit=20;%生成隨機碼元,設前兩個碼元為1、0
%并進行BPSK調制
rs=randint(1,bit*T);
rs(1)=1;
rs(2)=0;
rs=rs-0.5;
rs=-2*rs;%擴頻
%生成用于擴頻的偽隨機序列
d=round(rand(1,Fs*T/6));
pn_seq=[];
carrier=[];
%生成的級數為6
t=[0:2*pi/5:2*pi];
for k=1:Fs*T/6if d(1,k)==0sig=-ones(1,6);elsesig=ones(1,6);endc=cos(t); carrier=[carrier c];pn_seq=[pn_seq sig];
end
r_sp=pn_seq.*r;%采樣
for i=1:1:Fs*T;r(i)=rs(ceil(i/630));
end%開始流程圖
%設定抽樣時間
t=1/Fs:1/Fs:T;for aa=1:1:length(SNR)%BPSK載波gi=r.*sin(2*pi*1000.*t)*sqrt(2);%加性高斯白噪聲 N0 = 1/10^(SNR(aa)/10);gii=gi+sqrt(2/N0)*(randn(1,length(gi)));%生成基本干擾信號J1=20*randn(1,Fs*T);%低通濾波后成為窄帶干擾cutoff_freq=5;nyquist_freq = Fs/2;Wn=cutoff_freq/nyquist_freq;[filtb,filta]=butter(2,Wn,'low'); J=filtfilt(filtb,filta,J1); %加上干擾信號后的信號giii=gii+(sqrt(10)*sin(2*pi*1010.*t+pi/2).*J);%經過第二次1000Hz正弦載波giv=giii.*sin(2*pi*1000.*t)*sqrt(2);gr2=gii.*sin(2*pi*1000.*t)*sqrt(2);%解擴rxsig=givv.*carrier;demod_sig=[];for i=1:1:Fs*Tif rxsig(i)>=0giv(i)=1;elsegiv(i)=-1;end%giv=[demod_sig rxs];end%低通濾波cutoff_freq=40;nyquist_freq=Fs/2;Wn=cutoff_freq/nyquist_freq;[filtb,filta]=butter(2,Wn,'low');gv=filtfilt(filtb,filta,giv);gr3=filtfilt(filtb,filta,gr2);%匹配濾波器b=flipud(gv(:));br=flipud(gr3(:));x=gv(:);xr=gr3(:);gvi=filter(b,1,x);gr4=filter(br,1,xr);%抽樣判決%用無干擾信號找第一個峰值點gr5=abs(gr4);[pks,locs] = findpeaks(gr5); point=locs(1);for d=0:1:bit*T-1if (point+d*630<=Fs*T)if gvi(point+d*630)>=0gett(d+1)=1;elsegett(d+1)=-1;endif gr4(point+d*630)>=0getr(d+1)=1;elsegetr(d+1)=-1;endendenderror=sum(gett~=rs);errorr=sum(getr~=rs);ber(aa)=error/(bit*T);berr(aa)=errorr/(bit*T);endsemilogy(SNR,ber)
hold on
semilogy(SNR,berr)
title('擴頻情況下的SNRvsvBER')
xlabel('SNR')
ylabel('BER')
總結
以上是生活随笔為你收集整理的课程作业记录10:63位PN码序列扩频通信Matlab仿真的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。