特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接! ^0 D! w# |5 O O( r% i
第16章 ControllerFunctions的使用(二) " e/ l" ~8 x0 g6 Z K. q
本期教程主要讲解控制函数中的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光盘里面有此软件)查看打印信息现象如下: 程序设计: - /*
" d4 @; U4 n- d, r - *********************************************************************************************************- i* w+ A% W$ M. ^
- * 函 数 名: DSP_SIN_COS; c3 i$ j" P9 H$ s& v
- * 功能说明: 浮点数cos和sin计算
7 q- l# Y R1 O% m* ^ - * 形 参:无
! Q/ B8 `7 a- R, n7 s( G - * 返 回 值: 无
2 O$ L8 H' x) M! N& [ - *********************************************************************************************************8 ?# s# h* {8 B( A! f
- */* X; D; P8 v0 F+ ^9 C
- static void DSP_SIN_COS(void)
: z" s* ?5 t" w- E" x1 F4 d0 u - {
) y) l- {4 u4 J - int16_t i;
' f% d! ]3 K* _" V/ a( B; O8 E - float32_t pSinVal;
5 o' x" ]$ {; I# }4 S' e - float32_t pCosVal;
. P% A0 I5 B) l0 ^6 J! k- { -
9 P0 _5 I c2 \5 F: L" ^ - for(i = -180; i < 180; i++)* s6 _/ i) ~, B8 o6 K! q0 n( m+ V
- {
9 L7 [6 Z5 u- E" i. u; L - arm_sin_cos_f32(i, &pSinVal, &pCosVal); (1)- w5 w" w( ~2 N
- printf("i = %d pSinVal = %f pCosVal = %f\r\n", i, pSinVal, pCosVal);
- g* l4 D& p* L' K& ^ - // printf("%f\r\n", pSinVal); (2)1 v1 E D1 i8 `- c) |( U/ r6 C, G1 |
- // printf("%f\r\n", pCosVal); (3) j2 D: R7 u1 R
- }# |% i! L# _" K9 H5 q
- }
复制代码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光盘里面有此软件)查看打印信息现象如下: 程序设计: - /*
% c* T$ Z4 F1 R. Z4 {% p+ w* c - *********************************************************************************************************
, o, O, k/ f" \ - * 函 数 名: DSP_SIN_COS_Q31$ w: j+ U6 N( ~: T+ O0 Y9 q
- * 功能说明: 定点数cos和sin计算
$ s3 i9 L+ Q# i) y1 | - * 形 参:无8 B" _; F' p, V
- * 返 回 值: 无& ~9 T0 D& ~- b, y& m; j
- *********************************************************************************************************( n8 h' {. L) w) G4 b
- */
; U6 f0 h7 U4 ^) | J( h O - static void DSP_SIN_COS_Q31(void)
" C5 k8 K/ W6 c2 t5 r - {$ r7 x1 p2 G: P9 Q
- int16_t i;0 q7 g0 ]9 e" @4 T; p
- q31_t pSinVal;
2 c% l+ ]5 }8 e/ Q4 ^: w& a( ~4 N - q31_t pCosVal;
/ D3 e/ M# `3 n1 [2 P - ) c4 e" A: d2 F3 j' r! y5 ]6 D T
- for(i = -256; i < 256; i++)1 P% t* u7 r* S& E2 s; T' ]. _) G' P4 e
- {8 o4 D0 o$ |" ?& E
- arm_sin_cos_q31(i*8388608, &pSinVal, &pCosVal); (1)
/ I+ v% I, z# `" D/ K5 O' X0 s/ w2 i - printf("i = %d pSinVal = %d pCosVal = %d\r\n", i, pSinVal, pCosVal); : u8 _+ n, [0 C; ^" P1 m/ b7 X2 N
- // printf("%d\r\n", pSinVal); (2)7 c0 V1 K3 r4 Z9 O8 w$ _
- // printf("%d\r\n", pCosVal); (3)9 F# m# o- J# \, b! b
- }$ v( l L$ `! L& k% v/ f
- }
复制代码1. sin和cos数据的求解。 2. 通过matlab绘制sin函数的输出数据的曲线(绘制方法见第10章的10.4小节) 3. 通过matlab绘制cos函数的输出数据的曲线(绘制方法见第10章的10.4小节) 16.3 Clarke 正变换和逆变换 暂时没有研究,留待以后解决。 16.4 Park 正变换和逆变换 暂时没有研究,留待以后解决。 16.5 总结 本期教程就跟大家讲这么多,有兴趣的可以深入研究下算法的实现。
2 T: I) m% E: l+ G' C |