完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
转dsp系列教程
本期教程主要讲解统计函数中的最大值,最小值,平均值和功率的计算。 11.1 最大值Maximum 11.2 最小值Minimum 11.3 平均值Mean 11.4 功率Power 11.5 总结 11.1 最大值Maximum 这部分函数用于计算数组中的最大值,并返回数组中的最大值和最大值在数组中的位置。 11.1.1 arm_max_f32 此函数的使用比较简单,函数定义如下: void arm_max_f32(float32_t * pSrc, uint32_t blockSize, float32_t * pResult, uint32_t * pIndex) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult maximum value returned here [out] *pIndex index of maximum value returned here 11.1.2 arm_max_q31 函数定义如下: void arm_max_q31(q31_t * pSrc, uint32_t blockSize, q31_t * pResult, uint32_t * pIndex) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult maximum value returned here [out] *pIndex index of maximum value returned here |
|
|
相关推荐
|
|
|
11.1.3 arm_max_q15
函数定义如下: void arm_max_q15(q15_t * pSrc, uint32_t blockSize, q15_t * pResult, uint32_t * pIndex) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult maximum value returned here [out] *pIndex index of maximum value returned here 11.1.4 arm_max_q7 函数定义如下: void arm_max_q7(q7_t * pSrc, uint32_t blockSize, q7_t * pResult, uint32_t * pIndex) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult maximum value returned here [out] *pIndex index of maximum value returned here |
|
|
|
|
|
|
|
|
11.1.5 实例讲解
实验目的: 1. 学习FastMathFunctions中最大值的求解 实验内容: 1. 按下按键K1, 串口打印函数DSP_Max的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_Max * 功能说明: 求最大值 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_Max(void) { float32_t pSrc[10] = {0.6948, 0.3171, 0.9502, 0.0344, 0.4387, 0.3816, 0.7655, 0.7952, 0.1869, 0.4898}; (1) float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q31_t pResult1; q15_t pSrc2[10]; q15_t pResult2; q7_t pSrc3[10]; q7_t pResult3; arm_max_f32(pSrc, 10, &pResult, &pIndex); printf("arm_max_f32 : pResult = %f pIndex = %drn", pResult, pIndex); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); (2) } arm_max_q31(pSrc1, 10, &pResult1, &pIndex); printf("arm_max_q31 : pResult = %d pIndex = %drn", pResult1, pIndex); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; (3) } arm_max_q15(pSrc2, 10, &pResult2, &pIndex); printf("arm_max_q15 : pResult = %d pIndex = %drn", pResult2, pIndex); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc3[pIndex] = rand()%128; (4) } arm_max_q7(pSrc3, 10, &pResult3, &pIndex); printf("arm_max_q7 : pResult = %d pIndex = %drn", pResult3, pIndex); printf("******************************************************************rn"); } |
|
|
|
|
|
|
|
|
1. 这里10个浮点随机数是通过matlab生成的,生成方法很简单,在命令窗口输入命令:
rand(1, 10) %1行10列 获取结果如下: 如果想获取整形随机数,可以使用函数: randi(32768, 1, 10) %生成的随机数不超过32768, 1行10列。 2. 使用stdlib.h中的rand生成伪随机数。 3. 通过对32768求余获得可以用于函数arm_max_q15的数据。 4. 通过对128求余获得可以用于函数arm_max_q7的数据。 |
|
|
|
|
|
|
|
|
11.2 最小值Minimum
这部分函数用于计算数组中的最小值,并返回数组中的最小值和最小值在数组中的位置。 11.2.1 arm_min_f32 此函数的使用比较简单,函数定义如下: void arm_ min _f32(float32_t * pSrc, uint32_t blockSize, float32_t * pResult, uint32_t * pIndex) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult maximum value returned here [out] *pIndex index of maximum value returned here 11.2.2 arm_ min _q31 函数定义如下: void arm_ min _q31(q31_t * pSrc, uint32_t blockSize, q31_t * pResult, uint32_t * pIndex) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult maximum value returned here [out] *pIndex index of maximum value returned here |
|
|
|
|
|
|
|
|
11.2.5 实例讲解
实验目的: 1. 学习FastMathFunctions中最小值的求解 实验内容: 1. 按下按键K2, 串口打印函数DSP_Min的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_Min * 功能说明: 求最小值 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_Min(void) (1) { float32_t pSrc[10] = {0.6948, 0.3171, 0.9502, 0.0344, 0.4387, 0.3816, 0.7655, 0.7952, 0.1869, 0.4898}; float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q31_t pResult1; q15_t pSrc2[10]; q15_t pResult2; q7_t pSrc3[10]; q7_t pResult3; arm_min_f32(pSrc, 10, &pResult, &pIndex); printf("arm_min_f32 : pResult = %f pIndex = %drn", pResult, pIndex); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); } arm_min_q31(pSrc1, 10, &pResult1, &pIndex); printf("arm_min_q31 : pResult = %d pIndex = %drn", pResult1, pIndex); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; } arm_min_q15(pSrc2, 10, &pResult2, &pIndex); printf("arm_min_q15 : pResult = %d pIndex = %drn", pResult2, pIndex); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc3[pIndex] = rand()%128; } arm_min_q7(pSrc3, 10, &pResult3, &pIndex); printf("arm_min_q7 : pResult = %d pIndex = %drn", pResult3, pIndex); printf("******************************************************************rn"); } 1. 这里求最小值跟上面求最大值基本是一样的。 |
|
|
|
|
|
|
|
|
11.3 平均值Mean
这部分函数用于计算数组的平均值。公式描述如下: Result = (pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]) / blockSize; 11.3.1 arm_mean_f32 此函数的使用比较简单,函数定义如下: void arm_mean_f32(float32_t * pSrc, uint32_t blockSize, float32_t * pResult) 参数定义: [in]*pSrc points to the input vector [in] blockSize length of the input vector [out]*pResult mean value returned here 11.3.2 arm_ mean _q31 函数定义如下: void arm_mean_q31(q31_t * pSrc, uint32_t blockSize, q31_t * pResult) 参数定义: [in]*pSrc points to the input vector [in] blockSize length of the input vector [out]*pResult mean value returned here 注意事项: 求平均前的数据之和是赋值给了64位累加器,然后再求平均。 |
|
|
|
|
|
|
|
|
11.3.3 arm_ mean _q15
函数定义如下: void arm_mean_q15(q15_t * pSrc, uint32_t blockSize, q15_t * pResult) 参数定义: [in]*pSrc points to the input vector [in] blockSize length of the input vector [out]*pResult mean value returned here 注意事项: 求平均前的数据之和是赋值给了32位累加器,然后再求平均。 11.3.4 arm_ mean _q7 函数定义如下: void arm_mean_q7(q7_t * pSrc, uint32_t blockSize, q7_t * pResult) 参数定义: [in]*pSrc points to the input vector [in] blockSize length of the input vector [out]*pResult mean value returned here 注意事项: 求平均前的数据之和是赋值给了32位累加器,然后再求平均。 |
|
|
|
|
|
|
|
|
11.3.5 实例讲解
实验目的: 1. 学习FastMathFunctions中平均值的求解 实验内容: 1. 按下按键K3, 串口打印函数DSP_Mean的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_Mean * 功能说明: 求平均 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_Mean(void) { float32_t pSrc[10] = {0.6948, 0.3171, 0.9502, 0.0344, 0.4387, 0.3816, 0.7655, 0.7952, 0.1869, 0.4898}; float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q31_t pResult1; q15_t pSrc2[10]; q15_t pResult2; q7_t pSrc3[10]; q7_t pResult3; arm_mean_f32(pSrc, 10, &pResult); printf("arm_mean_f32 : pResult = %frn", pResult); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); } arm_mean_q31(pSrc1, 10, &pResult1); printf("arm_mean_q31 : pResult = %drn", pResult1); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; } arm_mean_q15(pSrc2, 10, &pResult2); printf("arm_mean_q15 : pResult = %drn", pResult2); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc3[pIndex] = rand()%128; } arm_mean_q7(pSrc3, 10, &pResult3); printf("arm_mean_q7 : pResult = %drn", pResult3); printf("******************************************************************rn"); } |
|
|
|
|
|
|
|
|
11.4 功率Power
这部分函数用于计算数组的功率。公式描述如下: Result = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + pSrc[2] * pSrc[2] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]; 11.4.1 arm_power_f32 函数定义如下: void arm_power_f32(float32_t * pSrc, uint32_t blockSize, float32_t * pResult) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult sum of the squares value returned here 11.4.2 arm_power_q31 函数定义如下: void arm_power_q31(q31_t * pSrc, uint32_t blockSize, q63_t * pResult) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult sum of the squares value returned here 注意事项: 输入参数是1.31格式,两个数据的乘积就是1.31*1.31 = 2.62格式,这里将此结果右移14位,也就是将低14位数据截取掉,最终的输出做64位饱和运算,结果是16.48格式。 |
|
|
|
|
|
|
|
|
11.4.3 arm_power_q15
函数定义如下: void arm_power_q15(q15_t * pSrc, uint32_t blockSize, q63_t * pResult) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult sum of the squares value returned here 注意事项: 输入参数是1.15格式,两个数据的乘积就是1.15*1.15 = 2.30格式,最终的输出做64位饱和运算,结果是34.30格式。 11.4.4 arm_power_q7 函数定义如下: void arm_power_q7(q7_t * pSrc, uint32_t blockSize, q31_t * pResult) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult sum of the squares value returned here 注意事项: 输入参数是1.7格式,两个数据的乘积就是1.7*1.7 = 2.14格式,最终的输出做32位饱和运算,结果是18.14格式。 |
|
|
|
|
|
|
|
|
11.4.5 实例讲解
实验目的: 1. 学习FastMathFunctions中功率的求解 实验内容: 1. 按下摇杆UP键, 串口打印函数DSP_Power的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_Power * 功能说明: 求功率 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_Power(void) { float32_t pSrc[10] = {0.6948, 0.3171, 0.9502, 0.0344, 0.4387, 0.3816, 0.7655, 0.7952, 0.1869, 0.4898}; float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q63_t pResult1; q15_t pSrc2[10]; q63_t pResult2; q7_t pSrc3[10]; q31_t pResult3; arm_power_f32(pSrc, 10, &pResult); printf("arm_power_f32 : pResult = %frn", pResult); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); } arm_power_q31(pSrc1, 10, &pResult1); printf("arm_power_q31 : pResult = %lldrn", pResult1); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; } arm_power_q15(pSrc2, 10, &pResult2); printf("arm_power_q15 : pResult = %lldrn", pResult2); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc3[pIndex] = rand()%128; } arm_power_q7(pSrc3, 10, &pResult3); printf("arm_power_q7 : pResult = %drn", pResult3); printf("******************************************************************rn"); } |
|
|
|
|
|
|
|
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 06:21 , Processed in 1.036296 second(s), Total 100, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖