[Matlab]椭圆滤波器设计:低通高通带通和带阻
Posted alimy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Matlab]椭圆滤波器设计:低通高通带通和带阻相关的知识,希望对你有一定的参考价值。
椭圆滤波器(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; %通带允许最大衰减为 db alpha_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; %通带允许最大衰减为 db alpha_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; %通带允许最大衰减为 db alpha_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; %通带允许最大衰减为 db alpha_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(‘带阻滤波后频域相位特性‘);
效果:
原始信号:
生成的低通滤波器和滤波后的效果:
生成的高通滤波器和滤波后的效果:
生成的带通滤波器和滤波后的效果:
生成的带阻滤波器和滤波后的效果:
以上是关于[Matlab]椭圆滤波器设计:低通高通带通和带阻的主要内容,如果未能解决你的问题,请参考以下文章
DSP教程第36章 FIR滤波器的Matlab设计(含低通,高通,带通和带阻)
滤波器设计基于matlab微波带低通高通带通滤波器设计含Matlab源码 2217期
信号处理基于 FIR与IIR滤波器低通高通带通设计matlab源码含GUI