witty01 发表于 2007-11-21 15:46

[求助]zfft变换的纵坐标

本帖最后由 wdhd 于 2016-9-8 14:04 编辑

  我现在对一组数据进行zfft变换,但是细化后该频率出的信号幅值比从前小了,
  我找了好长时间没发现错在哪,我用了从songzy41的帖子里面下载的zfft和exzfft程序(地址:http://forum.vibunion.com/forum/thread-29289-1-1.html)


  这个是用zfft_m.m进行细化得到的结果,绿色的部分是想要的,但是幅值这么小

  这个是用exzfft_m.m得到的
  我想得到的只是细化的结果,幅值应该是不变的啊,不知道错在哪了,高手们帮我改改,谢啦:lol
  附上要用的程序和数据。

witty01 发表于 2007-11-21 15:50

由于数据太大了,只好保留用的一部分,并且分成了两部分,扩展名要改成rar

bluefox 发表于 2007-11-21 16:06

首先,ZFFT不能算是一种变换,只是一种算法。
没细看你的数据。
宋老师的程序我以前测试过,这个程序的目的是演示ZFFT算法流程,作为工程应用,这个程序还缺少环节。
细化是有条件的。
不是说随便选个细化倍数,随便选个采样频率和处理点数都能得到理想结果的。滤波器的过渡带以及窗函数影响非常大,足可以让你的细化结果面目全非。通常细化处理大多要经过谱校正,否则结果几乎毫无价值。
另外,有一个原因你也必须考虑:在没有细化的时候,分辨率不够,导致相邻谱峰迭加在一起,当然会看起来幅值比较大。当细化之后,谱峰分离,细微谱线“分担”了原来叠在一起的谱峰的能量,当然看起来幅值会变小。
提个小建议,你想验证细化的结果,可以这样办:
假设你原来用512个点得到一个原始频谱,在此基础上你想细化10倍,那么,做细化谱之前你不是至少要采5120个点么?用这5120个点直接作FFT。用5120点FFT与你的10倍ZFFT结果相比较,细化的效果如何不就一目了然了么?在这个基础上再寻找细化误差的原因,有的放矢!

[ 本帖最后由 bluefox 于 2007-11-21 17:01 编辑 ]

witty01 发表于 2007-11-22 08:53

回复 #3 bluefox 的帖子

谢谢,我试试

songzy41 发表于 2007-11-22 09:34

我还是不明白楼主的意图。但我想先说明一下,ZFFT主要用于稳态过程,又用于2条谱线靠得很近,用FFT分辨不出,那时用ZFFT就能分辨出来,就如:http://forum.vibunion.com/forum/thread-29289-1-1.html上给的例子那样。
1,楼主的信号很明显是一个非稳态的过程,好象半个梯形,所以不知楼主想分析什么?[在8000点(左右)之前是一个上升过程,之后是一个指数衰减的过程(不知是什么信号)。]
2,如果用相对平稳的过程进行分析(取8000点之后),得到如同楼主笫1张图那样,并没有靠得很近的谱线,为什么要用ZFFT?
3,即使用了ZFFT,例如在ZFFT之前取4096个点,要做ZFFT时取了40960个点(设取np=10),因为信号在8000点之后的信号是指数衰减的,在做ZFFT中经滤波、下采样后得4096点,但能量已比ZFFT之前的4096个点的能量要小,计算出的幅值当然也小了。
此外楼主给的exzfft_test和zfft_test好象都不全,笫1句便是subplot(211)??

witty01 发表于 2007-11-22 10:43

回复 #5 songzy41 的帖子

1、我这个是稳态的过程,是电机系统的速度信号,因为附件不能大于200k,所以只上传了用到的一部分,包括速度的上升,和到达2000转之后稳定运行的过程,看上去是像梯形,电机运行在2000转时,说是稳定运行的,但是还是在一定范围内有波动的,所以在8000点那里表现出先上升在衰减的过程,是指数衰减吗,我不知道。
2、我想用fft分析速度信号频率成分,然后陷波滤波,所以我需要精确的知道干扰频率最大一点的频率值,所以我设想先用fft大致的分析一下,然后找出干扰频率最大的信号所在的范围,用zoomfft,得到精确的频率值,现在也只是在设想,不知道这种想法可行不?
3、因为这个信号只是一个波动的过程,不是衰减,所以应该可以用zfft吧。

ps:这里面的信号是从smulink里面保存的,在这直接用了,所以在程序中直接就画了图

witty01 发表于 2007-11-22 11:24

根据bulefox的建议试了一下, 结果如图,

但是我发现一个问题,因为在我的test程序里面只引用了256个数据,所以再用zfft_m.m计算时,如果采用频率放大N杯,那么下采样之后的数据就变成原来数据长度的1/N了,所以在上图的第二部分中绿色曲线和蓝色并没有完全重合。

根据大家所说的,如果zfft之前的数据是256,那么zfft时数据的长度是256*放大倍数,所以我把程序改成下面这个样子:
x=aa(15001:156.25:55000);    %数据长度256
fs=3200;   %采样频率
N=256;   
y1=fft(x,N);
n=0:N/2-1;
df=fs/N;
f=n*df;
y=abs(y1)/N*2;
y(1)=y(1)/2;
subplot(211)
plot(f,y(1:N/2));
title('fft()函数的响应 fs=3200');
xlabel('frequence/Hz')
ylabel('幅值')
grid on
axis()
hold on
%% zfft部分小范围的细化
=max(y(2:N/2));
fz=f(b+1);%细化的中心频率
np=8;   % 放大倍数 细化倍数越大,幅值衰减越大
nfft=N;   % FFT长度
fmin=fz-0.25* fs/np;% 最小细化截止频率
fmax=fmin+0.5*fs/np;   % B=fs/np
                   % 最大细化截止频率%保证中心频率在fz
% 计算zfft
x=aa(15001:156.25:335000);% 重新选取一段数据数据长度是 256*8
x=x';
=zfft_m(x,fmin,fs,nfft,np);
y2=zeros(1, nfft/2);
y2(1: nfft/4) =a(nfft-nfft/4+1 : nfft);
y2(nfft/4+1 : nfft/2) =a(1: nfft/4);
n=0: (nfft/2-1);%只取一半的fft结果,
% 定义细化后的频率向量横坐标
f2=fmin+n*2*(fmax-fmin)/nfft;%从fmin起到fmax结束取了nfft/2个点,采样间隔是2点
                        %zfft的运算结果只是一段,而不是显示全部频率信号
                        %这一段是从fmin起到fmax结束的nfft个点
plot(f2, abs(y2),'g');
%% fft N*8 个数据
x=aa(15001:156.25:335000); %要进行变换的信号
fs=3200;   %采样频率
N=N*np;   
y1=fft(x,N);   %x的长度是2048,N=2048
n=0:N/2-1;
df=fs/N;
f=n*df;
y=abs(y1)/length(x)*2;
y(1)=y(1)/2;
subplot(212)
plot(f,y(1:N/2));
title('fft()函数的响应 fs=3200');
xlabel('frequence/Hz')
ylabel('幅值')
grid on
axis()
hold on
plot(f2, abs(y2),'g');

如红字部分,重新给x赋一个长度为2048的数据,然后进行zfft,这个对我来说是必须的。
上面一段程序的结果如图:

这个说明了什么,说明zfft的结果是对的,是吗,
但是,为什么上半部分的图里面475Hz处的频率会有那种情况呢?

witty01 发表于 2007-11-22 11:34

另外我在800Hz处也用了zfft算法
结果如图:

800Hz处也减小了,但是比400多那个好很多,这是为什么?

[ 本帖最后由 witty01 于 2007-11-22 12:06 编辑 ]

songzy41 发表于 2007-11-22 17:05

原帖由 witty01 于 2007-11-22 11:24 发表
这个说明了什么,说明zfft的结果是对的,是吗,
但是,为什么上半部分的图里面475Hz处的频率会有那种情况呢?

上半部的图中ZFFT不能相符很好,而在下半部图中能相符合,说明原256个样点在475Hz有较大的平均能量,而在2048个样点时475Hz的平均能量就较小。我做了一个计算,把2048个样点在375-575Hz之间带通滤波,其结果在下图,红色是2048点的x信号,黑色是滤波后的信号。上半图是取前256个样点,很明显可看到平均能量比较大。
原帖由 witty01
于 2007-11-22 11:34 发表

800Hz处也减小了,但是比400多那个好很多,这是为什么?
在800Hz处比较接近,这只说明800Hz随时间能量没有这么大的变化。
(传错了一张图,在编辑中没看到可删除图的,请版主把awt2d.jpg删除,谢谢)

[ 本帖最后由 yangzj 于 2007-11-22 17:25 编辑 ]

songzy41 发表于 2007-11-22 20:02

对800Hz附近的信号也进行了滤波(取700-900Hz),得下图,可看到能量分布相对均匀一点。

witty01 发表于 2007-11-23 10:34

非常感谢宋老师,麻烦您了:lol

这部分的知识我学要恶补一下了,有什么书可以推荐一下吗

另外,想问一下 这两个频率 475Hz 和800Hz哪一个可能会引起系统的机械共振呢?
页: [1]
查看完整版本: [求助]zfft变换的纵坐标