matlab通过切比雪夫实现低通、高通、带通和带阻的设计

椭圆滤波器
设计一个带通椭圆数字滤波器 , 通带为 100 ~200 H z,过渡带均为 50 H z,通带波纹小于 3 db ,阻带衰减为 30 db ,采样频率 f s =1 000 H z 。

fs = 1000;
Rp = 3;Rs = 30;
Wp = 2*[100 200]/fs; % 0-1之间
Ws = 2*[80 220]/fs;  % 0-1之间
[n,Wn] = ellipord(Wp,Ws,Rp,Rs); % 确定滤波器的最小阶数n和归一化的低通滤波器截止频率
[b,a] = ellip(n,Rp,Rs,Wn);

巴特沃斯滤波器

fs = 1000; % 信号的采样频率
wp = [8 30]*2/fs; % 通带边界频率 rad/s
ws = [7 32]*2/fs; % 阻带边界频率 rad/s
Rp = 1;% 通带最大波纹 db
Rs = 30;% 阻带最小衰减 db
[N , Wn] = buttord(wp,ws,Rp,Rs); % 阶数和归一化频率Wn
[B , A] = butter(N,Wn);% 得到n阶巴特沃斯滤波器的分子分母

切比雪夫Ⅰ型滤波器的设计

clear;
close all;
clc;
fs = 1000; %Hz 采样频率
Ts = 1/fs;
N  = 1000; %序列长度
t = (0:N-1)*Ts;
delta_f = 1*fs/N;
f1 = 50;
f2 = 100;
f3 = 200;
f4 = 400;
x1 = 2*0.5*sin(2*pi*f1*t);
x2 = 2*0.5*sin(2*pi*f2*t);
x3 = 2*0.5*sin(2*pi*f3*t);
x4 = 2*0.5*sin(2*pi*f4*t);
x = x1 + x2 + x3 + x4; %待处理信号由四个分量组成

X = fftshift(abs(fft(x)))/N;
X_angle = fftshift(angle(fft(x)));
f = (-N/2:N/2-1)*delta_f; % 将频率点进行等分处理,好观察堆成的频率

figure(1);
subplot(3,1,1);
plot(t,x);
title('原信号');
subplot(3,1,2);
plot(f,X);  % 注意这里面要是f的开头为横坐标
grid on;
title('原信号频谱幅度特性');
subplot(3,1,3);
plot(f,X_angle);
title('原信号频谱相位特性');
grid on;

 
%设计一个切比雪夫低通滤波器,要求把50Hz的频率分量保留,其他分量滤掉
wp = 55/(fs/2);  %通带截止频率,50~100中间的值,并对其归一化
ws = 90/(fs/2);  %阻带截止频率,50~100中间的值,并对其归一化
alpha_p = 3; %通带允许最大衰减为 db
alpha_s = 40;%阻带允许最小衰减为 db
%获取阶数和截止频率
[ N1 wc1 ] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[ b a ] = cheby1(N1,alpha_p,wc1,'low');
%滤波
filter_lp_s = filter(b,a,x);
X_lp_s = fftshift(abs(fft(filter_lp_s)))/N;
X_lp_s_angle = fftshift(angle(fft(filter_lp_s)));
figure(2);
freqz(b,a); % 滤波器频谱特性,调用默认区间 0:pi
figure(3);
subplot(3,1,1);
plot(t,filter_lp_s);
grid on;
title('低通滤波后时域图形');
subplot(3,1,2);
plot(f,X_lp_s);
title('低通滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_lp_s_angle);
title('低通滤波后频域相位特性');
% 
% 
%设计一个高通滤波器,要求把400Hz的频率分量保留,其他分量滤掉
wp = 350/(fs/2);  %通带截止频率,200~400中间的值,并对其归一化
ws = 380/(fs/2);  %阻带截止频率,200~400中间的值,并对其归一化
alpha_p = 3; %通带允许最大衰减为  db
alpha_s = 20;%阻带允许最小衰减为  db
% 获取阶数和截止频率
[ N2 wc2 ] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[ b a ] = cheby1(N2,alpha_p,wc2,'high');
%滤波
filter_hp_s = filter(b,a,x);
X_hp_s = fftshift(abs(fft(filter_hp_s)))/N;
X_hp_s_angle = fftshift(angle(fft(filter_hp_s)));
figure(4);
freqz(b,a); %滤波器频谱特性
figure(5);
subplot(3,1,1);
plot(t,filter_hp_s);
grid on;
title('高通滤波后时域图形');
subplot(3,1,2);
plot(f,X_hp_s);
title('高通滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_hp_s_angle);
title('高通滤波后频域相位特性');
 
%  
%设计一个带通滤波器,要求把50Hz和400Hz的频率分量滤掉,其他分量保留
wp = [65 385 ] / (fs/2);  %通带截止频率,50~100200~400中间各取一个值,并对其归一化
ws = [75 375 ] / (fs/2);  %阻带截止频率,50~100200~400中间各取一个值,并对其归一化
alpha_p = 3; %通带允许最大衰减为  db
alpha_s = 20;%阻带允许最小衰减为  db
%获取阶数和截止频率
[ N3 wn ] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[ b a ] = cheby1(N3,alpha_p,wn,'bandpass');
%滤波
filter_bp_s = filter(b,a,x);
X_bp_s = fftshift(abs(fft(filter_bp_s)))/N;
X_bp_s_angle = fftshift(angle(fft(filter_bp_s)));
figure(6)
freqz(b,a); %滤波器频谱特性
figure(7);
subplot(3,1,1);
plot(t,filter_bp_s);
grid on;
title('带通滤波后时域图形');
subplot(3,1,2);
plot(f,X_bp_s);
title('带通滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_bp_s_angle);
title('带通滤波后频域相位特性');
%  
%设计一个带阻滤波器,要求把50Hz和400Hz的频率分量保留,其他分量滤掉
wp = [65 385 ] / (fs/2);  %通带截止频率?,50~100200~400中间各取一个值,并对其归一化
ws = [75 375 ] / (fs/2);  %阻带截止频率?,50~100200~400中间各取一个值,并对其归一
alpha_p = 3; %通带允许最大衰减为  db
alpha_s = 20;%阻带允许最小衰减为  db
%获取阶数和截止频率
[ N4 wn ] = cheb1ord( wp , ws , alpha_p , alpha_s);
%获得转移函数系数
[ b a ] = cheby1(N4,alpha_p,wn,'stop');
%滤波
filter_bs_s = filter(b,a,x);
X_bs_s = fftshift(abs(fft(filter_bs_s)))/N;
X_bs_s_angle = fftshift(angle(fft(filter_bs_s)));
figure(8);
freqz(b,a); %滤波器频谱特性
figure(9);
subplot(3,1,1);
plot(t,filter_bs_s);
grid on;
title('带阻滤波后时域图形');
subplot(3,1,2);
plot(f,X_bs_s);
title('带阻滤波后频域幅度特性');
subplot(3,1,3);
plot(f,X_bs_s_angle);
title('带阻滤波后频域相位特性');

原始信号波形
在这里插入图片描述
低通滤波
在这里插入图片描述高通滤波
在这里插入图片描述带通滤波
在这里插入图片描述带阻滤波
在这里插入图片描述
转载:https://blog.csdn.net/cqfdcw/article/details/84939698?utm_source=app

附:求幅频特性曲线和相频特性曲线代码

B=[1 -0.5];
A =[1];
[H,w]=freqz(B,A,[0:2*pi/400:2*pi]);
Hf=abs(H);  %取幅度值实部
Hx=angle(H);  %取相位值对应相位角
clf;
figure(1);
plot(w,20*log(Hf));  %幅值变换为分贝单位
title('离散系统幅频特性曲线');
figure(2);
plot(w,Hx);
title('离散系统相频特性曲线');

% 或者直接通过下面的代码也是可以得出来的
% B=[1 -0.5];
% A =[1];
% figure;
% freqz(B,A,[0:2*pi/400:2*pi]);

在这里插入图片描述

  • 7
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、设计一个工作采样频率 80 kHz 的巴特沃斯低通数字滤波器要求通带 边界频率为 4 kHz通带最大衰减为 0.5 dB,边界频率为 20 kHz最 小衰减为 45 dB。调用 Matlab 工具性函数 buttord 和 butter 设计,显示该数字 滤波器系统函数 H(z)的系数,并绘制所设计滤波器的单位脉冲响应、损耗函 数曲线和相频特性曲线。 2、设计一个工作采样频率 5 kHz 的椭圆帯数字滤波器要求通带边界 频率为 500 Hz 和 2125 Hz,通带最大衰减为 1 dB,边界频率为 1050 Hz 和 1400 Hz,最小衰减为 40 dB。调用 Matlab 工具箱函数 ellipord 和 ellip 设计数字滤波器,显示该滤波器系统函数 H(z)的系数,并绘制该滤波器的单 位脉冲响应、损耗函数曲线和相频特性曲线。 3、调用 Matlab 工具箱函数 remezord 和 remez 设计线性相位高通 FIR 滤波 器,实现对模拟信号的采样序列 x(n)的数字高通滤波处理。设计指标要求:采 样频率为 16kHz通带截止频率为 5.5 kHz通带最小衰减为 1 dB;过渡宽度 小于或等于 3.5 kHz最小衰减为 75 dB。列出 h(n)的序列数据,画出损耗 函数曲线,并检验设计结果。 4、调用 Matlab 工具箱函数 fir1 设计线性相位带通 FIR 滤波器要求通带 截止频率为0.55 rad和0.7 rad,截止频率为0.45 rad和0.8 rad, 通带最大衰减为 0.15 dB,最小衰减为 40 dB。显示所设计滤波器单位脉 冲响应 h(n)的数据,并画出损耗函数曲线。
IIR DF是一种数字滤波器实现方式,DF全称为“Direct Form”,即直接形式。IIR DF滤波器与FIR DF滤波器不同,IIR DF滤波器是一种非线性相位滤波器,具有比FIR DF滤波器更高的滤波器阶数和更窄的过渡等优点。其基本原理是将输入信号x[n]和输出信号y[n]分别通过一组系数a[k]和b[k]进行加权求和,得到输出信号y[n]。IIR DF的数学模为: y[n] = b0*x[n] + b1*x[n-1] + ... + bN*x[n-N] - a1*y[n-1] - ... - aM*y[n-M] 其中,b0、b1、...、bN是IIR DF滤波器的前向系数,a1、...、aM是IIR DF滤波器的反馈系数,x[n]是输入信号,y[n]是输出信号。 在MATLAB中,可以使用iirfilter函数来设计IIR DF滤波器。该函数的语法格式为: [b, a] = iirfilter(N, Wn, 'ftype', 'designmethod') 其中,N是滤波器的阶数,Wn是滤波器的截止频率,'ftype'是滤波器,常用的滤波器有'low'(低通滤波器)、'high'(高通滤波器)、'bandpass'(带通滤波器)、'bandstop'(滤波器)等,'designmethod'是设计方法,常用的设计方法有'butter'(巴特沃斯滤波器)、'cheby1'(比雪夫滤波器)等。函数iirfilter返回IIR DF滤波器的前向系数b和反馈系数a。 例如,设计一个10阶低通Butterworth滤波器,截止频率为0.2,可以使用如下代码: ``` N = 10; Wn = 0.2; [b, a] = iirfilter(N, Wn, 'low', 'butter'); ``` 设计完成后,可以使用filter函数将IIR DF滤波器应用于输入信号,得到输出信号。filter函数的语法格式为: y = filter(b, a, x) 其中,b是IIR DF滤波器的前向系数,a是IIR DF滤波器的反馈系数,x是输入信号,y是输出信号。 例如,将上述设计的10阶低通Butterworth滤波器应用于一个随机信号x,可以使用如下代码: ``` x = randn(1, 1000); y = filter(b, a, x); ``` 上述代码将生成一个长度为1000的随机信号x,并将其通过IIR DF滤波器进行滤波,得到输出信号y。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值