songzy41 发表于 2008-7-8 14:56

本帖最后由 VibInfo 于 2016-11-7 14:56 编辑

原帖由 zhly 于 2008-7-7 17:59 发表
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1); %将y负频率阻带内的元素值置为0
程序中这句怎么实现的“将y负频率阻带内的元素值置为0”?我运行程序后还是不太理解。
应把程序中以下4语句一起理解:
y=fft(x,nfft);
a=zeros(1,nfft);
a(nmin:nmax)=y(nmin:nmax);      %将y正频率阻带内的元素值置为0
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1); %将y负频率阻带内的元素值置为0
笫1句是把信号x做FFT,变换成y
笫2句是另设置一个谱函数a,它的正负频率部分都为0,即是一个全0数列
笫3句是把正频率部分中需要的部分赋于a,正频率部分中,需要部以外都为0
笫4句是把负频率部分中需要的部分赋于a,负频率部分中,需要部以外都为0

zhly 发表于 2008-7-8 20:55

多谢楼上的详细解释。
上面的四句中,前三句能理解,只是第四句中元素下标(nfft-nmax+1:nfft-nmin+1)对应
((32768-1000+1):(32768-0+1)),我不明白这个下标对应的频率范围为什么是需要的负频率部分?

zhly 发表于 2008-7-8 21:17

将plot(ff,20*log10(abs(X(1:N/2+1)*2/N))); 这句改用
semilogx(ff,(abs(X(1:N/2+1)*2/N)).^2);得到的图形相差很大,
用semilogx()画图与将待画图量取10*log10()有何区别?
还有我在自己的程序中试用loglog(f,px)与plot(10*log10(f),10*log10(f))两种方法画图,得到的图形也不一致,这是怎么回事?原以为是一样的。

zhly 发表于 2008-7-8 21:18

补充一下,我在17楼写错了

(nfft-nmax+1:nfft-nmin+1)对应
((32768-6555+1):(32768-1+1))

songzy41 发表于 2008-7-9 09:58

本帖最后由 VibInfo 于 2016-11-7 14:56 编辑

原帖由 zhly 于 2008-7-8 20:55 发表
多谢楼上的详细解释。
上面的四句中,前三句能理解,只是第四句中元素下标(nfft-nmax+1:nfft-nmin+1)对应
((32768-1000+1):(32768-0+1)),我不明白这个下标对应的频率范围为什么是需要的负频率部分?
补充一下,我在17楼写错了(nfft-nmax+1:nfft-nmin+1)对应
((32768-6555+1):(32768-1+1))

我细看了一下,以下这求负频部分的语句有错
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1);
应改为
a(nfft-nmax+2:nfft-nmin+2)=y(nfft-nmax+2:nfft-nmin+2);
而且在上式计算中nmin不能等于1(fmin不能为0)。

zhly 发表于 2008-7-9 10:31

本帖最后由 VibInfo 于 2016-11-7 14:56 编辑

原帖由 songzy41 于 2008-7-9 09:58 发表

我细看了一下,以下这求负频部分的语句有错
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1);
应改为
a(nfft-nmax+2:nfft-nmin+2)=y(nfft-nmax+2:nfft-nmin+2);
而且在上式计算中nmin不能等于1(fmi ...
还是理解不了,如果fmin不能等于零,这跟初始设置和程序运行的nmin=1也矛盾了。

这种滤波方法是否可取?

songzy41 发表于 2008-7-9 14:40

本帖最后由 VibInfo 于 2016-11-7 14:56 编辑

原帖由 zhly 于 2008-7-9 10:31 发表


还是理解不了,如果fmin不能等于零,这跟初始设置和程序运行的nmin=1也矛盾了。

这种滤波方法是否可取?
1,先来说明一下关系式:a(nfft-nmax+2:nfft-nmin+2)=y(nfft-nmax+2:nfft-nmin+2);
nfft=32768太大了,用nfft=16来说明。有频率域数据y(1)~y(16),在其中y(1)是直流分量,y(9)是代表fs/2的谱线。互为共轭对称的谱线之间关系是:
y(2)~y(16);   y(3)~y(15);   y(4)~y(14);   y(5)~y(13);   y(6)~y(12);   y(7)~y(11);   y(8)~y(10)
在~符号的左边的那条谱线代表的是正频率部分,而在~符号的右边的那条谱线代表的是负频率部分。这可以看到,在已知某一条谱线为n,则用y(nff-n+1)得不到该n谱线对应的的负频率谱线,而要用y(nff-n+2)才能得到。所以说a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1);有错误。
2,对于nmin=1,相当于是y(1),即是直流分量的那条谱线(它是实数),但于y(1)的那条谱线,不存在与它对应的负频率的共轭谱线。所以若nmin=1,就不能参与计算相应负频率的运算。在正频率部分已设置了:
a(nmin:nmax)=y(nmin:nmax);
在负频率部分应加上条件语句:
if nmin==1
a(nfft-nmax+2:nfft)=y(nfft-nmax+2:nfft);
else
a(nfft-nmax+2:nfft-nmin+2)=y(nfft-nmax+2:nfft-nmin+2);
end

zhly 发表于 2008-7-9 15:37

现在明白了,非常感谢songzy41!
按您的假设理解,若nfft=16,
1,如果nmin=1,nmax=7,
则a(11:16)=y(11:16);%这里把需要的负频率部分赋给了a。y(11:16)是y(2:7)对应的负频率部分,y(2)~y(16);   y(7)~y(11);
2,如果nmin=3,nmax=6,
则a(12:15)=y(12:15);%y(12:15)是y(3:6)对应的负频率部分,y(3)~y(15);   y(6)~y(12);

桌子不会哭 发表于 2012-6-6 12:12

我是一个新手,最近也在自学滤波的相关内容,有没有哪位大神能够给我说下这个滤波程序的原理哈!!!感激不尽!!!!!!{:{19}:}
页: 1 [2]
查看完整版本: 大家看看我的滤波程序哪里有问题