|
楼主 |
发表于 2008-11-24 16:32
|
显示全部楼层
请帮我看一下,我用下面的程序实现一个理想滤波器,但是IFFT后的信号虚部挺大的,取实部跟取绝对值差很多,请帮我指出错在哪里? 谢谢!!
% 对信号sig进行滤波
%fmin为滤波器的下限频率
%fmax为滤波器的上限频率
% fs为信号的采样频率
n=length(sig); %取信号数据长度
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(sig,nfft); %进行FFT变换,结果存于y
a=zeros(1,nfft); %建立一个长度为nfft,元素全为0的向量
a(nmin:nmax)=fftx(nmin:nmax); %将y的正频率带通内的元素赋值给a
a((nfft-nmax+1):(nfft-nmin+1))=fftx((nfft-nmax+1):(nfft-nmin+1)); %将y的负频率带通内的
%元素赋值给a
y1=ifft(a,nfft); %进行FFT逆变换,结果存于y
y1=(real(y1(1:n)))'; % 取逆变换的实部作为滤波后的信号 |
|