求助!如何提高FFT变换的精度及提高分辨率!
现在有谐波要分析H=220cos(2*pi*50*t+pi*60/180)+220cos(2*pi*50.1*t+pi*60.1/180);要是想把频率差0.1的频率分开,除了控制采样点采样频率来控制分辨率,还有什么方法好?希望各位大神帮忙! 本帖最后由 hcharlie 于 2012-4-26 15:00 编辑
回复 1 # wangheqi 的帖子
如果分辨率取0.1Hz,采集长度应该是10秒,这样关注500线,501线,则总有效线数至少512,采样点1024点,则采样频率102.4Hz;如果取102.4Hz采样2048点也可以,则频率分辨率0.05Hz,取第1000,1002线为50和50.1Hz。
如果我们取采样频率204.8Hz,则10秒为2048点,FFT以后500,501线数据为50,50.1Hz。
。。。。。以此类推。
fft变换幅值问题!频率幅值对不上啊!求助!!!!
想对信号周波取一个周期进行fft变换,但是时间不太会找,弄完了之后幅值和频率对不上啊!请教各位大神,如何能在取一个周期的前提下把50和50.1赫兹的幅值显示出来。最好在画一下相位图!clc;
close all;
clear;
A1=220; %频率F1信号的扰动幅度
A2=219; %频率F2信号的扰动幅度
F1=50; %信号1频率(Hz)
F2=50; %信号2频率(Hz)
Fs=256; %采样频率(Hz)
P1=45; %信号1相位(度)
P2=45.001; %信号2相位(度)
N=256; %采样点数
n=;
t=/Fs; %采样时刻
H=A1*sqrt(2)*cos(2*pi*F1*t)+A1*sqrt(2)*cos(2*pi*50.1*t+pi*P1/180);
H1=A2*sqrt(2)*cos(2*pi*F2*t+pi*60.1/180)+A1*sqrt(2)*cos(2*pi*50.2*t+pi*P1/180);
figure(1)
%显示原始信号
subplot(321);plot(t,H);
title('标准信号');
subplot(322);plot(t,H1);
title('被测信号');
Y = fft(H,N); %做FFT变换
Y1=fft(H1,N);
fuzhi = (abs(Y)); %取模
fuzhi1=(abs(Y1));
fuzhi=fuzhi/(N/2); %换算成实际的幅度
F=(-1)*Fs/N; %换算成实际的频率值,Fn=(n-1)*Fs/Nf=fs*(0:length(Y)/2)/length(Y);
subplot(325);
stem(F(1:N/2),fuzhi(1:N/2)); %显示换算后的FFT模值结果
title('幅度-频率曲线图');
fuzhi1=fuzhi1/(N/2); %换算成实际的幅度
F=(-1)*Fs/N; %换算成实际的频率值,Fn=(n-1)*Fs/N
subplot(326);
stem(F(1:N/2),fuzhi1(1:N/2)); %显示换算后的FFT模值结果
title('幅度-频率曲线图');
本帖最后由 hcharlie 于 2012-4-27 16:38 编辑
用采集50Hz一个周期想要分辨出50.1Hz的幅值,异想天开!
甚至还要相位!
理由何在?做FFT是有条件的。FFT源于有限域的离散DFT,而又源于取无穷长的周期函数中的一段,而其余的数据全是这一段的无限重复,这样做的值才有精确的意义。所以一段数据做DFT(FFT)意味着它的前后还有无穷长的数据,都是由这一段数据重复而得,你的这一段有限数据显然不符合这个条件,无限重复以后形成不了你的函数,一定要做FFT,也就得不到你设想的结果。结论:一定要有足够的长度,而且有周期性才行。我说过,要采集50Hz的至少500个周期,相当于50.1的501个周期才能分出它们的幅值。
至于相位,两个不同频率的东西,他们之间的相位是什么意思?
你反复做此事是什么用意? 本帖最后由 hcharlie 于 2012-4-29 08:42 编辑
回复 3 # wangheqi 的帖子
主任说的非常正确,好多学生只会做FFT,却不知符不符合条件。
主任说的是一般情况,我分析一下你的具体情况。
你的函数是两个频率很接近等幅的正弦波之和,你如果画全500个周期(10秒)的曲线,它将是一个50Hz调幅波,它的振幅从最大2倍单频振幅,逐渐减小到0,再慢慢增长回到2倍振幅,如此循环,而循环周期就是10秒。所以你只取一个周期,也可能取在最大处,也可能接近0,也可能是在中间值,决定于初始相位。
所以主任肯定你做不成,是有理论根据的 本帖最后由 hcharlie 于 2012-4-29 08:44 编辑
回复 4 # hcharlie 的帖子
我现在的想要的是对俩路频率很接近的信号进行fft变换然后比较幅值和相位!至于这个我是刚刚接触,了解的还不是很深!那能麻烦你根据我这个目的提供一下编程思路吗?多谢了! 回复 6 # wangheqi 的帖子
已经回答过你的问题了,见2楼
不明白为什么要做此事,目的意图是什么?
即使用数字模拟可以通过,在实际测量中有各种各样的误差,就不一定能通过了。 回复 7 # hcharlie 的帖子
谢谢主任这么耐心!我是研究互感器的校验仪,校验的时候需要对比差和角差进行比较,也就是一个信号的幅值和相位。而需要比较的信号中就是以50HZ为工频,有0.2HZ以内上下浮动的谐波,现在我的任务就是要对俩路信号进行fft变换然后比较。我现在困惑的就是fft变换后相位图好乱,而加窗倒是会使其整齐一些!但是在相应的频率处会有扰动,不知道怎么弄掉!我是刚刚学这部分,有些理论确实不懂,问的可能有点白痴。拜托主任给看下啦! 本帖最后由 hcharlie 于 2012-4-29 18:36 编辑
回复 8 # wangheqi 的帖子
你好像是将一个标准信号去加一个被测信号,然后用FFT求出这两个信号和的幅值和相位,我认为思路不大对,就像我所分析的,做不出结果来。
我觉得应该走以下的思路:
1)直接对比对被测信号与标准信号,分别做它们比如10个整周期的FFT,比较主频的幅值和相位(相移),邻近频率泄漏与主频的幅值比(频移);
2)求被测信号与标准信号之差进行FFT分析;
3)求被测信号与标准信号之互谱,互相关;
4)求信号差与标准信号之互谱,互相关;
我只是提供思路,它们之间有没有关系,什么关系要你自己推导,试验清楚的。 回复 9 # hcharlie 的帖子
主任可以看一下我的程序,上面的,就是按您说的方法一来做的!先取时间段,在fft变换,之后就遇到了我开始发帖子的哪些问题。加窗了会紧挨着主频俩端产生俩小的,而相应这俩小幅值的相位则是变了180度。而如果不加窗则是相位很乱。就是因为这个原因我才不停地想办法去解决!不过查了好多地方都是有问题没有解决办法。因为接触的时间不长,所以有些地方还是理解的不深。主任见笑了! 本帖最后由 hcharlie 于 2012-4-30 15:34 编辑
回复 10 # wangheqi 的帖子
1)不同频率的两个振动(50和50.1)之间是不能比较相位的,只能同一频率才能比较相位
2)将频移和相移问题分开处理
3)用整数周期算。你的问题绝不能加窗,加窗引起的误差大于你要测的误差
4)你没有按我9楼第1条做,比如用5120Hz采集1024点分别做两个FFT来比较(先做同频有相差的,再做异频无相差和有相差的。)
220*cos(2*pi*50*t+pi*60/180) 和 220*cos(2*pi*50*t+pi*60.1/180) 比较
220*cos(2*pi*50*t+pi*60/180) 和 220*cos(2*pi*50.1*t+pi*60/180) 比较
220*cos(2*pi*50*t+pi*60/180) 和 220*cos(2*pi*50.1*t+pi*60.1/180) 比较
令 dt=1/5120;N=1024;
回复 10 # wangheqi 的帖子
我对互感器不是太懂,但它会有频移有点想不通。
是不是它会忽高忽低的有点频率漂移,但平均频率我想是不可能变化的。 回复 12 # hcharlie 的帖子
频率的变化是在电网中电能质量不会那么稳定,会有一定的误差!就是围绕工频50HZ处进行正负0.2赫兹以内的抖动。48.8-50.2。所以要是校验正在电网中使用的互感器,就得把这个误差因素考虑进去。 回复 13 # wangheqi 的帖子
记得论坛里有采用离散频谱校正、全相位的方法来做电能质量检测的文章。 回复 11 # hcharlie 的帖子
谢谢您的建议!这几天我看了看论坛前面的帖子,明白了您说的相位不能比较。我这个程序就已经是用整数周期来进行分析了!最开始我用的是12800点,采样频率也是12800Hz,也就是去一秒钟,五十个周期来进行分析。而且这样做已经是50Hz有幅值,和相应频率对应相应的相位。只是我们这的一个博士说如果相位是常数的话相位图应该是一条斜线上去的。这个我就不太明白了,因为我找不出问题所在啊!在这里还想麻烦你给看下,这个是什么理论啊?如果我加窗的话可能有斜线,不加窗就是乱七八糟的相位图。再次麻烦主任了!
页:
[1]
2