特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接 第16章 ControllerFunctions的使用(二)
本期教程主要讲解控制函数中的cos和sin函数数值的获取,这里使用的函数比起第10章中使用的sin和cos函数数值的获取要方便很多。
16.1 浮点数SIN和COS
16.2 定点数SIN和COS
16.3 Clark正变换和逆变换
16.4 Park正变换和逆变换
16.5 总结
16.1 浮点数SIN和COS
16.1.1 arm_sin_cos_f32
函数定义如下:
void arm_sin_cos_f32(float32_t theta, float32_t * pSinVal, float32_t * pCosVal)
参数定义:
[in] theta input value in degrees
[out] *pSinVal points to the processed sine output.
[out] *pCosVal points to the processed cos output.
注意事项:
1. 参数theta的单位是角度。这里输入角度-180到179就能得到一个周期的正弦或者余弦数值。
16.1.2 实例讲解
实验目的:
1. 学习ControllerFunctions中SIN和COS的求解
实验内容:
1. 按下按键K1, 串口打印函数DSP_SIN_COS的输出结果
实验现象:
通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下:
程序设计:
- /*
- *********************************************************************************************************
- * 函 数 名: DSP_SIN_COS
- * 功能说明: 浮点数cos和sin计算
- * 形 参:无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void DSP_SIN_COS(void)
- {
- int16_t i;
- float32_t pSinVal;
- float32_t pCosVal;
-
- for(i = -180; i < 180; i++)
- {
- arm_sin_cos_f32(i, &pSinVal, &pCosVal); (1)
- printf("i = %d pSinVal = %f pCosVal = %f\r\n", i, pSinVal, pCosVal);
- // printf("%f\r\n", pSinVal); (2)
- // printf("%f\r\n", pCosVal); (3)
- }
- }
复制代码 1. sin和cos数据的求解。
2. 通过matlab绘制sin函数的输出数据的曲线(绘制方法见第10章的10.4小节)
3. 通过matlab绘制cos函数的输出数据的曲线(绘制方法见第10章的10.4小节)
16.2 定点数SIN和COS
16.2.1 arm_sin_cos_q31
函数定义如下:
void arm_sin_cos_q31(q31_t theta, q31_t * pSinVal, q31_t * pCosVal)
参数定义:
[in] theta input value in degrees
[out] *pSinVal points to the processed sine output.
[out] *pCosVal points to the processed cos output.
注意事项:
1. 参数theta的单位是角度。这里输入角度 -2^31 ~ 2^31-1 就能得到一个周期的正弦或者余弦数值。
16.2.2 实例讲解
实验目的:
1. 学习ControllerFunctions中SIN和COS的求解
实验内容:
1. 按下按键K2, 串口打印函数DSP_SIN_COS的输出结果
实验现象:
通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下:
程序设计:
- /*
- *********************************************************************************************************
- * 函 数 名: DSP_SIN_COS_Q31
- * 功能说明: 定点数cos和sin计算
- * 形 参:无
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void DSP_SIN_COS_Q31(void)
- {
- int16_t i;
- q31_t pSinVal;
- q31_t pCosVal;
-
- for(i = -256; i < 256; i++)
- {
- arm_sin_cos_q31(i*8388608, &pSinVal, &pCosVal); (1)
- printf("i = %d pSinVal = %d pCosVal = %d\r\n", i, pSinVal, pCosVal);
- // printf("%d\r\n", pSinVal); (2)
- // printf("%d\r\n", pCosVal); (3)
- }
- }
复制代码 1. sin和cos数据的求解。
2. 通过matlab绘制sin函数的输出数据的曲线(绘制方法见第10章的10.4小节)
3. 通过matlab绘制cos函数的输出数据的曲线(绘制方法见第10章的10.4小节)
16.3 Clarke 正变换和逆变换
暂时没有研究,留待以后解决。
16.4 Park 正变换和逆变换
暂时没有研究,留待以后解决。
16.5 总结
本期教程就跟大家讲这么多,有兴趣的可以深入研究下算法的实现。 |