Aprilgogo 发表于 2007-1-18 20:55

多级复解析滤波器问题

如果信号经过了一级复解析滤波器,然后降采样,此时信号已经变为实部+虚部了,如何再通过第二级复解析滤波器呢?是不是只把实部取出来然后与复解析滤波器相卷积就行了呢?谢谢!

yangzj 发表于 2007-1-19 08:52

不是的,得用滤波后的复信号与滤波器做卷积

Aprilgogo 发表于 2007-1-20 17:57

谢谢!

像matlab中的filter函数都是用的fft做的滤波,在这种情况下,会导致谱分析的精度降低。

也就是说,如果要利用降采样进行高精度谱分析,就不能用filter函数进行滤波,而需要将信号与滤波器一个一个地卷积对不对?

yangzj 发表于 2007-1-20 18:37

matlab中的filter也是在时域对数据进行滤波的吧

Aprilgogo 发表于 2007-1-20 18:48

原帖由 yangzj 于 2007-1-20 18:37 发表
matlab中的filter也是在时域对数据进行滤波的吧

刚刚又详细看了一下帮助,确实是在时域进行滤波的。

我做的程序有一些频率混叠,原以为是filter函数的问题。现在看来是其它问题了。按理说将信号经过Hilbert变换后再进行谱分析可以将image频谱去除,发生频率混叠的概率要小得多。难道是带通滤波器没做好?

再问一句:将信号直接通过复解析带通滤波器的效果,和将信号进行Hilbert变换后通过普通滤波器的效果是不是一样的?谢谢!

yangzj 发表于 2007-1-20 19:33

原帖由 Aprilgogo 于 2007-1-20 18:48 发表


刚刚又详细看了一下帮助,确实是在时域进行滤波的。

我做的程序有一些频率混叠,原以为是filter函数的问题。现在看来是其它问题了。按理说将信号经过Hilbert变换后再进行谱分析可以将image频谱去除,发 ...

原信号与该信号的Hilbert变换对相加就成为了一个解析信号,也就是说没有了负频率成分,这个相加信号再进行普通的滤波, 和把这个信号直接进行得解析带通滤波效果是一样的

Aprilgogo 发表于 2007-1-20 19:45

原帖由 yangzj 于 2007-1-20 19:33 发表


原信号与该信号的Hilbert变换对相加就成为了一个解析信号,也就是说没有了负频率成分,这个相加信号再进行普通的滤波, 和把这个信号直接进行得解析带通滤波效果是一样的

没有了负频率成分,这也就是可以将复解析滤波器的带通带宽扩展一倍的原因吧?

如果经过ZoomFFT分析后感兴趣的频率两边的分辨精度很低,且产生频率混叠现象,是不是因为带通滤波器的过渡带宽太大了呢?比如说,信号是200Hz的,虽然经过ZFFT可以显示出200Hz的频率分量,但200Hz两边的原本为0的频率已经混叠了。我写的ZFFT程序就出现了这样的问题。能帮助分析下原因吗?谢谢!

yangzj 发表于 2007-1-20 19:59

没太明白你的意思,最好帖上图来

你是说200两边还会出现一些其它频率折叠回来的?
如果你用文中的第一、三种方法的话那是肯定出现这种情况的,这时候要根据你的滤波器过渡带宽来舍弃两边的谱线。
那篇文章里对滤波器的设计写的很详细的

Aprilgogo 发表于 2007-1-20 20:19

原帖由 yangzj 于 2007-1-20 19:59 发表
没太明白你的意思,最好帖上图来

你是说200两边还会出现一些其它频率折叠回来的?
如果你用文中的第一、三种方法的话那是肯定出现这种情况的,这时候要根据你的滤波器过渡带宽来舍弃两边的谱线。
那篇文章里 ...

嗯,把图贴上来了。第一幅图是我的程序生成的,第二幅图是用你的程序生成的。

信号是2000Hz和2002Hz的。我说的部分是图中红线画的2000和2002Hz旁边本不该出现的频谱泄露现象。使用你写的程序分析的结果,就没有那些泄露。

丁老师的文章我一直在看,因为基础比较差,还没有完全理解。我现在写的程序只是使用一些matlab函数,大致将文章中的思想描述了出来,还没有做到你那样大部分都使用自己的代码,而不是调用matlab中的函数。首先遇到的问题就是图中的频谱泄露了:-(肯定是自己程序中出现了一些问题,或者是没有深刻理解原文的意思。

再次谢谢你的帮助!

yangzj 发表于 2007-1-20 20:31

频谱泄露是由于没整周期采样引起的,或者说实际频率没有与所求的离散频率对上引起的。
你这里的两个峰值是不是并不刚刚好是2000和2002?
如果不是的话,我想你的程序并没有多少问题?
你把你设置的参数列出来看看

Aprilgogo 发表于 2007-1-20 21:06



fs = 8000;
fc = 2000;
N = 2^15;
t = 0 : 1/fs : (N - 1) / fs;
x = sin(2 * pi * f * t) + sin( 2 * pi * (f + 2) * t);
D = 100;
Nfft = 2^13;
= zfft_hilbert(X,fc,fs,Nfft,D);
% x:进行ZOOM FFT分析的数字信号
% fc: 为进行ZOOM FFT分析的中心频率
% fs: 信号的采样频率
% Nfft: FFT点数
% D: 放大倍数



zfft_hilbert的流程为:

对信号x进行Hilbert变换->通过以(f1,f2)频率(fc为中心频率)的带通滤波器->以D重采样->移频-f1->做Nfft点fft->调整频率对应关系。

Aprilgogo 发表于 2007-1-20 21:09

原帖由 yangzj 于 2007-1-20 20:31 发表
频谱泄露是由于没整周期采样引起的,或者说实际频率没有与所求的离散频率对上引起的。
你这里的两个峰值是不是并不刚刚好是2000和2002?
如果不是的话,我想你的程序并没有多少问题?
你把你设置的参数列出来看看

我觉得即使频率并不刚好是2000和2002,也不会出现如此大的频率泄露。毕竟频率分辨率已经很高了。

现在正捧着奥本海姆的离散时间信号处理找原因哪:loveliness:

yangzj 发表于 2007-1-20 21:28

原帖由 Aprilgogo 于 2007-1-20 21:09 发表


我觉得即使频率并不刚好是2000和2002,也不会出现如此大的频率泄露。毕竟频率分辨率已经很高了。

现在正捧着奥本海姆的离散时间信号处理找原因哪:loveliness:


频率分辨率再高都改善不了频谱泄露的

yangzj 发表于 2007-1-20 21:33

原帖由 Aprilgogo 于 2007-1-20 21:06 发表


fs = 8000;
fc = 2000;
N = 2^15;
t = 0 : 1/fs : (N - 1) / fs;
x = sin(2 * pi * f * t) + sin( 2 * pi * (f + 2) * t);
D = 100;
Nfft = 2^13;
= zfft_hilbert(X,fc,fs,Nfft,D);
% x:进行ZOOM ...

为什么你的D*NFFT>N?

Aprilgogo 发表于 2007-1-20 21:44

原帖由 yangzj 于 2007-1-20 21:33 发表


为什么你的D*NFFT>N?

我是这样想的:

N/D为降采样后的点数,fft分析的点数应该大于信号的点数,Nfft>N/D便是对降采样后的点数进行Nfft点fft分析了。

不过改为D*NFFT<N后似乎频谱泄露少了点:@o
页: [1] 2
查看完整版本: 多级复解析滤波器问题