声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

楼主: songzy41

[其他] [原创]exzfft_m

[复制链接]
发表于 2008-1-5 10:38 | 显示全部楼层

麻烦问一下宋老师

我把程序中的采样频率加大一倍成400,怎么未细化的频率变大呢?本人基础太差,看了半天也没找到原因。
我用幅值调制仿真信号x=3*(1+cos(2*pi*1*t)).*sin(2*pi*15*t+pi/6)+1*rand(1,N)做出的效果也不错,就是不能动采样频率200,把采样频率改成400后,这次细化的频率变小了,未细化的没动!实在想不通了。请问哪里改动一下就能通用呢。先谢了:lol

采样频率400时的仿真图

采样频率400时的仿真图
回复 支持 反对
分享到:

使用道具 举报

 楼主| 发表于 2008-1-5 17:25 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 11:17 编辑
原帖由 zhuzhusissi 于 2008-1-5 10:38 发表
我把程序中的采样频率加大一倍成400,怎么未细化的频率变大呢?本人基础太差,看了半天也没找到原因。
我用幅值调制仿真信号x=3*(1+cos(2*pi*1*t)).*sin(2*pi*15*t+pi/6)+1*rand(1,N)做出的效果也不错,就是不 ...

我对test_exzfftm并没有作太大的改动,仅设置了zhuzhusissi 的信号,得到的结果与zhuzhusissi 完全不同(见图)。附上了程序,请比较一下。
zhu2a.jpg

zhu2.m

1.04 KB, 下载次数: 42

发表于 2008-1-6 09:53 | 显示全部楼层

谢谢送老师

发现错误了 最大细化截至频率我自己设为25了 而没有用公式fa=fi+0.5*sf/np 这个为什么不能自己设置呢?

您的源程序中   % 把信号按nfft长作FFT计算
                     y1=fft(x, nfft) * 2/nfft;

如果改成 y1=fft(x, nt) * 2/nt;得到的效果和细化是一样的(如附件)这就是和大版主yangzj说的一样了 FFT和ZFFT只是运算速度上有差别吧(忘了哪张帖子了) 那ZFFT在实际的振动信号处理中具体有什么应用呢?我们的传感器一组2048个信号 那我把n组信号并到一起做FFT效果的效果也很好吧?!这就试试...

再次感谢:@)

直接做10240点的FFT

直接做10240点的FFT
 楼主| 发表于 2008-1-6 11:06 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 11:15 编辑
原帖由 zhuzhusissi 于 2008-1-6 09:53 发表
发现错误了 最大细化截至频率我自己设为25了 而没有用公式fa=fi+0.5*sf/np 这个为什么不能自己设置呢?

要知道最大细化截至频率fa是怎么来的,信号原采样频率是sf,经下采样后,采样频率下降到sf/np,能分析出的最高频率是采样频率的1/2,即0.5*sf/np 。在ZFFT中把fi移到0频率,那能分析出的最高频率便是fi+0.5*sf/np ,即是fa的表达式。因此要修改fa就可按采样定理来修改。


原帖由 zhuzhusissi 于 2008-1-6 09:53 发表
如果改成 y1=fft(x, nt) * 2/nt;得到的效果和细化是一样的(如附件)这就是和大版主yangzj说的一样了 FFT和ZFFT只是运算速度上有差别吧(忘了哪张帖子了)
那ZFFT在实际的振动信号处理中具体有什么应用呢?

楼主的说法是对的,楼主指的帖子是:http://www.chinavib.com/forum/thread-55503-1-5.html。但要历史地看问题。ZFFT是在70年代提出的,当时RAM是按K为单位,一台计算机有16K或32K内存已是很好了。CPU的运算速度又十分慢。在这种情况下使用ZFFT,对于提高分辨率是十分有意义的。从现在来看,当然没有太大的必要了,只是一种方法而已。
发表于 2008-1-6 15:12 | 显示全部楼层

再次感谢

宋老师回复的快 而且讲解清楚 这下算是进一步理解了细化 继续学习...
发表于 2009-3-6 10:55 | 显示全部楼层
程序里有两段不明白。
1、y1=fft(x, nfft) * 2/nfft;
为什么要乘以2再除以nfft?
2、排列数据时:
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);
y2是一个全零序列。为什么老师在上面解释的是:对应的是y2的那一部分?还有做重采样后点数小于nfft,补零做了nfft点的FFT。然后为什么要重排呢?是不是因为要和原来的直接做的结果对比?
还有一个问题,好像decimate函数有两个参数的时候,只做了重采样,没有滤波吧?

[ 本帖最后由 ruben052013 于 2009-3-6 12:06 编辑 ]
 楼主| 发表于 2009-3-7 08:52 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 11:15 编辑
原帖由 ruben052013 于 2009-3-6 10:55 发表
程序里有两段不明白。
1、y1=fft(x, nfft) * 2/nfft;
为什么要乘以2再除以nfft?
2、排列数据时:
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);
y2是一个全零序列。为什么老师在上面解释的是:对应的是y2的那一部分?还有做重采样后点数小于nfft,补零做了nfft点的FFT。然后为什么要重排呢?是不是因为要和原来的直接做的结果对比?
还有一个问题,好像decimate函数有两个参数的时候,只做了重采样,没有滤波吧?

1,是为了求出窄带信号的幅值;
2,是为了和原来的直接结果做对比;
3,decimate函数有两个参数的时候,重采样前先滤波:
DECIMATE Resample data at a lower rate after lowpass filtering.
    Y = DECIMATE(X,R) resamples the sequence in vector X at 1/R times the
    original sample rate.  The resulting resampled vector Y is R times
    shorter, i.e., LENGTH(Y) = CEIL(LENGTH(X)/R). By default, DECIMATE
    filters the data with an 8th order Chebyshev Type I lowpass filter with
    cutoff frequency .8*(Fs/2)/R, before resampling.
发表于 2009-3-8 11:43 | 显示全部楼层

回复 22楼 songzy41 的帖子

fft的结果是复数,求幅值应该是求模才对啊?
不好意思,decimate函数是我看错了!
还有一个问题请教老师,看了大家以前的讨论。让我觉得复调制zoomfft的有效性很值得商榷,无论怎样,在滤波的过程中,运算量都不会比直接对这个序列做FFT的运算量小。
  滤波,在时域是卷积,但是大家都知道,快速卷积肯定比时域卷积效率高,运算量小。而快速卷积第一步就是对序列做FFT。而且点数要比原序列点数大。这样做完FFT,分辨率就已经能达到zoomfft后的结果了!那滤波结束就已经完成提高分辨率的任务了!这点很疑惑。
 楼主| 发表于 2009-3-8 16:39 | 显示全部楼层
本帖最后由 wdhd 于 2016-6-3 11:15 编辑
原帖由 ruben052013 于 2009-3-8 11:43 发表
还有一个问题请教老师,看了大家以前的讨论。让我觉得复调制zoomfft的有效性很值得商榷,无论怎样,在滤波的过程中,运算量都不会比直接对这个序列做FFT的运算量小。
  滤波,在时域是卷积,但是大家都知道,快速卷积肯定比时域卷积效率高,运算量小。而快速卷积第一步就是对序列做FFT。而且点数要比原序列点数大。这样做完FFT,分辨率就已经能达到zoomfft后的结果了!那滤波结束就已经完成提高分辨率的任务了!这点很疑惑。

现在来说,ZFFT实际上只是一个方法而已,正如LZ说到的原因目前很少使用到了。但ZFFT是在上世纪70年代中发展起来的,当时还没有RAM(Random Access Memory),存储器是磁芯穿起来的,CPU的运算速度相当慢(和现在相比),所以该方法在当时可减小存储空间,减少运算量( 滤波用IIR滤波器)。
发表于 2009-9-28 10:37 | 显示全部楼层
程序运行时出现提示:
??? Input argument 'x' is undefined.

Error in ==> C:\MATLAB6p5p1\work\exzfft_m.m
On line 8  ==> nt=length(x);
我就是想输入的信号是个正弦先好  比如x=cos(2*pi*f1*t+50)+cos(2*pi*f2*t)+cos(2*pi*f3*t+125);
应该怎么把这个信号加入到程序中?  谢谢
发表于 2009-10-27 00:11 | 显示全部楼层

回复 楼主 songzy41 的帖子

请问楼主,为什么画出来的图前几点没有了呢?怎么补上呢?谢谢!~
发表于 2011-3-4 16:28 | 显示全部楼层
回复 1 # songzy41 的帖子

na在程序中好像没用到吧?~
发表于 2011-3-6 17:49 | 显示全部楼层
顶一顶,正在学习中
发表于 2011-8-17 16:11 | 显示全部楼层
这个程序和王济老师书上的几乎没啥区别。只是函数里将原来的带通滤波变成了下采样。而且对于采样频率高(比如我们用的16000hz的采样信号)的信号,几乎起不到细化的作用。相反他会使频率幅值显著下降,从而失真。我想频率细化只能用于较低的采样频率信号。请大家指教。
发表于 2011-8-17 16:12 | 显示全部楼层
这个程序和王济老师书上的几乎没啥区别。只是函数里将原来的带通滤波变成了下采样。而且对于采样频率高(比如我们用的16000hz的采样信号)的信号,几乎起不到细化的作用。相反他会使频率幅值显著下降,从而失真。我想频率细化只能用于较低的采样频率信号。请大家指教。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 07:59 , Processed in 0.073095 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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