博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Matlab]椭圆滤波器设计:低通、高通、带通和带阻
阅读量:5323 次
发布时间:2019-06-14

本文共 3449 字,大约阅读时间需要 11 分钟。

椭圆滤波器(Elliptic filter)又称考尔滤波器(Cauer filter):

       这是在通带和阻带等波纹的一种滤波器。

        椭圆滤波器相比其他类型的滤波器,在阶数相同的条件下有着最小的通带和阻带波动。

        它在通带和阻带的波动相同,这一点区别于在通带和阻带都平坦的巴特沃斯滤波器,以及通带平坦、阻带等波纹或是阻带平坦、通带等波纹的切比雪夫滤波器。

 

测试代码:

%  EllipticFilter.m%  椭圆滤波器的设计%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);grid on;title('原信号频谱幅度特性');subplot(3,1,3);plot(f,X_angle);title('原信号频谱相位特性');grid on;%设计一个切比雪夫低通滤波器,要求把50Hz的频率分量保留,其他分量滤掉wp = 55/(fs/2);  %通带截止频率,取50~100中间的值,并对其归一化ws = 60/(fs/2);  %阻带截止频率,取50~100中间的值,并对其归一化alpha_p = 3; %通带允许最大衰减为 dbalpha_s = 40;%阻带允许最小衰减为 db%获取阶数和截止频率[ N1 wc1 ] = ellipord( wp , ws , alpha_p , alpha_s);%获得转移函数系数[ b a ] = ellip(N1,alpha_p,alpha_s,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); %滤波器频谱特性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; %通带允许最大衰减为  dbalpha_s = 40;%阻带允许最小衰减为  db%获取阶数和截止频率[ N2 wc2 ] = ellipord( wp , ws , alpha_p , alpha_s);%获得转移函数系数[ b a ] = ellip(N2,alpha_p,alpha_s,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~100、200~400中间各取一个值,并对其归一化ws = [75 375 ] / (fs/2);  %阻带截止频率,50~100、200~400中间各取一个值,并对其归一化alpha_p = 3; %通带允许最大衰减为  dbalpha_s = 40;%阻带允许最小衰减为  db%获取阶数和截止频率[ N3 wn ] = ellipord( wp , ws , alpha_p , alpha_s);%获得转移函数系数[ b a ] = ellip(N3,alpha_p,alpha_s,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~100、200~400中间各取一个值,并对其归一化ws = [75 375 ] / (fs/2);  %阻带截止频率?,50~100、200~400中间各取一个值,并对其归一化alpha_p = 3; %通带允许最大衰减为  dbalpha_s = 40;%阻带允许最小衰减为  db%获取阶数和截止频率[ N4 wn ] = ellipord( wp , ws , alpha_p , alpha_s);%获得转移函数系数[ b a ] = ellip(N4,alpha_p,alpha_s,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://www.cnblogs.com/alimy/p/9140984.html

你可能感兴趣的文章
[bzoj4552][Tjoi2016&Heoi2016]排序
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
ES6入门 阮一峰
查看>>
快速理解Docker - 容器级虚拟化解决方案
查看>>
[erlang] mnesia
查看>>
request对象
查看>>
字符串比较
查看>>
epoll 技术(转)
查看>>
<转>Shell脚本相关
查看>>
使用FreeMarker加载远程主机上模板文件,比如FTP,Hadoop等(转载)
查看>>
epoll演示样本
查看>>
Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)
查看>>
java 注解 学习
查看>>
[leetcode]403. Frog Jump青蛙过河
查看>>
匿名内部类--细节
查看>>
但我现在要将其中的“pageEncoding="ISO-8859-1"”默认为“pageEncoding="GBK"”,请问怎么修改MyEclipse?...
查看>>
英语音节知识
查看>>
IEEE 802.15.4协议学习之MAC层
查看>>
AngularJS学习篇(十三)
查看>>
JavaScript Function.apply() 函数详解
查看>>