c语言求sin泰勒级数展开,求正弦函数泰勒展开的C语言算法

在DSP库函数里面看到 qmath 中有qsin(x) qsinlt(x)可是都是汇编的 看不大懂

;***********************************************************************;

;*                                                                     *;

;* File Name     : qsinlt.asm                                          *;

;*                                                                     *;

;* Originator    : Advanced Embeeded Control (AEC)                     *;

;*                 Texas Instruments Inc.                              *;

;*                                                                     *;

;* Description   : This file contain source code for fixed point SIN   *;

;*                function implemented using 256-point look-up table   *;

;*                                                                     *;

;* Date          : 21/1/2002                                           *;

;***********************************************************************;

; Module definition for external referance

.def    _qsinlt

.ref    SINTAB_360

_qsinlt:

SETC    SXM,OVM

MOVL    XAR5,#SINTAB_360

; Obtain the SIN of the angle "X=alpha" using Look-up Table and Linear Interpolation method

MOVB    XAR0,#0

MOV     T,#0

MOVB    AR0,AL.MSB      ; AR0=indice (alpha/2^8)

MOVB    T,AL.LSB        ; T=(X-X1) in Q8 format

MOV     ACC,*+XAR5[AR0] ; ACC=Y1=*(SINTAB_360 + indice)

ADDB    XAR0,#1

MOV     PL,*+XAR5[AR0]  ; PL=Y2

SUB     PL,AL           ; PL=Y2-Y1 in Q15

MPY     P,T,PL          ; P=Y2-Y1 in Q23

LSL     ACC,8           ; ACC=Y1 in Q23

ADDL    ACC,P           ; Y=Y1+(Y2-Y1)*(X-X1)

MOVH    AL,ACC<<8       ; AL=Y in Q15 format

LRETR

;***********************************************************************;

;*                                                                     *;

;* File Name     : qsin.asm                                            *;

;*                                                                     *;

;* Originator    : Advanced Embeeded Control (AEC)                     *;

;*                 Texas Instruments Inc.                              *;

;*                                                                     *;

;* Description   : This file contain source code for fixed point SIN   *;

;*                function implemented using Tylor series              *;

;*                                                                     *;

;* Date          : 21/1/2002                                           *;

;***********************************************************************;

;* Tylor Series Approximation in the first quardrant:                  *;

;*                                                                     *;

;* sin(x) = 3.1406625*x+0.02026367*x^2-5.325196*x^3+0.5446778*x^4      *;

;* +1.800293*x^5, where 'x' is the normalized radians                  *;

;*                                                                     *;

;***********************************************************************;

.ref _qsin  ;External ref

K5      .set 0x6480             ; Scaled to Q13

K4      .set 0x52FF             ; Scaled to Q20

K3      .set 0xAACC             ; Scaled to Q12

K2      .set 0x45B8             ; Scaled to Q15

K1      .set 0x7338             ; Scaled to Q14

_qsin:

SETC    SXM,OVM         ; ACC=x

MOV     ACC,AL<<16      ; AH='x', AL=0

CLRC    TC

ABSTC   ACC             ; TC= sign(x), AH=abs(x)

LSL     ACC,#1          ; Convert to first quadrant (0 to pi/2)

ABS     ACC

SFR     ACC,#1

MOVL    XT,ACC          ; XT=x in Q31 and in first quardrant

; Comment Next 2-instructions, if this works

MPY     ACC,T,#K1

;       MOV     AR5,#K1         ; AR5=K1

;       MPY     ACC,T,AR5       ; ACC=K1*x in Q29

ADD     ACC,#K2<<14     ; ACC=K1*x+K2 in Q29

QMPYL   ACC,XT,ACC      ; ACC=(K1*x+K2)*x in Q28

ADD     AH,#K3          ; ACC=(K1*x+K2)*x+K3 in Q28

QMPYL   ACC,XT,ACC      ; ACC=((K1*x+K2)*x+K3)*x in Q27

ADD     ACC,#K4<<7      ; ACC=((K1*x+K2)*x+K3)*x+K4 in Q27

QMPYL   ACC,XT,ACC      ; ACC=(((K1*x+K2)*x+K3)*x+K4)*x in Q26

ADD     ACC,#K5<<13     ; ACC=(((K1*x+K2)*x+K3)*x+K4)*x+K5 in Q26

QMPYL   ACC,XT,ACC      ; ACC=((((K1*x+K2)*x+K3)*x+K4)*x+K5)*x in Q25

LSL     ACC,#6          ; in Q31

ABS     ACC             ; Saturate to 0x7fff

NEGTC   ACC             ; ACC=-sin(x), if TC=1

MOV     AL,AH

LRETR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值