PI-PLL锁相环sin cos C语言
时间: 2023-07-10 17:43:30 浏览: 128
SOGI-PLL锁相环+Simulink仿真
以下是一个基于C语言的PI-PLL锁相环sin cos估算法的示例代码:
```
#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 sin_out = 0; // 输出正弦值
double cos_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;
sin_out += sin(phase_err_curr + delta_phase) / K;
cos_out += cos(phase_err_curr + delta_phase) / K;
phase_err_last = phase_err_curr;
}
printf("输出正弦值: %lf\n", sin_out);
printf("输出余弦值: %lf\n", cos_out);
return 0;
}
```
代码中,通过给定锁相环的参数,计算输入频率和参考频率之间的相位误差,并通过比例增益和积分增益计算误差修正量,最终得到锁相环的输出正弦值和余弦值。注意这里的输出值是经过归一化处理的,需要根据实际应用进行反归一化处理。
阅读全文