马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
我自己写的一个滤波程序,大家看看顺便帮我解决个问题,程序如下:
%频域低通和带通滤波
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 编辑 ] |