书到用时 发表于 2019-12-5 21:35:16

yjmwxwx 发表于 2019-12-5 21:38:19

书到用时 发表于 2019-12-5 21:35
楼主头像是三把锄头吗?

镢头,下地干活经常用最小的那种

书到用时 发表于 2019-12-5 22:01:14

yjmwxwx 发表于 2019-12-5 22:07:27

书到用时 发表于 2019-12-5 22:01
镢头是干什么活用的,和镐是同一种东西吗?

挖坑、挖沟、刨根用途很多,冷兵器时代还能当武器。

peiguoqing 发表于 2019-12-10 11:14:06

LZ,您的图纸显示,从信号输出,到ADC采集,竟然都是直流耦合。应该影响不小吧。
当初设计时,没有考虑过交流耦合,是不是更稳定一些?XJW01老师的也是交流耦合。请参考。

请教下:DFT ,FFT 算法,能给讲讲吗?比如,我采集了200个数据,怎么转换?

谢谢!:handshake

yjmwxwx 发表于 2019-12-10 15:32:58

本帖最后由 yjmwxwx 于 2019-12-10 15:35 编辑

peiguoqing 发表于 2019-12-10 11:14
LZ,您的图纸显示,从信号输出,到ADC采集,竟然都是直流耦合。应该影响不小吧。
当初设计时,没有考虑过 ...

电路我也不懂,仪表放大器一开始前面也加过104瓷片电容,后来拆掉也没影响就去掉了,不知道是不是电容质量不行加和不加没区别。

DFT很简单,就是采集到的数据乘正弦和余弦,用主帖里面那个生成正弦表和余弦表的C程序生成200点正弦表和200点余弦表,200点数据分别和余弦表相乘结果再累加就是实部,分别和正弦表相乘累加结果是虚部。

FFT比较麻烦,一开始需要位反转,语言描述比较麻烦,我这有个基-2的模拟程序,不过这个只能计算8、16、32等数据,不能计算200点的,你先用16点的数据看每一步怎么计算的就知道原理了。

就是复数乘法和加减法,只是定点数计算容易益出。

模拟程序








yjmwxwx 发表于 2019-12-10 15:50:29

peiguoqing 发表于 2019-12-10 11:14
LZ,您的图纸显示,从信号输出,到ADC采集,竟然都是直流耦合。应该影响不小吧。
当初设计时,没有考虑过 ...

#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");
}
      


就是这个程序生成正弦和余弦表,我C语言不熟悉,不知道这个程序有没有问题,n是点数,m是代表需要哪个点的频率,本来我做的这个表ADC是1M采样率,除100=10K,每个点10K,我这个表应该在第1个点上,而第1个点上发现数很小,所以就取了第2个,这地方可能有问题,我也不熟悉数字信号处理,不知道到底是哪里问题,网上问也没人解答,也没仪器测正弦波的频率到地是多少,或者采样率不准确,这地方最后我也没搞懂。

我这程序都是自己写的,不是官方的库函数,库函数我还不会用,可能我写的程序有问题,要是能对比下就好了。

peiguoqing 发表于 2019-12-10 20:02:33

yjmwxwx 发表于 2019-12-10 15:50
就是这个程序生成正弦和余弦表,我C语言不熟悉,不知道这个程序有没有问题,n是点数,m是代表需要哪 ...

上面这个程序,由于m=2;推算出,这是计算出了0---4π范围的数据吧。
把m去掉,就是2π范围啊,2*π*i/100;   i取值(0---100);是吧?

peiguoqing 发表于 2019-12-10 20:30:46

本帖最后由 peiguoqing 于 2019-12-10 20:32 编辑

采集数据是不是应该采集0--π,100个点;再采集π/2-----3π/2,100个点。因为相差90°;您怎么采集2π范围的数据呢?

如果这个思路是对的话,C语言编写的正弦余弦函数表,应该每个表采集200个吧?对吗?

,m是代表需要哪个点的频率?   什么意思?

一共才运算2π范围,哪里的频率呢?

peiguoqing 发表于 2019-12-10 20:52:26

yjmwxwx 发表于 2019-12-10 15:32
电路我也不懂,仪表放大器一开始前面也加过104瓷片电容,后来拆掉也没影响就去掉了,不知道是不是电容 ...

请教下,这个图怎么看呢?

前一个数据+后一个数据=d1;

前一个数据-后一个数据=d2;

就是这样作加减法吗?

yjmwxwx 发表于 2019-12-10 21:53:08

本帖最后由 yjmwxwx 于 2019-12-10 22:25 编辑

peiguoqing 发表于 2019-12-10 20:30
采集数据是不是应该采集0--π,100个点;再采集π/2-----3π/2,100个点。因为相差90°;您怎么采集2π范围 ...

这个是计算旋转因子的,我也是在书上看的,不懂为什么这么算。m是频域,n是时域
就是下面这本书
https://yadi.sk/i/ZOUfF96f3QkNMT



yjmwxwx 发表于 2019-12-10 22:02:38

本帖最后由 yjmwxwx 于 2019-12-10 22:32 编辑

peiguoqing 发表于 2019-12-10 20:52
请教下,这个图怎么看呢?

前一个数据+后一个数据=d1;


这个要用复数计算器,其实不想要自己写FFT程序没必要了解细节。

比如下面这个



先用蝴蝶左下乘法旋转因子


(−52078.4160+6222.384i)×(0.8819−0.4714i)=−42994.7232528+30037.285752i

蝴蝶左上 加 第一个式子的结果等于蝴蝶右上

(−37232.3232+41095.1136i)+(−42994.7232528+30037.285752i)=−80227.0464528+71132.399352i

蝴蝶左上减 第一个式子的结果等于蝴蝶右下

(−37232.3232+41095.1136i)−(−42994.7232528+30037.285752i)=5762.4000528+11057.827848i



很简单的,就是乘法、加法、减法















复数计算方法













peiguoqing 发表于 2019-12-11 07:25:11

yjmwxwx 发表于 2019-12-10 22:02
这个要用复数计算器,其实不想要自己写FFT程序没必要了解细节。

比如下面这个


蝴蝶左下乘法旋转因子是什么?

就是您用c语言编写的那个程序吗?   里面那个m=2;怎么不变化呢?真心想知道。:handshake

yjmwxwx 发表于 2019-12-11 08:27:00

比如我采样率1M,M=2就是20K频率正弦波和余弦波,那个C程序就是计算这个频率的正弦表和余弦表,这个我也是在书上看的,按理说我这个是10K的不知道为啥跑到了20K上面,可能是泄漏,也可能是采样率不准或者正弦波频率不准。



FFT计算旋转因子的是下面这个C程序,n表示采样点数,上面给的那本书里面都有,介绍比较详细,我说的不如书里面详细。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main() {
float pi,sr,si;

int rr,ii, n,i;
n=8;
pi=3.141592;   
        for(i=0;i<n/2;i++){
           sr=cos(2*pi*i/n);
           si=-sin(2*pi*i/n);
        rr=sr*0x8000;
        ii=si*0x8000;
       printf("0x%04X,0x%04X,",rr,ii);
}
        printf("\n");
}


乘0x8000是Q15定点数

maluping 发表于 2019-12-11 09:40:53

看着楼主搭电路的风格,顷刻间觉得您可爱,这技术用到胆机上美美的。相当于独创迷踪拳,可自成一派。
页: 1 2 [3] 4 5 6
查看完整版本: 【参赛】简易电容表