仪器社区

matlab一维离散的数据序列如何进行低通滤波?

芮拥泰 2017-05-16
有一个离散的一维数据序列X,想要进行低通滤波,是不是要用 y = filter(B, A, X)?那么其中B和A两个参数是如何确定的呢? 如何确定该列数据频域范围,用FFT吗? 频谱图是用abs(fft(X))进行绘制吗?怎么判断频谱图中哪部分是噪声呢?
评论
全部评论
love_xue_58
楼主你好
滤波要先设计滤波器,b,a代表滤波器设计的参数。一般可以使用巴特沃斯滤波器。

例如低通滤波器的设计代码为:
data = importdata('t2.txt');
Time = data(:,1);

SA = data(:,2);
dtt=diff(Time);
dt=sum(dtt)/length(dtt);
Fs=round(1/dt);%采样频率
Wp = 5/(Fs/2); %通带截止频率,这个自定大致定义
Ws = 10/(Fs/2);%阻带截止频率,这个自定大致定义
Rp = 2; %通带内的衰减不超过Rp,这个自定大致定义
Rs = 40;%阻带内的衰减不小于Rs,这个自定大致定义
[n,Wn] = buttord(Wp,Ws,Rp,Rs);%巴特沃斯数字滤波器Z小阶数选择函数
[b,a] = butter(n,Wn);%巴特沃斯数字滤波器

[h,w]=freqz(b,a,512,Fs); %计算滤波器的频率响应
plot(w,abs(h))%,'LineWidth',1绘制滤波器的幅频响应图
%**************************************************************************

%对输入的信号进行滤波
RollAf=filtfilt(b,a,RollA);%filtfilt这个函数是0相位滤波,没有偏移。filter有偏移。

**************************************************************************
%% 滤波结果绘图

figure

subplot(2,2,1)
H=plot(Time,RollA,Time,RollAf,'r--');%,'linewidth',3
set(H(2),'linewidth',2)

其中;Wp,Ws是一元向量时,则设计的是低通或高通滤波器,若Wp,Ws是二元向量,则设计带通或带阻滤波器。

可以使用fft函数。
希望对你有帮助,
15 0 2017-05-16 0条评论 回复
您可能感兴趣的社区主题
加载中...
发布 评论