数字锁相环的MATLAB实现

问题描述 投票:0回答:0

我正在编写数字 PLL 的 MATLAB 实现。 它需要锁定参考信号的相位和频率。所有的信号都是方波。这些是设计约束:

  • 采样频率 Fs = 100Hz
  • 输入参考频率 = 10Hz
  • PLL 的起始频率范围 9-11Hz

这是我写的代码:

Fs= 1000;
Ts=1/Fs;
n=(1:1:2000);
t=n*Ts;

% PI constants
Ki= 0.00005;
Kp= 0.2;

% input ref generation
ref = (sin(2*pi*9*t + 1)>0) ;
rec = zeros(1,length(n))-1;

%vectors initialization to 0
error_int = 0;
phi = zeros(1,length(n));
error = zeros(1,length(n));
coe= fir1(20,0.01);


%% processing
for i= 2:length(n)

% error
  if(ref(i-1) == rec(i-1))
    error(i) = 0;
  else 
    error(i) = 1;
  end

% error LPF filtering  
  if(i > length(coe))
    error(i) = sum(error(i-length(coe)+1:i) .* coe);
  else
    error(i) = 0;
  end
  
% integral accumulation
  error_int(i) = error_int(i-1) + error(i);
  if(error_int(i) > 50) error_int(i) =0; end
  
% update new phase value
  phi(i) = phi(i-1) + 2*pi*10*Ts - Kp*error(i) + Ki*error_int(i);

% construct next sample of reconstructed signal
  rec(i) = (sin(phi(i))>0);
  
end
matlab octave
© www.soinside.com 2019 - 2024. All rights reserved.