当前位置:首页>开发>正文

求一个matlab程序设计,双线性变换法的低通滤波器的设计 matlab一维离散的数据序列如何进行低通滤波

2023-07-30 07:56:22 互联网 未知 开发

 求一个matlab程序设计,双线性变换法的低通滤波器的设计 matlab一维离散的数据序列如何进行低通滤波

求一个matlab程序设计,双线性变换法的低通滤波器的设计

fs=1000    %采样频率 1KHz
fp=100     %通带截止频率 
fst=300    %阻带截止频率 
%归一化频率
wp=2*pi*fp/fs
ws=2*pi*fst/fs

Rp=3       %通带最大衰减系数 
Rs=20      %阻带最大衰减系数 
Ts=1/fs    %采样周期 
m=256      %采样点数 
Wp=2/Ts*tan(wp/2)  %模拟通带截止频率 
Ws=2/Ts*tan(ws/2)  %模拟阻带截止频率 

[N,Wn]=buttord(Wp,Ws,Rp,Rs,s)  %选择模拟巴特沃斯低通滤波器的最小阶数 
[z,p,k]=buttap(N)          %创建巴特沃斯模拟低通滤波器 
[Bp,Ap]=zp2tf(z,p,k)       %由零点、极点、增益确定传输函数的分子与分母的系数 
[b,a]=lp2lp(Bp,Ap,Wn)      %模拟低通滤波器到模拟低通滤波器的转换 

%用双线性变换法得到数字低通滤波器系数
[bz,az]=bilinear(b,a,fs)   
figure(1) 
freqz(bz,az,m)       %数字滤波器复频响应

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

楼主你好
滤波要先设计滤波器,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)%巴特沃斯数字滤波器最小阶数选择函数
[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,set(H(2),linewidth,2)

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

可以使用fft函数。
希望对你有帮助,

随便看看