单片机c语言fft函数,单片机ADC采样FFT计算试验

本文介绍了如何在单片机中使用C语言实现快速傅里叶变换(FFT)函数,包括ADC采样和幅度计算。通过位反转、蝴蝶运算等步骤详细解析了FFT的计算过程,并提供了具体的代码实现。
摘要由CSDN通过智能技术生成

_jisuanfudu:        [url=home.php?mod=space&uid=72445]@[/url] 计算幅度

[url=home.php?mod=space&uid=72445]@[/url] 入r0= 实部,r1= 虚部

@ 出r0 = 幅度

@ Mag ~=Alpha * max(|I|, |Q|) + Beta * min(|I|, |Q|)

@ Alpha * Max + Beta * Min

push {r1-r3,lr}

movs r0, r0

bpl _shibubushifushu

mvns r0, r0                                @ 是负数转成正数

adds r0, r0, # 1

_shibubushifushu:                                @ 实部不是负数

movs r1, r1

bpl _xububushifushu

mvns r1, r1                                @ 是负数转成正数

adds r1, r1, # 1

_xububushifushu:                                @ 虚部不是负数

cmp r0, # 0

bne _panduanxubushibushi0

mov r0, r1

pop {r1-r3,pc}

_panduanxubushibushi0:

cmp r1, # 0

bne _jisuanfudu1

pop {r1-r3,pc}

_jisuanfudu1:

ldr r2, = 31066                @ Alpha q15 0.948059448969

ldr r3, = 12867                @ Beta q15 0.392699081699

cmp r1, r0

bhi _alpha_min_beta_max

_alpha_max_beta_min:

muls r0, r0, r2

muls r1, r1, r3

asrs r0, r0, # 15

asrs r1, r1, # 15

adds r0, r0, r1

movs r1, # 1

pop {r1-r3,pc}

_alpha_min_beta_max:

muls r0, r0, r3

muls r1, r1, r2

asrs r0, r0, # 15

asrs r1, r1, # 15

adds r0, r0, r1

movs r1, # 0

pop {r1-r3,pc}

_lvboqi:

@滤波器

@R0=地址,R1=长度,r2=表指针地址,r3=ADC数值

@出R0=结果

push {r1-r7,lr}

ldr r5, [r2]                @读出表指针

lsls r6, r1, # 1

strh r3, [r0, r5]        @数值写到滤波器缓冲区

adds r5, r5, # 2

cmp r5, r6

bne _lvboqimeidaohuanchongquding

movs r5, # 0

_lvboqimeidaohuanchongquding:

str r5, [r2]

movs r7, # 0

_lvboqixunhuan:

cmp r5, r6

bne _lvbozonghe

movs r5, # 0

_lvbozonghe:

<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值