特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接
. N4 J3 A$ c, N$ V第16章 ControllerFunctions的使用(二)
) ^1 S R, {2 M+ f5 N8 b 本期教程主要讲解控制函数中的cos和sin函数数值的获取,这里使用的函数比起第10章中使用的sin和cos函数数值的获取要方便很多。 16.1 浮点数SIN和COS 16.2 定点数SIN和COS 16.3 Clark正变换和逆变换 16.4 Park正变换和逆变换 16.5 总结 16.1 浮点数SIN和COS16.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光盘里面有此软件)查看打印信息现象如下: 程序设计: - /*
" W; C X# Q# N/ x! q - *********************************************************************************************************
. W/ d+ ]' B% l - * 函 数 名: DSP_SIN_COS! j5 O. D6 t0 k! `6 u
- * 功能说明: 浮点数cos和sin计算
. V- K2 H8 m! ~ - * 形 参:无
. o5 ], ~( ?( X7 o2 d# S0 I! j9 @6 g - * 返 回 值: 无
4 w4 `( Q( j1 _2 g4 W6 K - *********************************************************************************************************0 `, x: a2 Q# h- N* N0 r% p1 L
- */
! }: _% ~4 j5 @2 a1 t W6 ~# R8 z - static void DSP_SIN_COS(void)$ @. f$ q2 Q, t% O3 @. W8 q
- {
. a/ k: T4 K8 J4 y9 ^! o1 k - int16_t i;5 }5 }, L) x+ S, O& w! I5 g
- float32_t pSinVal;; a" ]) Q0 v0 ~' H: [" u
- float32_t pCosVal;
7 `& \1 T/ U+ g" f; e) }* c -
; B7 L3 @; S+ s7 u. z - for(i = -180; i < 180; i++)
( e/ ?; T/ m r. g! R) k* P - {
+ I/ X5 w6 f* c- P+ f' F* D- ~# D - arm_sin_cos_f32(i, &pSinVal, &pCosVal); (1) d2 ], ~3 Z5 B" M: z% c
- printf("i = %d pSinVal = %f pCosVal = %f\r\n", i, pSinVal, pCosVal);' o- l0 i9 g2 U# r& H! F
- // printf("%f\r\n", pSinVal); (2)
: V- D8 [% ]; ?/ _' G& C) D& r - // printf("%f\r\n", pCosVal); (3) `7 f; V4 }: g8 X, I! p
- }
1 P+ G8 `+ \5 e( r; ^. n8 `. N. M - }
复制代码1. sin和cos数据的求解。 2. 通过matlab绘制sin函数的输出数据的曲线(绘制方法见第10章的10.4小节) 3. 通过matlab绘制cos函数的输出数据的曲线(绘制方法见第10章的10.4小节) 16.2 定点数SIN和COS16.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光盘里面有此软件)查看打印信息现象如下: 程序设计: - /** T* n+ V: \2 u
- *********************************************************************************************************! x1 Y1 s3 f% f0 h
- * 函 数 名: DSP_SIN_COS_Q31
$ k0 c O9 s6 f- L - * 功能说明: 定点数cos和sin计算
- t' j4 i2 p+ t0 ^! k1 \ - * 形 参:无' w0 G1 L" D! I
- * 返 回 值: 无4 T+ A' @4 c' @- v/ A% K
- *********************************************************************************************************
# ~7 E: s( o1 F6 z5 k - */
- C: W. s( O' N - static void DSP_SIN_COS_Q31(void)0 {* Z3 e# D6 c" T* A
- {6 k7 u7 j8 P8 ~7 Z% ~3 d
- int16_t i;
# m8 x: u H7 [9 _+ O6 R! C4 T - q31_t pSinVal;
' V+ Q# e1 V0 ]) P |3 {0 y0 u - q31_t pCosVal;
# j* z/ \( a( l; {1 ]; x -
* R* l- a- F4 T$ U' w5 H: \( A2 K! |8 X% k - for(i = -256; i < 256; i++)0 A- J3 H! ^( F( A+ T3 B
- {
( ?/ E4 @5 u9 }% `. I& a8 ` - arm_sin_cos_q31(i*8388608, &pSinVal, &pCosVal); (1)9 X9 O" Z# m" B8 A
- printf("i = %d pSinVal = %d pCosVal = %d\r\n", i, pSinVal, pCosVal);
. D+ `) S, v" k7 M x - // printf("%d\r\n", pSinVal); (2)
1 t5 u1 W7 Q$ l3 M% w4 H - // printf("%d\r\n", pCosVal); (3); F: y& m# ?4 ]! x: l, N' o
- }
v& s& j: C4 A+ K6 ~ - }
复制代码1. sin和cos数据的求解。 2. 通过matlab绘制sin函数的输出数据的曲线(绘制方法见第10章的10.4小节) 3. 通过matlab绘制cos函数的输出数据的曲线(绘制方法见第10章的10.4小节) 16.3 Clarke 正变换和逆变换 暂时没有研究,留待以后解决。 16.4 Park 正变换和逆变换 暂时没有研究,留待以后解决。 16.5 总结 本期教程就跟大家讲这么多,有兴趣的可以深入研究下算法的实现。
3 o/ \, N8 n" D; P+ q: A0 Q; R |