|

楼主 |
发表于 2019-9-6 12:02:15
|
显示全部楼层
继续瞎搞,DFT计算实部虚部,LCD1602左上显示上臂实部,左下显示上臂虚部,右上显示下臂实部,右下显示下臂虚部,第二行2表示量程在1K电阻,没开自动量程,显示的数没平均,跳动比较大,也没有补偿校准,先验证下算法。
计算过程
网页版计算器
https://www.hackmath.net/en/calculator/complex-number?input=%E2%88%92335.531135531%E2%88%924363.36996337i&submit=Calculate
http://hyperphysics.phy-astr.gsu.edu/hbase/electric/accap.html#c2
搞的DFT程序不知道有没有问题,没测试,正电压采集一个表,负电压采集一个表,读负电压表时候取反。
电脑上程序生成一个COS和SI的表,不知道这程序有没有问题,结果Q15定点数。
N=点数
M= 生成第几个点
- #include <stdio.h>
- #include <math.h>
- #include <stdlib.h>
- void main() {
- float m,pi,sr,si;
- int rr,ii, n,i;
- n=100;
- m=2;
- pi=3.141592;
- for(i=0;i<n;i++){
- sr=cos(2*pi*i*m/n);
- si=-sin(2*pi*i*m/n);
- rr=sr*0x8000;
- ii=si*0x8000;
- printf("0x%04X,0x%04X,",rr,ii);
- }
- printf("\n");
- }
复制代码
单片机DFT函数,这个没测试不知道有没有问题,其实就是乘法和加法
- __DFT_ji_suan:
- @入口R0=正相表,R1=反相表
- @出口 R0= 实部,R1=虚部
- push {r2-r7,lr}
- mov r4, r8
- mov r5, r9
- mov r6, r10
- push {r4-r6}
- movs r6, # 0
- mov r8, r6
- mov r9, r6
- movs r2, # 200
- mov r10, r2
- mov r2, r6
- __ji_suan_dft_xun_huan:
- ldrh r3, [r0, r2]
- ldrh r4, [r1, r2]
- cmp r3, # 0
- beq __qu_fan_r4
- b __ji_suan_dft
- __qu_fan_r4:
- mvns r4, r4
- adds r4, r4, # 1
- mov r3, r4
- __ji_suan_dft:
- ldr r5, = xuan_zhuan_yin_zi
- ldr r7, [r5, r6]
- adds r6, r6, # 4
- muls r7, r7, r3 @ 实部
- asrs r7, r7, # 15
- mov r4, r8
- adds r4, r4, r7
- mov r8, r4
- ldr r7, [r5, r6]
- adds r6, r6, # 4
- muls r7, r7, r3 @ 虚部
- asrs r7, r7, # 15
- mvns r7, r7
- adds r7, r7, # 1
- mov r4, r9
- adds r4, r4, r7
- mov r9, r4
- adds r2, r2, # 2
- cmp r2, r10
- bne __ji_suan_dft_xun_huan
- mov r0, r8
- mov r1, r9
- pop {r4-r6}
- mov r8, r4
- mov r9, r5
- mov r10, r6
- pop {r2-r7,pc}
复制代码
单片机的程序
1.zip
(9.97 KB, 下载次数: 58)
|
-
|