函数名称:void SOGI_Init(Second_order_Filter *Biquad_filter,uint8_t mode) //二阶广义积分器参数初始化 *入口参数:Second_order_Filter 参数指针地址 * uint8_t mode 当mode=1时不移相,mode=0时移相PI/2 *函数功能:二阶广义积分器参数初始化,使用Tustin双线性变换离散 *************************************************************************************************************/ void SOGI_Init(Second_order_Filter* Biquad_filter, uint8_t mode) { static uint16_t K=1;//sogi比例系数 Biquad_filter->wc = (2 * PI * AC_INPUT_FREQ) / TS_FREQ; switch (mode) { case 1: //不移相 u轴 Biquad_filter->b0 = 2 * Biquad_filter->wc*K; Biquad_filter->b1 = 0; Biquad_filter->b2 = -2 * Biquad_filter->wc*K; Biquad_filter->a0 = 4 + 2 * Biquad_filter->wc*K + Biquad_filter->wc * Biquad_filter->wc; Biquad_filter->a1 = 2 * Biquad_filter->wc * Biquad_filter->wc - 8; Biquad_filter->a2 = 4 + Biquad_filter->wc * Biquad_filter->wc - 2 * Biquad_filter->wc; break; case 0: //移相 qu轴 Biquad_filter->b0 = Biquad_filter->wc * Biquad_filter->wc*K; Biquad_filter->b1 = 2 * Biquad_filter->wc * Biquad_filter->wc*K; Biquad_filter->b2 = Biquad_filter->wc * Biquad_filter->wc*K; Biquad_filter->a0 = 4 + 2 * Biquad_filter->wc*K + Biquad_filter->wc * Biquad_filter->wc; Biquad_filter->a1 = 2 * Biquad_filter->wc * Biquad_filter->wc - 8; Biquad_filter->a2 = Biquad_filter->wc * Biquad_filter->wc - 2 * Biquad_filter->wc + 4; break; } Biquad_filter->b0 = Biquad_filter->b0 / Biquad_filter->a0; Biquad_filter->b1 = Biquad_filter->b1 / Biquad_filter->a0; Biquad_filter->b2 = Biquad_filter->b2 / Biquad_filter->a0; Biquad_filter->a1 = Biquad_filter->a1 / Biquad_filter->a0; Biquad_filter->a2 = Biquad_filter->a2 / Biquad_filter->a0; }
时间: 2023-08-02 07:10:02 浏览: 191
根据提供的代码,函数 `SOGI_Init` 是一个用于初始化二阶广义积分器参数的函数。该函数使用了 Tustin 双线性变换进行离散化。
函数接受两个参数:`Biquad_filter` 是一个指向 `Second_order_Filter` 结构体的指针,用于传递参数地址;`mode` 是一个 `uint8_t` 类型的参数,当 `mode` 的值为 1 时表示不移相,当 `mode` 的值为 0 时表示移相 PI/2。
在函数内部,首先定义了一个静态变量 `K`,初始值为 1,代表 sogi 比例系数。
然后根据采样频率和输入信号频率计算了角频率,保存在变量 `Biquad_filter->wc` 中。
接下来根据 `mode` 的值进行了一个 `switch` 语句。当 `mode` 的值为 1 时,执行第一个分支,计算了不移相(u轴)情况下的系数;当 `mode` 的值为 0 时,执行第二个分支,计算了移相(qu轴)情况下的系数。
最后,将计算得到的系数进行归一化处理,将其除以 `Biquad_filter->a0` 的值。
总体来说,该函数的作用是根据给定的参数计算并初始化二阶广义积分器的系数。具体的参数含义和计算公式可能需要根据上下文来确定。
相关问题
双二阶广义积分器(sogi)软件锁相
双二阶广义积分器(SOGI)是一种用于信号锁相和控制系统的算法。它可以对周期性信号进行锁相并提供相位信息,使得控制系统能够更准确地跟踪这些信号并实现稳定的控制。
SOGI算法中,采用了两个二阶积分器并联的结构,分别在正负半周期内对信号进行积分,从而获得了相位信息。与传统的锁相环相比,SOGI算法的优点在于能够精确估算锁相频率,使得锁定效果更加稳定;并且对于非正弦型信号也能够进行良好的锁相。
在软件实现方面,为了保证算法的准确性和实时性,通常会采用高效的数字信号处理技术,如快速卷积算法、FPGA等。此外,为了保证系统的稳定性,还需要进行合理的参数设计和精细的调试。
总的来说,SOGI算法作为一种高效稳定的锁相技术,在电力电子、驱动控制等领域得到了广泛应用。
二阶广义积分器的锁相环(SOGI-PLL)
二阶广义积分器的锁相环(SOGI-PLL)是一种基于双二阶广义积分器的锁相环结构。锁相技术是通过相位的自动控制来实现频率自动控制的技术。锁相环(PLL)是一个相位反馈系统,通过锁定输入信号的相位,生成一个随时间变化的正弦波的瞬时相位。二阶广义积分器(SOGI)是一种新型的滤波器结构,具有广泛的应用。在SOGI-PLL中,鉴相器将被检测信号作为输入,输出与正序相位提取器相连接。正序相位提取器的输出与环路滤波器相连接,环路滤波器的输出分别与SOGI和压控振荡器的输入相连接,压控振荡器的输出与正序相位提取环节相连接。通过这种结构,SOGI-PLL可以实现相位锁定的目的。\[1\]\[3\]
#### 引用[.reference_title]
- *1* [基于双二阶广义积分器的三相锁相环(DSOGI-PLL)MATLAB仿真](https://blog.csdn.net/weixin_56691527/article/details/129898770)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [二阶广义积分锁相环 SOGI-PLL](https://blog.csdn.net/weixin_47274010/article/details/119181630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [一种基于双二阶广义积分器锁相环的制作方法](https://blog.csdn.net/weixin_30546201/article/details/116123045)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文