完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
转dsp系列教程
本期教程主要讲解统计函数中的标准偏差、均方根和方差的计算。 12.1 标准偏差 Standard deviation 12.2 均方差RMS 12.3 方差 Variance 12.4 总结 12.1 标准偏差Standard deviation 这部分函数用于计算标准偏差,公式描述如下: Result = sqrt((sumOfSquares - sum2 / blockSize) / (blockSize - 1)) 其中: sumOfSquares = pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1] sum = pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1] 12.1.1 arm_std_f32 此函数的使用比较简单,函数定义如下: void arm_std_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 standard deviation value returned here |
|
相关推荐
|
|
12.1.2 arm_std_q31
此函数的使用比较简单,函数定义如下: void arm_std_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 standard deviation value returned here 注意事项: 输入参数是1.31格式的,相乘后输出就是1.31*1.31 = 2.62格式,这种情况下,函数内部使用的64位累加器很容易溢出,并且这个函数不支持饱和运算,这个函数的使用还有一些问题,有待后面解决。 12.1.3 arm_std_q15 此函数的使用比较简单,函数定义如下: void arm_std_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 standard deviation value returned here 注意事项: 输入参数是1.15格式,相乘后的的结果就是1.15*1.15 = 2.30格式,这种情况下,内部64位累加器的的格式就是34.30。最终的输出结果要截取到低15位数据,然后通过饱和运算最终输出数据格式1.15。 |
|
|
|
|
|
12.1.4 实例讲解
实验目的: 1. 学习StatisticsMathFunctions中标准偏差的求解 实验内容: 1. 按下按键K1, 串口打印函数DSP_Std的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_Std * 功能说明: 求标准偏差 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_Std(void) { float32_t pSrc[10] = {0.6557, 0.0357, 0.8491, 0.9340, 0.6787, 0.7577, 0.7431, 0.3922, 0.6555, 0.1712}; float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q31_t pResult1; q15_t pSrc2[10]; q15_t pResult2; arm_std_f32(pSrc, 10, &pResult); (1) printf("arm_std_f32 : pResult = %frn", pResult); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); } arm_std_q31(pSrc1, 10, &pResult1); (2) printf("arm_std_q31 : pResult = %drn", pResult1); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; } arm_std_q15(pSrc2, 10, &pResult2); (3) printf("arm_std_q15 : pResult = %drn", pResult2); printf("******************************************************************rn"); } |
|
|
|
|
|
1. 这个是浮点数标准偏差求解,这里我们先用matlab生成一组随机的浮点数,并求解其对应的标准偏差,然后再用此函数获取标准偏差作为对比。
在matlab的命令窗口输入如下命令: rand(1,10) %1行10列 然后再通过命令std获得标准偏差: std(ans) matlab求得标准偏差数值是0.2935,而DSP函数求得结果是0.293485,基本是一致的。 2. 这个函数的使用还没有搞懂,有待后面解决。 3. 这个函数的使用还没有搞懂,有待后面解决。 |
|
|
|
|
|
12.2 均方根RMS
这部分函数用于计算标准偏差,公式描述如下: Result = sqrt(((pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]) / blockSize)); 12.2.1 arm_rms_f32 函数定义如下: void arm_rms_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 rms value returned here 12.2.2 arm_rms_q31 函数定义如下: void arm_rms_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 rms value returned here 注意事项: 输入参数是1.31格式的,相乘后输出就是1.31*1.31 = 2.62格式,这种情况下,函数内部使用的64位累加器很容易溢出,并且这个函数不支持饱和运算。 |
|
|
|
|
|
12.2.3 arm_rms_q15
函数定义如下: void arm_rms_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 rms value returned here 注意事项: 输入参数是1.15格式,相乘后的的结果就是1.15*1.15 = 2.30格式,这种情况下,内部64位累加器的的格式就是34.30。最终的输出结果要截取到低15位数据,然后通过饱和运算最终输出数据格式1.15。 |
|
|
|
|
|
12.2.4 实例讲解
实验目的: 1. 学习StatisticsMathFunctions中均方根的求解 实验内容: 1. 按下按键K2, 串口打印函数DSP_RMS的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_RMS * 功能说明: 求均方值 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_RMS(void) { float32_t pSrc[10] = {0.7060, 0.0318, 0.2769, 0.0462, 0.0971, 0.8235, 0.6948, 0.3171, 0.9502, 0.0344}; float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q31_t pResult1; q15_t pSrc2[10]; q15_t pResult2; arm_rms_f32(pSrc, 10, &pResult); printf("arm_rms_f32 : pResult = %frn", pResult); (1) /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); } arm_rms_q31(pSrc1, 10, &pResult1); (2) printf("arm_rms_q31 : pResult = %drn", pResult1); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; } arm_rms_q15(pSrc2, 10, &pResult2); (3) printf("arm_rms_q15 : pResult = %drn", pResult2); printf("******************************************************************rn"); } |
|
|
|
|
|
1. 这个是浮点数均方根求解,这里我们先用matlab生成一组随机的浮点数,并求解其对应的均方根,然后再用此函数获取标准偏差作为对比。
在matlab的命令窗口输入如下命令: a = rand(1,10) %1行10列 然后再通过命令std获得标准偏差: rms(a) 图片:12.4.png 2. 这个函数的使用还没有搞懂,有待后面解决。 3. 这个函数的使用还没有搞懂,有待后面解决。 |
|
|
|
|
|
12.3 方差Variance
这部分函数用于计算标准偏差,公式描述如下: Result = sqrt(((pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]) / blockSize)); 12.3.1 arm_var_f32 函数定义如下: void arm_var_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 variance value returned here |
|
|
|
|
|
12.3.2 arm_var_q31
函数定义如下: void arm_var_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 rms value returned here 12.3.3 arm_var_q15 函数定义如下: void arm_var_q15(q15_t * pSrc, uint32_t blockSize, q31_t * pResult) 参数定义: [in] *pSrc points to the input vector [in] blockSize length of the input vector [out] *pResult rms value returned here 注意事项: 输入参数是1.15格式,相乘后的的结果就是1.15*1.15 = 2.30格式,这种情况下,内部64位累加器的的格式就是34.30。最终的输出结果要截取到低15位数据,然后通过饱和运算最终输出数据格式1.15。 |
|
|
|
|
|
12.3.4 实例讲解
实验目的: 1. 学习StatisticsMathFunctions中方差的求解 实验内容: 1. 按下按键K3, 串口打印函数DSP_Var的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下: |
|
|
|
|
|
程序设计:
复制代码 /* ********************************************************************************************************* * 函 数 名: DSP_RMS * 功能说明: 求最小值 * 形 参:无 * 返 回 值: 无 ********************************************************************************************************* */ static void DSP_Var(void) { float32_t pSrc[10] = { 0.4387, 0.3816, 0.7655, 0.7952, 0.1869, 0.4898, 0.4456, 0.6463, 0.7094, 0.7547}; float32_t pResult; uint32_t pIndex; q31_t pSrc1[10]; q63_t pResult1; q15_t pSrc2[10]; q31_t pResult2; arm_var_f32(pSrc, 10, &pResult); printf("arm_var_f32 : pResult = %frn", pResult); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc1[pIndex] = rand(); } arm_var_q31(pSrc1, 10, &pResult1); printf("arm_var_q31 : pResult = %lldrn", pResult1); /*****************************************************************/ for(pIndex = 0; pIndex < 10; pIndex++) { pSrc2[pIndex] = rand()%32768; } arm_var_q15(pSrc2, 10, &pResult2); printf("arm_var_q15 : pResult = %drn", pResult2); printf("******************************************************************rn"); } |
|
|
|
|
|
1. 这个是浮点数均方根求解,这里我们先用matlab生成一组随机的浮点数,并求解其对应的均方根,然后再用此函数获取标准偏差作为对比。
在matlab的命令窗口输入如下命令: a = rand(1,10) %1行10列 然后再通过命令var获得标准偏差: var(a) 2. 这个函数的使用还没有搞懂,有待后面解决。 3. 这个函数的使用还没有搞懂,有待后面解决。 |
|
|
|
|
|
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12013 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:17 , Processed in 0.870297 second(s), Total 63, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号