大家看看我的滤波程序哪里有问题
我自己写的一个滤波程序,大家看看顺便帮我解决个问题,程序如下:%频域低通和带通滤波
clc;clear
load 123 %加载原始信号
x=sig;
fs=1/200E-6;
fmin= 0; %最小截止频率,为0时是低通,不为0时是带通
fmax=1000; %最高截止频率
n=length(x);
t=(0:1/fs:(n-1)/fs)';
nfft=2^nextpow2(n); %取大于并接近n的2的幂次方为FFT长度
nmin=round(fmin*nfft/fs+1); %四舍五入取整求最小截止频率对应数组元素的下标
nmax=round(fmax*nfft/fs+1); %四舍五入取整求最大截止频率对应数组元素的下标
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
y=ifft(a,nfft);
y=(real(y(1:n)))';%取变换实部n个结果为滤波列向量
subplot (2 ,1 ,1)
plot(t,x);
title('滤波前的信号');
grid on
subplot(2,1,2)
plot(t,y);
title('滤波后的信号');
grid on
%滤波后FFT
x=y;
N=length(y);
X=fft(y);
nn=1:N;
ff=(0:N/2)/N*fs;
figure;
plot(ff,20*log10(abs(X(1:N/2+1)*2/N)));
grid on;
问题见下楼。
[ 本帖最后由 16443 于 2007-7-30 00:14 编辑 ] 我把一个实测信号滤波后,滤除1000Hz以上的频率,但是FFt后1000Hz以上的频率还存在,看看是我的程序有问题,还是我吧频域滤波给理解错了。 各大版主都哪里去了,帮忙看看啊:@Q
[ 本帖最后由 zhlong 于 2007-7-30 10:37 编辑 ]
回复 #3 16443 的帖子
有个zhang版主,啃英语书呢。现在放假期间人少,你别太着急啊 和原信号相比谱图相比,消噪的效果已经体现出来了回复 #5 zhlong 的帖子
楼主的意思是1000之后能不能都消失,这样消噪才撤底啊 我也看了一下,同意zhlong的意见,程序并没有错误,与原始信号相比在1000Hz以上已滤波了,只是滤波得不理想。其原因是楼主在频域选用了矩形窗作滤波器,这显然不是一种很好的滤波方法。回复 #7 songzy41 的帖子
那么选用什么窗能有好的效果那,我想要使1000Hz以上的频率最好都滤掉。这样的图形就显示的比较明显了 其它设计滤波器的方法很多,有FIR、IIR、还有其它的。但从楼主的原始信号谱图中(#5)可看到,在1000Hz以上的频段信号的幅值已比最高值小了80dB,对于大部分的滤波器阻带也只是衰减到60-80dB,要选择衰减更大的,系数个数要更多,在计算精度上也要求更高,可能难于达到。
回复 #9 songzy41 的帖子
那我不需要1000Hz以上的成分,只需1000分析1000以下的成分,因为1000以上的对我这个结构没有工程实际意义,该怎么做?回复 #10 16443 的帖子
不可能完全去除1000HZ以上的频率成分吧,按你的程序-80db已是你信号直流分量幅值的1/10000了,应该影响很小了。[ 本帖最后由 zhlong 于 2007-7-31 10:26 编辑 ]
回复 #11 zhlong 的帖子
你能用HHT帮我把这个信号给分析一下吗我想看看时间与频率。频率与幅值有个怎样的关系 、 你这个信号又是和你以前发的那个帖子一样的问题,低频是主要分量。
回复 #13 zhlong 的帖子
和以前那个是一个模型的,这个是实测的,我以前发的是模拟求得的信号。你就帮我分析一下吧,我不会用HHT,我想看个结果
请教楼主一个问题
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1); %将y负频率阻带内的元素值置为0程序中这句怎么实现的“将y负频率阻带内的元素值置为0”?我运行程序后还是不太理解。
页:
[1]
2