|
特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接' [3 w8 B& R0 w0 U) o0 ` 第17章 ComplexMathFunctions的使用(一) 8 j) N* @0 J+ k. | l: Q 本期教程主要讲解复数运算中的共轭,点乘和模的求解(什么是复数,大家应该还有印象吧,这个很重要,在后面FFT等算法的处理时都要用到,印象不深的同学需要简单的补充下高数知识)。 17.1 复数共轭运算 ComplexConj 17.2 复数点乘 ComplexDotProduct 17.3 复数求模 ComplexMag 17.4 总结 17.1 复数共轭运算 ComplexConj17.1.1 arm_cmplx_conj_f32 公式描述: for(n=0; n<numSamples; n++) { pDst[(2*n)+0)] = pSrc[(2*n)+0]; // 实部 pDst[(2*n)+1)] = -pSrc[(2*n)+1]; // 虚部 } 函数定义如下: void arm_cmplx_conj_f32(float32_t * pSrc, float32_t * pDst, uint32_t numSamples) 参数定义: *pSrc points to the input vector *pDst points to the output vector numSamples number of complex samples in each vector 注意事项: 1. 数组pSrc中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6] = {1, -1, 0, 1, 2, 3}。 (注意第三个数据是0)。函数的输出结果pDst也是按照这个顺序存储的。 , S2 n1 m& u/ J$ n+ @6 q+ Z2 N$ B; \' w9 j; a 17.1.2 arm_cmplx_conj_q31 公式描述: for(n=0; n<numSamples; n++) { pDst[(2*n)+0)] = pSrc[(2*n)+0]; // 实部 pDst[(2*n)+1)] = -pSrc[(2*n)+1]; // 虚部 } 函数定义如下: void arm_cmplx_conj_q31(q31_t * pSrc, q31_t * pDst, uint32_t numSamples) 参数定义: *pSrc points to the input vector *pDst points to the output vector numSamples number of complex samples in each vector 注意事项: 1. 数组pSrc中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6] = {1, -1, 0, 1, 2, 3}。 (注意第三个数据是0)。函数的输出结果pDst也是按照这个顺序存储的。 2. 这个函数使用了饱和运算。 3. 数值0x80000000由于饱和运算将变成0x7FFFFFFF。 ! z. F3 {( q7 k$ Y3 w% w+ u 17.1.3 arm_cmplx_conj_q15 公式描述: for(n=0; n<numSamples; n++) { pDst[(2*n)+0)] = pSrc[(2*n)+0]; // 实部 pDst[(2*n)+1)] = -pSrc[(2*n)+1]; // 虚部 } 函数定义如下: void arm_cmplx_conj_q15(q15_t * pSrc, q15_t * pDst, uint32_t numSamples) 参数定义: *pSrc points to the input vector *pDst points to the output vector numSamples number of complex samples in each vector 注意事项: 1. 数组pSrc中存储的数据格式是(实部,虚部,实部,虚部……………),一定要按照这个顺序存储数据,比如数据1-j,j,2+3j这个三个数在数组中的存储格式就是:pSrc[6] = {1, -1, 0, 1, 2, 3}。 (注意第三个数据是0)。函数的输出结果pDst也是按照这个顺序存储的。 2. 这个函数使用了饱和运算。 3. 数值0x8000由于饱和运算将变成0x7FFF。 ! Y* c8 C# r1 v9 Y$ a( M, k9 P8 ]7 w 17.1.4 实例讲解 实验目的: 1. 学习ComplexMathFunctions中复数共轭的求解(首先大家要明白什么是复数共轭) 实验内容: 1. 按下按键K1, 串口打印函数DSP_CONJ的输出结果 实验现象: 通过窗口上位机软件SecureCRT(V5光盘里面有此软件)查看打印信息现象如下:
程序设计:
1. 这里先简单的普及一下复数共轭的基础知识,可能很多人都已经忘记了(来自wiki百科):
的复共轭是
举例明之:
在复数的极坐标表法下,复共轭写成
这点可以透过欧拉公式验证 5 n. \& @) Y7 `5 Z
下面再说一下如何在matlab上面共轭复数。比如我们要求解数组a = [1+2j 2+2j 3+3j j]的共轭复数:
2. Q31格式定点数的共轭求解。 3. Q15格式定点数的共轭求解。 |
微信公众号
手机版
17.2.2 arm_cmplx_dot_prod_q31
17.2.3 arm_cmplx_dot_prod_q15
17.2.4 实例讲解
0 B/ `/ d& ~" G) q3 G/ ^8 z' W
17.3.1 arm_cmplx_mag_f32
17.3.2 arm_cmplx_mag_q31
17.3.3 arm_cmplx_mag_q15
17.3.4 实例讲解
17.4 总结