MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 863|回复: 47|关注: 0

[已解决] 解决电压、电流波形基波提取与原波形出现相位偏差的问题

[复制链接]

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
如题所述,本人欲对非正弦波进行基波提取,程序段如下:
  1. x = load('data.dat'); %load 数据
  2. fs=10000; % 采样频率,自己根据实际情况设置
  3. N=length(x); % x 是待分析的数据
  4. n=1:N;
  5. %1-FFT
  6. X=fft(x); % FFT
  7. X=X(1:N/2);
  8. Xabs=abs(X);
  9. Xabs(1) = 0; %直流分量置0
  10. for i= 1 : m
  11. [Amax,index]=max(Xabs);
  12. if(Xabs(index-1) > Xabs(index+1))
  13. a1 = Xabs(index-1) / Xabs(index);
  14. r1 = 1/(1+a1);
  15. k01 = index -1;
  16. else
  17. a1 = Xabs(index) / Xabs(index+1);
  18. r1 = 1/(1+a1);
  19. k01 = index;
  20. end
  21. Fn = (k01+r1-1)*fs/N; %基波频率
  22. An = 2*pi*r1*Xabs(k01)/(N*sin(r1*pi)); %基波幅值
  23. Pn = phase(X(k01))-pi*r1; %基波相角 单位弧度
  24. Pn = mod(Pn(1),pi);
  25. end
复制代码
原数据如附件,第一列时间,第二列电流。提取后频率并非50hz,我直接定义为50hz,幅值和相位带入正弦函数重画的基波波形,如附件图所示。这个相位,我尝试调整,但是无法准确。请问应该如何准确提取无相位差的基波分量。谢谢

原波形和基波(红)

原波形和基波(红)

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
 楼主| 发表于 2017-10-12 14:28:21 | 显示全部楼层
哪朋友和老师可以给点建议啊?谢谢了

论坛优秀回答者

53

主题

1643

帖子

149

最佳答案
  • 关注者: 26
发表于 2017-10-12 21:24:07 | 显示全部楼层
我感觉你做个低通应该就差不多,出个频谱图看看

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
 楼主| 发表于 2017-10-12 22:15:12 | 显示全部楼层
低通滤波的话,不会出现提取的基波相位之后问题吧?

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
 楼主| 发表于 2017-10-12 23:08:26 | 显示全部楼层
因为滤波器过滤后,波形还是有毛刺,对后续计算产生误差。还是得考虑基波分量提取。“倔强”老师,可否指点一二呢。我现在的问题还是提取基波分量出现相位延迟。而且我尝试减掉这个相位偏差,但是后续计算结果误差还是很大。有没有好提取的办法呢?

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
 楼主| 发表于 2017-10-13 16:34:43 | 显示全部楼层
倔强的笨蛋 发表于 2017-10-12 21:24
我感觉你做个低通应该就差不多,出个频谱图看看

您好,我尝试对自定义的50hz交流信号进行追踪(时域变频域,再变时域),发现追踪结果:相位超过源信号,而不是滞后于源信号,这个应该怎么理解呢?一般认为采样分析后的数据应该是滞后于采样数据才对啊。而且相位差值随着采样频率fs和数据点数N的增加,而减小。程序见后。
  1. A2=15;
  2. F2=50;
  3. P2=10;
  4. fs=1000;
  5. N=1000;
  6. t=[0:1/fs:N/fs];
  7. s2=A2*cos(2*F2*pi*t+pi*P2/180);
  8. F=([1:N]-1)*fs/N;
  9. Y=fft(S);
  10. Ayy=abs(Y);
  11. Byy=Ayy/(N/2);
  12. Byy(1)=Byy(1)/N;
  13. stem(F(1:600),Byy(1:600));
  14. s12=Byy(51)*cos(2*pi*50*t+angle(Y(51)));
  15. plot(t,s2,t,s12,'r');grid on
复制代码


红线--追踪;蓝线-源线

红线--追踪;蓝线-源线

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
 楼主| 发表于 2017-10-13 19:28:30 | 显示全部楼层
哪位朋友能过来帮忙看看,为什么提取的基波分量与源信号总会出现相位偏差,最小是在15us。应该怎么计算呢?

论坛优秀回答者

53

主题

1643

帖子

149

最佳答案
  • 关注者: 26
发表于 2017-10-13 21:07:34 | 显示全部楼层 |此回复为最佳答案
mapex 发表于 2017-10-13 16:34
您好,我尝试对自定义的50hz交流信号进行追踪(时域变频域,再变时域),发现追踪结果:相位超过源信号, ...

t=[0:1/fs:N/fs];改成t=[0:1/fs:(N-1)/fs];就可以了,你试试;你之前信号有频谱泄露

新手

16 麦片

财富积分


050


15

主题

121

帖子

1

最佳答案
 楼主| 发表于 2017-10-16 14:59:35 | 显示全部楼层
倔强的笨蛋 发表于 2017-10-13 21:07
t=[0:1/fs:N/fs];改成t=[0:1/fs:(N-1)/fs];就可以了,你试试;你之前信号有频谱泄露 ...

"倔强"老师,我还得再问您一下,我从simulink示波器导出的电压或电流波形,采样率比如是1e6,采样的点数与仿真的时间有关系。采样电压信号为一个标准的50hz波形,但fft得到的频率最高点却随着(n-1)*fs/N中,N的不同在变化,而不是准确的50hz,比如N=75000时,最大幅值点为第3.75个点;N=25000时,最大幅值点为1.25个点,这样算下来,频率为49.xxx,应该怎么复原准确的50hz呢。还请您指点。

论坛优秀回答者

53

主题

1643

帖子

149

最佳答案
  • 关注者: 26
发表于 2017-10-16 15:42:33 | 显示全部楼层
mapex 发表于 2017-10-16 14:59
"倔强"老师,我还得再问您一下,我从simulink示波器导出的电压或电流波形,采样率比如是1e6,采样的点数与 ...

只有整周期采样频率等参数才会没有误差,可以了解下频谱校正,可以参考下我的帖子http://www.ilovematlab.cn/thread-309972-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

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