PI-PLL锁相环估 C语言
时间: 2023-07-07 21:42:56 浏览: 102
以下是一个基于C语言的PI-PLL锁相环估算法的示例代码:
```
#include <stdio.h>
#include <math.h>
#define PI 3.141592653589793
/* 下面是锁相环参数 */
double Kp = 0.1; // 比例增益
double Ki = 0.01; // 积分增益
double K = 1; // 除数
double N = 100; // 采样数
double f_ref = 50; // 参考频率
double f_in = 45; // 输入频率
double phase_err = 0; // 初始相位误差
double phase_out = 0; // 输出相位
int main()
{
double phase_err_sum = 0;
double phase_err_last = 0;
double phase_err_curr = 0;
double delta_phase = 0;
double delta_time = 1 / f_ref;
for (int i = 0; i < N; i++)
{
phase_err_curr = (2 * PI * f_in * delta_time * i) + phase_err;
phase_err_sum += phase_err_curr;
delta_phase = Kp * phase_err_curr + Ki * phase_err_sum + phase_err_curr - phase_err_last;
phase_out += delta_phase / K;
phase_err_last = phase_err_curr;
}
printf("输出相位: %lf\n", phase_out);
return 0;
}
```
代码中,通过给定锁相环的参数,计算输入频率和参考频率之间的相位误差,并通过比例增益和积分增益计算误差修正量,最终得到锁相环的输出相位。
阅读全文