矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2287|回复: 4

STM32汇编8点FFT

[复制链接]
     
发表于 2017-12-31 13:34:31 | 显示全部楼层 |阅读模式
本帖最后由 yjmwxwx 于 2017-12-31 13:39 编辑

Radix-2的8点FFT,把书上那个例子搬到了单片机上,整数运算,程序没用循环所以比较大





输入3535,3535,6464,10607,3535,-10607,-13535,-3535
最后乘旋转因子又放大了10。





程序的所有文件 fft3.zip (14.25 KB, 下载次数: 52)

截图_2017-12-31_13-30-01.png


截图_2017-12-31_13-30-58.png




打印结果,0X20000F50开始依次是 ;
r表示实部,i表示虚部。


结果.png

0r,0i,4r,ri
2r,2i,6r,6i
1r,1i,5r,5i
3r,3i,7r,7i


  1.         @ stm32f030f4p6 asm
  2.         @fft 8点
  3.          .thumb                 
  4.          .syntax unified
  5. .section .data       
  6.                .equ STACKINIT,                 0x20001000
  7. shuru:          .int 3535,3535,6464,10607,3535,-10607,-13535,-3535
  8.         .section .text
  9. vectors:        
  10.         .word STACKINIT         
  11.         .word _start + 1        
  12.         .word _nmi_handler + 1  
  13.         .word _hard_fault  + 1  
  14.         .word 0
  15.         .word 0   
  16.         .word 0
  17.         .word 0
  18.         .word 0
  19.         .word 0
  20.         .word 0
  21.         .word _svc_handler +1
  22.         .word 0
  23.         .word 0
  24.         .word _pendsv_handler +1
  25.        
  26. _start:
  27.        

  28. _fftjisuan:
  29.         mov r12, sp     
  30.         @一
  31.         ldr r0, = shuru        @实
  32.         ldr r1, [r0]                @0
  33.         ldr r2, [r0, # 0x10]            @4
  34.         adds r4, r1, r2
  35.         subs r5, r1, r2
  36.         ldr r1, [r0, # 0x08]            @2
  37.         ldr r2, [r0, # 0x18]            @6
  38.         adds r6, r1, r2
  39.         subs r7, r1, r2
  40.         push {r4-r7}       
  41.        
  42.         ldr r1, [r0, # 0x04]           @1
  43.         ldr r2, [r0, # 0x14]           @5
  44.         adds r4, r1, r2
  45.         subs r5, r1, r2
  46.         ldr r1, [r0, # 0x0c]       @3
  47.         ldr r2, [r0, # 0x1c]           @7
  48.         adds r6, r1, r2
  49.         subs r7, r1, r2
  50.        
  51.         @二                        @r4=1,r5=5,r6=3,r7=7

  52.         
  53.                                
  54.         adds r0, r4, r6
  55.         subs r1, r4, r6
  56.         movs r2, # 0
  57.         movs r3, # 0
  58.         subs r6, r3, # 1
  59.         muls r6, r7, r6
  60.         mov r4, r5         @实
  61.         movs r5, # 0
  62.         adds r6, r5, r6
  63.         subs r7, r5, r6
  64.         mov r5, r4
  65.         mov r11, sp
  66.         push {r4-r7}
  67.         push {r0-r7}
  68.         mov r10, sp
  69.                          
  70.         mov sp, r11
  71.         pop {r4-r7}                       @r4=0,r5=4,r6=2,r7=6
  72.         adds r0, r4, r6
  73.         subs r1, r4, r6
  74.         movs r2, # 0
  75.         movs r3, # 0
  76.         subs r6, r3, # 1
  77.         muls r6, r7, r6
  78.         mov r4, r5          @实
  79.         movs r5, # 0
  80.         adds r6, r5, r6
  81.         subs r7, r5, r6
  82.         mov r5, r4
  83.        
  84.         push {r0-r7}              @r0=0r,r1=2r,r2=0i,r3=2i
  85.                                 @r4=4r,r5=6r,r6=4i,r7=6i

  86.        
  87.         pop {r0-r3}
  88.         mov r8, sp
  89.         mov sp, r10
  90.         pop {r4-r7}
  91.         mov r9, sp
  92.                                 @r0=0r,r1=2r,r2=0i,r3=2i
  93.         mov sp, r10                @r4=1r,r5=3r,r6=1i,r7=3i
  94.         push {r0,r2,r4,r6}
  95.         push {r1,r3,r5,r7}
  96.         mov r10, sp

  97.        
  98.         mov sp, r8
  99.         pop {r4-r7}
  100.         mov sp, r9
  101.         pop {r0-r3}
  102.                                 @r0=4r,r1=6r,r2=4i,r3=6i
  103.                                 @r4=5r,r5=7r,r6=5i,r7=7i
  104.         mov sp, r10
  105.         push {r0,r2,r4,r6}
  106.         push {r1,r3,r5,r7}
  107.        
  108.         @三

  109.        
  110.         pop {r4-r7}                @r4=7r,r5=7i,r6=6r,r7=6i
  111.         mov r11, sp
  112.         movs r2, # 0
  113.         subs r2, r2, # 7
  114.        
  115.         mov r0, r4
  116.         muls r0, r0, r2
  117.         mov r1, r5
  118.         muls r1, r1, r2
  119.         subs r0, r0, r1         @ac-bd=dr
  120.         mov r8, r0
  121.         mov r0, r4
  122.         muls r0, r0, r2         @ad
  123.         mov r1, r5
  124.         muls r1, r1, r2         @bc
  125.         adds r1, r1, r0         @ad+br=di
  126.         mov r0, r8
  127.         movs r2, # 10
  128.         muls r6, r6, r2
  129.         muls r7, r7, r2
  130.         adds r2, r6, r0
  131.         adds r3, r7, r1
  132.         subs r6, r6, r0
  133.         subs r7, r7, r1
  134.         push {r2,r3,r6,r7}        @r2=3r,@r3=3i,@r6=7r,r7=7i
  135.         mov r10, sp

  136.         mov sp, r11
  137.         pop {r4-r7}            
  138.         mov r11, sp
  139.         movs r2, # 7
  140.         movs r3, # 0
  141.         subs r3, r3, # 7

  142.         mov r0, r4
  143.         muls r0, r0, r2
  144.         mov r1, r5
  145.         muls r1, r1, r3
  146.         subs r0, r0, r1         @ac-bd=dr
  147.         mov r8, r0
  148.         mov r0, r4
  149.         muls r0, r0, r3         @ad
  150.         mov r1, r5
  151.         muls r1, r1, r2         @bc
  152.         adds r1, r1, r0         @ad+br=di
  153.         mov r0, r8
  154.         movs r2, # 10
  155.         muls r6, r6, r2
  156.         muls r7, r7, r2
  157.         adds r2, r6, r0
  158.         adds r3, r7, r1
  159.         subs r6, r6, r0
  160.         subs r7, r7, r1
  161.         mov sp, r10
  162.         push {r2,r3,r6,r7}       @r2=4r,r3=4i,r6=5r,r7=5i
  163.         mov r10, sp
  164.        
  165.        
  166.         mov sp, r11
  167.         pop {r4-r7}                @r4=2r,r5=2i,r6=3r,r7=3i
  168.         mov r11, sp
  169.         movs r2, # 0
  170.         movs r3, # 10
  171.         subs r3, r2, r3
  172.         mov r0, r6
  173.         muls r0, r0, r2         @ac
  174.         mov r1, r7
  175.         muls r1, r1, r3         @bd
  176.         subs r0, r0, r1         @ac-bd=dr
  177.         mov r8, r0
  178.         mov r0, r6
  179.         muls r0, r0, r3         @ad
  180.         mov r1, r7
  181.         muls r1, r1, r2         @bc
  182.         adds r1, r0, r1         @ad+br=di
  183.         mov r0, r8
  184.         movs r2, # 10
  185.         muls r4, r4, r2
  186.         muls r5, r5, r2
  187.         adds r2, r4, r0
  188.         adds r3, r5, r1
  189.         subs r6, r4, r0
  190.         subs r7, r5, r1
  191.         mov sp, r10
  192.         push {r2,r3,r6,r7}   @r2=2r,r3=2i,r6=3r,r7=3i
  193.         mov r10, sp
  194.        
  195.         mov sp, r11
  196.         pop {r4-r7}                @r4=0r,r5=0i,r6=1r,r7=1i
  197.         movs r2, # 10
  198.         muls r4, r4, r2
  199.         muls r5, r5, r2
  200.         muls r6, r6, r2
  201.         muls r7, r7, r2
  202.         adds r0, r4, r6
  203.         adds r1, r5, r7
  204.         subs r2, r4, r6
  205.         subs r3, r5, r7
  206.         push {r0-r3}
  207.        

  208. _tingting:
  209.         b _tingting
  210.                
  211. _nmi_handler:
  212.         bx lr
  213. _hard_fault:
  214.         bx lr
  215. _svc_handler:
  216.         bx lr
  217. _pendsv_handler:
  218.         bx lr
复制代码





     
发表于 2018-1-1 08:26:37 | 显示全部楼层
这个和前两天发的那个一样吗?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-1 10:51:48 | 显示全部楼层
zystbbs 发表于 2018-1-1 08:26
这个和前两天发的那个一样吗?

一样就是换成了整数计算
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-1 17:34:26 | 显示全部楼层
la45088d1 发表于 2018-1-1 16:15
循环展开也是一种提高效率的方法,这次的代码不知道怎么说,反正算是没有太多的槽点。细节上可以优化看看。 ...

这个一时脑袋发烧居然用堆栈存取的数据,要是还有个定时器1MS中断一次,那这个程序就不能用了,临时变量在堆栈指针下面了,还有感觉这个用小数放大十进制倍数也不好,感觉最近写的越来越差了,就像蒙着眼睛走路一样瞎搞,真要好好改改了,反正闲着无聊。 别人那些简单算法真不知道怎么搞的,人家那个程序不用重新排序乘法和加减也用的少,没有蝴蝶图单纯看程序也不太好判断人家怎么算的。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-1-1 18:31:21 | 显示全部楼层
la45088d1 发表于 2018-1-1 16:15
循环展开也是一种提高效率的方法,这次的代码不知道怎么说,反正算是没有太多的槽点。细节上可以优化看看。 ...

谢谢你以前给我提的流水线的问题,我那时候比较懒也没仔细看,现在打算找本书看看解决这个问题
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 07:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表