⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pllsim.m

📁 二阶锁相环Matlab仿真代码
💻 M
字号:
%PLLSim.m%锁相环仿真%使用QPSK调制,标准锁相环clear;                                       %清理内存空间clc;                                         %清屏tic                                          %时间统计开始close;%%%%%%%%%%仿真参数设置%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        aa DataModulation=1;							%=1:有符号调制,=0:无符号调制,一直发+1AddNoice=1;									%=1:加入噪声,=0:完全不加噪声IsQSPK=0;                                   %=0: BSPK, =1:QPSKCarrierErrOn=1;                             %=1:加入频偏,=0:不加入频偏PllOn=1;                                    %=1: use Pll, =0:don't use pllsnr_in_dB=10;                                 %Eb/N0 value expressed in dBSymNum=10000;                                 %Nomber of symbols to be simulated.%频偏参数InitFeqErr=-0/64;     							%初始频偏,以符号速率归一化,即频偏是符号速率的df倍FeqErrAcc=0.0000;									%频差的斜生率,以符号速率归一化,即频偏是符号速率的df倍MaxFeqErr=120/64;									%最大的频偏值InitPhase=0.1*pi;								%载波初始相位,单位:rad%锁相环参数Pll_fb_a=1;Pll_b=-0.9554388;Pll_A=1;Pll_K=0.1782447;%%%%%%%%%%约定参数与参数换算%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if IsQSPK==1	M=4;                                         %调制阶数,including log2(M) bits per symbol.else	M=2;endEb=1;                          		  		 %Energy of per bit.SNR=10^(snr_in_dB/10);                       %Converted to expressed by times(以倍数表示的Eb/N0).%%%%%%%%%%%仿真初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	%调制	if DataModulation==1 					%=1:有符号调制,=0:无符号调制,一直发+1	    dsource_i=1-2*randint(1,SymNum);    %Date source	    dsource_q=1-2*randint(1,SymNum);	%Qpsk modulation. Map 0->+1, 1->-1.    else    	dsource_i=ones(1,SymNum);    	dsource_q=ones(1,SymNum);    end    if IsQSPK==1    	SendSig=dsource_i+j.*dsource_q;		%发送的信号(复数)    else    	SendSig=dsource_i;    end    SymIdx=1:SymNum;    SendSig=SendSig.*exp(j*10.*SymIdx);		%载波调制,即使是BPSK也要调制,以便作为复数传给AWGN信道    %信道   	if AddNoice==1								%=1:加入噪声,=0:完全不加噪声		RecSig=awgn(SendSig,snr_in_dB);			%   	else   		RecSig=SendSig;   	end   	RecSig=RecSig.*exp(-j*10.*SymIdx);		%下变频   	   	if CarrierErrOn==1								%=1:加入频偏,=0:不加入频偏   		FeqErr(1)=InitFeqErr;						%初始频差   		CarrierPhase(1)=InitPhase;					%初始相差   		for m=1:SymNum   			RecSig(m)=RecSig(m)*exp(j*CarrierPhase(m));		%加入载波频偏   			FeqErr(m+1)=FeqErr(m)+FeqErrAcc;            	%频差斜升   			if abs(FeqErr(m+1))>=MaxFeqErr					%达到最大频偏时翻转,成为锯齿形状   				FeqErrAcc=-FeqErrAcc;   			end   			CarrierPhase(m+1)=CarrierPhase(m)+FeqErr(m+1)*2*pi;	%载波相位累加   		end   		subplot(2,2,1);   		plot(FeqErr(1:SymNum));   	end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   	   	%接收   	if PllOn==1	   	FeqAccum=0;   %环路滤波器初始累加值	   	NCOPhase(1)=0;		%NCO相位初值	   	for SymIdx=1:SymNum	   		NCOSig(SymIdx)=RecSig(SymIdx)*exp(j*NCOPhase(SymIdx));	   		   		%相差检测		   	if IsQSPK==0  %BPSK		   		PhaseErr=-sign((real(NCOSig(SymIdx))))*imag(NCOSig(SymIdx));		   		%仿真比较表明sign(cos)*sin比cos*sin 鉴相更快,大约1倍%		   		PhaseErr=(real(NCOSig(SymIdx)))*imag(NCOSig(SymIdx));            else  %QPSK            	PhaseErr=-sign((real(NCOSig(SymIdx))))*imag(NCOSig(SymIdx))+sign(imag(NCOSig(SymIdx)))*(real(NCOSig(SymIdx)));		   	end		   		%	   	环路滤波器		   	PhaseErrAK=PhaseErr*Pll_A*Pll_K;		   	FeqAccum=FeqAccum*Pll_fb_a+(1+Pll_b)*PhaseErrAK;		   	Fcw=FeqAccum+PhaseErrAK;	%	   	NCO			NCOPhase(SymIdx+1)=NCOPhase(SymIdx)+Fcw;		end		%	对相位偏差画图			subplot(2,2,3);			PhaseDiff=NCOPhase(1:SymNum)+CarrierPhase(1:SymNum);			ModValue=2*pi/M;   			 %模糊度的值			PhaseDiff=mod(PhaseDiff,ModValue);			PhaseIdx=find(PhaseDiff>ModValue/2);			PhaseDiff(PhaseIdx)=PhaseDiff(PhaseIdx)-ModValue;			plot(PhaseDiff);	else		NCOSig=RecSig;	end	subplot(2,2,2);   	plot(real(NCOSig));	subplot(2,2,4);	plot(imag(NCOSig));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     	   	%判决   	numofbiterror=0;      	DetectSig=NCOSig;   	SynLength=200;				%同步所需符号数,即统计误码时需要扣除的符号数   	SignDet_i=sign(real(DetectSig));    numofbiterror=numofbiterror+sum(SignDet_i(SynLength+1:end)~=dsource_i(SynLength+1:end));    if IsQSPK==1   	 	SignDet_q=sign(imag(DetectSig));   		numofbiterror=numofbiterror+sum(SignDet_q(SynLength+1:end)~=dsource_q(SynLength+1:end));	end   	ber=numofbiterror/(log2(M)*(SymNum-SynLength))  %Calculate the bit error rate. Has log2(M)*N bits.	theo_err_ber=Qfunct(sqrt(2*SNR))             %BPSK/QPSK Theory bit error rate.toc                                          %时间统计结束%%=========================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -