matlab环路同步,为什么matlab每次运行结果不一样?锁相环,载波同步,matlab

为什么matlab每次运行结果不一样?我的程序如下:求大神帮忙:kiss:

%频偏: -60Hz

%相偏: 在0--2*pi内随机分布

%程序及结果如下:

clear all;

close all;

%定义锁相环的工作模式: 单载波为“1”、 BPSK调制为“2”、 QPSK调制为“3”

for PLL_Mode = 1:3

len=1000;  %仿真数据长度

if PLL_Mode == 1

I_Data=ones(len, 1) ;

Q_Data=I_Data;

else if  PLL_Mode == 2

I_Data=randint(len, 1) *2-1;

Q_Data=zeros(len, 1) ;

else

I_Data=randint(len, 1) *2-1;

Q_Data=randint(len, 1) *2-1;

end

end

s=I_Data + j*Q_Data; %分离成两路序列

%载波信号

Freq_Sample=2400;   %采样率

Delta_Freq=-60;     %频偏

Time_Sample=1/Freq_Sample;   %每个采样值的持续时间

Delta_Phase=rand(1)*2*pi;   %随机初始相位rand(i)产生随机的i*i的0或1随机的数

Carrier=exp(j*(Delta_Freq/Freq_Sample*(1:len)+Delta_Phase));  %载波

r=s.*Carrier';  %调制

%锁相环处理过程如下

Signal_PLL=zeros(len,1);   %锁相环锁定及稳定后的数据

VCO_Phase = zeros(len,1);   %锁定的相位

Discriminator_Out=zeros(len,1);

Freq_Control=zeros(len,1);

PLL_Phase_Part=zeros(len,1);   %锁相环频率

PLL_Freq_Part=zeros(len,1);   %锁相环相位

%环路处理

C1=0.022013;  %环路滤波器参数

C2=0.00024722;

for i=2:len

Signal_PLL(i)=r(i)*exp(-j*mod(VCO_Phase(i-1),2*pi));

%得到鉴相器的输入

I_PLL(i)=real(Signal_PLL(i)) ; %鉴相器的I路输入信息数据

Q_PLL(i)=imag(Signal_PLL(i)) ; %鉴相器的Q路输入信息数据

if PLL_Mode==1

Discriminator_Out(i) =atan2(Q_PLL(i),I_PLL(i) ) ; %atan是反正切函数

else if PLL_Mode==2

Discriminator_Out(i) =sign(I_PLL(i)) *Q_PLL(i) /abs(Signal_PLL(i) ) ;

else

Discriminator_Out(i)=(sign(I_PLL(i))*Q_PLL(i)-sign(Q_PLL(i))*I_PLL(i) )/(sqrt(2)*abs(Signal_PLL(i))) ; %鉴相器的输出

end

end

PLL_Phase_Part(i)=Discriminator_Out(i)*C1;   %环路滤波器处理

Freq_Control(i)=PLL_Phase_Part(i)+PLL_Freq_Part(i-1);

PLL_Freq_Part(i)=Discriminator_Out(i)*C2+PLL_Freq_Part(i-1);

VCO_Phase(i)=VCO_Phase(i-1)+Freq_Control(i);  %进行相位调整

end

%画图显示结果

figure

subplot(2,2,1)

plot(-PLL_Freq_Part(2:len)*Freq_Sample);

grid on;

title('锁相环频率响应曲线');

axis([1 len -100 100]);

xlabel('仿真长度');

ylabel('幅度');

subplot(2,2,2)

plot(PLL_Phase_Part(2:len)*180/pi);

title('锁相环相位响应曲线');

axis([1 len -2 2]);

xlabel('仿真长度');

ylabel('相位');

grid on;

%设定显示范围

Show_D=300;

%起始位置

Show_U=900;

%终止位置

Show_Length=Show_U-Show_D;

subplot(2,2,3)

plot(r(Show_D:Show_U),'*');

title('进入锁相环的数据星座图');

xlabel('I路分量');

ylabel('Q路分量');

axis([-2 2 -2 2]);

grid on;

hold on;

subplot(2,2,3)

plot(Signal_PLL(Show_D:Show_U),'r*');

grid on;

subplot(2,2,4)

plot(Signal_PLL(Show_D:Show_U),'r*');

title('锁相环锁定及稳定后的数据星座图');

xlabel('I路分量');

ylabel('Q路分量');

axis([-2 2 -2 2]);

grid on;

figure

%设定显示范围

Show_D=600;

%起始位置

Show_U=650;

%终止位置

Show_Length=Show_U-Show_D;

subplot(2,2,1)

plot(I_Data(Show_D:Show_U));

grid on;

title('I路信息数据');

axis([1 Show_Length -2 2]);

subplot(2,2,2)

plot(Q_Data(Show_D:Show_U));

grid on;

title('Q路信息数据');

axis([1 Show_Length -2 2]);

subplot(2,2,3)

plot(I_PLL(Show_D:Show_U));

grid on;

title('锁相环输出I路信息数据');

axis([1 Show_Length -2 2]);

subplot(2,2,4)

plot(Q_PLL(Show_D:Show_U));

grid on;

title('锁相环输出Q路信息数据');

axis([1 Show_Length -2 2]);

end

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值