特别说明:完整45期数字信号处理教程,原创高性能示波器代码全开源地址:链接
1 r3 y$ F1 F9 G第16章 ControllerFunctions的使用(二)
7 r% B3 ?8 Z; g! o: s 本期教程主要讲解控制函数中的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光盘里面有此软件)查看打印信息现象如下: 程序设计: - /*
/ U3 }6 g" E4 Z+ u+ s7 u/ [' F - ********************************************************************************************************* w- S5 }& b# }+ e
- * 函 数 名: DSP_SIN_COS
0 e- t+ W$ @7 o - * 功能说明: 浮点数cos和sin计算
3 o7 A( i- x% q - * 形 参:无5 h! I( X8 Y, B6 o! T
- * 返 回 值: 无
3 [- ^: k! N1 w* w1 e" ~ - *********************************************************************************************************
& M9 l# m5 h4 `* g7 U4 x - */" R+ u* m. s2 P0 t# ?6 z
- static void DSP_SIN_COS(void)9 @. X/ }1 ?0 Y, o+ Y8 k& u
- {* \/ g' b& t( ^) R( ?+ G1 |
- int16_t i;: [. O% f( R8 G% d/ I
- float32_t pSinVal;5 `* B7 l, D% o, P- I
- float32_t pCosVal;- m' X5 e& `" Y4 x r
-
7 F8 {8 y/ Q. h2 g# w3 Z - for(i = -180; i < 180; i++)2 P0 `* D# I7 Z
- {* R4 D' L/ U$ C' u+ [$ \, N
- arm_sin_cos_f32(i, &pSinVal, &pCosVal); (1)3 E, t# C$ W' L4 N& a
- printf("i = %d pSinVal = %f pCosVal = %f\r\n", i, pSinVal, pCosVal);0 I) |) {+ ^7 u" A& o. M( O
- // printf("%f\r\n", pSinVal); (2)" M$ K/ C+ x9 E1 @* |
- // printf("%f\r\n", pCosVal); (3)0 i. c/ f, L( `
- }
1 `6 r4 b' _- M5 o& z- [ - }
复制代码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光盘里面有此软件)查看打印信息现象如下: 程序设计: - /*
( _' A0 e' c) ^6 C' a% S' y3 Y) G - *********************************************************************************************************$ C: Z) z' Q' W- }
- * 函 数 名: DSP_SIN_COS_Q31
% X1 ~+ C. H- ?/ l( n - * 功能说明: 定点数cos和sin计算
6 t( P1 H1 o+ g5 d" k9 c% g - * 形 参:无+ t5 w; E1 P3 s
- * 返 回 值: 无' {1 a, S0 ]; h& h' `) B) [3 l
- *********************************************************************************************************
" O. s! L8 R0 y% v z - */
& z8 _5 K& E l5 h - static void DSP_SIN_COS_Q31(void)2 Q* [( L, a% G2 y5 h3 a
- {! g( C7 m9 A: g4 L0 {6 M3 Q
- int16_t i;
2 k* v* p8 W. r - q31_t pSinVal;
8 u: ^+ r" r3 u3 H/ ? - q31_t pCosVal;5 f# n0 I! F/ G. O0 S; P$ u
- b! y: a# D$ ?' c
- for(i = -256; i < 256; i++)
6 C4 x/ j+ B2 P3 ?3 ~9 _" P - {/ `2 Z3 o- Z9 t# \: V* r
- arm_sin_cos_q31(i*8388608, &pSinVal, &pCosVal); (1)$ T4 M* b6 y# _0 k
- printf("i = %d pSinVal = %d pCosVal = %d\r\n", i, pSinVal, pCosVal);
, U; J' ]2 o( g; K - // printf("%d\r\n", pSinVal); (2)
) @5 u I3 r. R8 E - // printf("%d\r\n", pCosVal); (3)
; C5 {# L9 G, d7 o6 w3 k' z/ w9 H - }
( i" p' ~. a- z' I+ C, _ - }
复制代码1. sin和cos数据的求解。 2. 通过matlab绘制sin函数的输出数据的曲线(绘制方法见第10章的10.4小节) 3. 通过matlab绘制cos函数的输出数据的曲线(绘制方法见第10章的10.4小节) 16.3 Clarke 正变换和逆变换 暂时没有研究,留待以后解决。 16.4 Park 正变换和逆变换 暂时没有研究,留待以后解决。 16.5 总结 本期教程就跟大家讲这么多,有兴趣的可以深入研究下算法的实现。 3 k! R+ `3 g! U( A% X: w
|