OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8464|回复: 5

用STM32F407VG的DSP库做全相FFT测相位差问题

[复制链接]

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2019-5-15
在线时间
52 小时
发表于 2020-10-16 11:16:38 | 显示全部楼层 |阅读模式
1金钱


最近做一个项目,需要准确的测量2个正弦信号的相位差,用STM32F407VG的2路ADC做数据采样,利用407的DMA连续对2路ADC轮流采样,采样频率大约500KHZ,采样点数为2048点,信号频率在30K-40KHZ,为了减小频谱泄漏,准备采用全相FFT(APFFT)对采样信号进行处理,每采完4096个点(因为2路ADC轮流)DMA停止采样然后做全相FFT变换,计算两路信号在峰值处的相位,然后将两路相位相减得到相位差,开始在MATLAB上用2个函数模拟是正常的,然后改用实际测到2路ADC的数据加载运算后发现相位差很多次是一样的,但经常随着采样数据的改变而改变,如果你固定2个采样文件,数据肯定是固定的,但当我更换不同次的采样数据时,发现得到的相位差有时是不一样的,以下是我的MATLAB的程序,由于本人之前也没用过MATLAB,很多是参考网上的算法,加上自己学习理解的知识,所以错误在所难免,希望有大神可以指导一下问题出在哪里,或有兴趣的朋友可以一起讨论一下。


%读取外部的TXT文件的数据并做处理
clc;
Fs = 50e3;            % 采样频率               
T = 1/Fs;              % 采样周期(周期=1/频率)
N = 1024;
L = 2048;             % 信号长度,2048

ss1=importdata('sin_adc.txt');
ss2=importdata('sin_adc2.txt');
ss1=ss1(';
ss2=ss2(';
%subplot(2,1,1);
%plot(wave_data);
ss1=ss1*3.3/4096;       %2N个数据
ss2=ss2*3.3/4096;

win=hann(N)';
%plot(win);
%plot(win1);
win2=conv(win,win);            %win和win1的卷积
win2=win2/sum(win2);

s1=ss1(1:2*N-1);    %第1组(2N-1)个数据
y1=s1.*win2;
y1a=y1(N:end)+[0 y1(1:N-1)];
out1=fft(y1a,N);
a1=abs(out1);
[m,p]=max(a1(3:100))
pha1=angle(out1(p+2))*180/pi

%p1=mod(phase(out1),2*pi);

s2=ss2(1:2*N-1);    %第1组(2N-1)个数据
y2=s2.*win2;
y2a=y2(N:end)+[0 y2(1:N-1)];
out2=fft(y2a,N);
a2=abs(out2);
[m1,p1]=max(a2(3:100))
pha2=angle(out2(p1+2))*180/pi
pha2-pha1
%p2=mod(phase(out1),2*pi);

以上算法我也转为C语言测试过,结果是一样的,看看哪位大神能帮忙分析一下,或有兴趣的朋友可以一起讨论一下,在此表示感谢!

sin_ADCData.rar

5.05 KB, 下载次数: 72

最佳答案

查看完整内容[请看2#楼]

已经解决了,谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

25

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
429
金钱
429
注册时间
2019-5-15
在线时间
52 小时
 楼主| 发表于 2020-10-16 11:16:39 | 显示全部楼层
回复

使用道具 举报

22

主题

2251

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4477
金钱
4477
注册时间
2013-4-22
在线时间
336 小时
发表于 2020-10-16 13:31:49 | 显示全部楼层
这个还真不懂,哈哈
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2020-8-17
在线时间
10 小时
发表于 2021-6-3 17:33:07 | 显示全部楼层
大佬,你那个通过计算相位差后面怎么解决的,可以分享下求相位差的部分源码吗,谢谢了,最近一直被这个问题困扰,可以加好友么qq2760203950
回复

使用道具 举报

0

主题

37

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1161
金钱
1161
注册时间
2018-5-24
在线时间
120 小时
发表于 2021-7-1 09:17:06 | 显示全部楼层
无功补偿?
回复

使用道具 举报

0

主题

201

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2552
金钱
2552
注册时间
2019-12-5
在线时间
352 小时
发表于 2022-8-22 15:56:51 | 显示全部楼层
虽然过了这麽久了,还是想问下,如何解决的,能分享一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-8 21:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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