[Matlab]双线性变换法设计数字带阻滤波器

测试代码:

%%****bin_bs.m*******************%%
%% 使用双线性变换法设计带阻滤波器
%% 2018年6月13日 16:48:04
%% author:Alimy

close all;
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%代码正文
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%给定数字滤波器指标
f_sl    =   150     ;   %阻带下限频率(Hz)
f_1     =   200     ;   %通带下限频率(Hz)
f_3     =   500     ;   %通带上限频率(Hz)
f_sh    =   600     ;   %阻带上限频率(Hz)
R_p     =   0.5     ;   %通带允许的最大衰减
R_s     =   40      ;   %阻带允许的最小衰减
f_s     =   2000    ;   %采样频率
T_s     =   1 / f_s ;   %采样间隔
%1.将数字带阻滤波器的频率参数变换为归一化的数字角频率参数
omega_sl    =   2 * pi * f_sl   / f_s;    %通带下限频率
omega_1     =   2 * pi * f_1    / f_s;    %阻带下限频率
omgea_3     =   2 * pi * f_3    / f_s;    %阻带上限频率
omega_sh    =   2 * pi * f_sh   / f_s;    %通带上限频率
%2.预畸变处理,将归一化数字角频率参数变换成模拟带阻滤波器的角频率参数
C = 2*f_s ;
Omega_sl    =   C * tan( omega_sl  / 2 );
Omega_1     =   C * tan( omega_1  / 2 );
Omega_3     =   C * tan( omgea_3  / 2 );
Omega_sh    =   C * tan( omega_sh  / 2 );
%3.对模拟带阻滤波器的角频率参数做归一化处理
Omega_BW    =   Omega_3 - Omega_1;
eta_sl      =   Omega_sl / Omega_BW;
eta_1       =   Omega_1  / Omega_BW;
eta_3       =   Omega_3  / Omega_BW;
eta_sh      =   Omega_sh / Omega_BW;
%4.设计归一化模拟滤波器,得到归一化模拟带阻滤波器的转移函数
Omega_p = [ Omega_1  , Omega_3 ];
Omega_s = [ Omega_sl , Omega_sh ];
[ N , Wn ] = buttord( Omega_p , Omega_s , R_p , R_s , ‘s‘ ); %选择模拟巴特沃斯滤波器的最小阶数
[ Bs, As ] = butter(N,Wn,‘stop‘,‘s‘);
%5.利用模拟带阻滤波器的转移函数确定IIR数字滤波器的转移函数
[ bz , az ] = bilinear(Bs,As,f_s);

figure(1);
freqz(bz,az);
title(‘带阻滤波器幅度谱和相位谱特性‘);
%滤波效果测试
N = 1000;
t = [ 0 : N - 1 ] * T_s ;
f1 = 50;
f2 = 300;
f3 = 400;
x1 = 2*1*sin( 2 * pi * f1 * t );
x2 = 2*2*sin( 2 * pi * f2 * t );
x3 = 2*1*sin( 2 * pi * f3 * t );
x  = x1 + x2 + x3;

fft_x = fft( x );
X_mag = fftshift( abs   ( fft_x ) ) / N ;
X_ang = fftshift( angle ( fft_x ) );
delta_f = f_s/N;
f = ( -N / 2 : N / 2 - 1 )*delta_f;

figure(2);
subplot(3,1,1);
plot(t,x);
title(‘原信号时域波形‘);
xlabel(‘t(s)‘);
subplot(3,1,2);
plot( f , X_mag );
title(‘原信号幅度谱‘);
xlabel(‘f(hz)‘);
subplot(3,1,3);
plot( f , X_ang );
title(‘原信号相位谱‘);
xlabel(‘f(hz)‘);

%滤波
lp_x = filter( bz , az , x );
lp_fft_x = fft( lp_x );
lp_X_mag = fftshift( abs   ( lp_fft_x ) ) / N ;
lp_X_ang = fftshift( angle ( lp_fft_x ) );
figure(3);
subplot(3,1,1);
plot(t,lp_x);
title(‘滤波后信号时域波形‘);
xlabel(‘t(s)‘);
subplot(3,1,2);
plot( f , lp_X_mag );
title(‘滤波后信号幅度谱‘);
xlabel(‘f(hz)‘);
subplot(3,1,3);
plot( f , lp_X_ang );
title(‘滤波后信号相位谱‘);
xlabel(‘f(hz)‘);

  

 效果:

滤波器特性:

待滤波的信号:

滤波后的信号:

原文地址:https://www.cnblogs.com/alimy/p/9178901.html

时间: 2024-10-16 15:59:31

[Matlab]双线性变换法设计数字带阻滤波器的相关文章

[Matlab]双线性变换法设计数字高通滤波器

测试代码: %%****bin_hp.m*******************%% %% 使用双线性变换法设计高通滤波器 %% 2018年6月13日 14:27:37 %% author:Alimy close all; clear; clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %代码正文 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %给定数字滤波器指标 f_p = 200 ; %阻带上截止频率 f_st = 210

[Matlab]双线性变换法设计数字带通滤波器

测试代码: %%****bin_bp.m*******************%% %% 使用双线性变换法设计带通滤波器 %% 2018年6月13日 16:30:34 %% author:Alimy close all; clear; clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %代码正文 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %给定数字滤波器指标 f_sl = 150 ; %阻带下限频率(Hz) f_1 = 2

转载--关于FPGA设计数字信号处理电路的心得

FPGA使用的越来越广泛,除了可用于设计控制电路以为,数字信号处理电路更是FPGA的强项和难点.个人可以说才刚刚入门FPGA设计,也做过一些数字信号处理方面的电路设计,记录下个人心得体会. (一)善用MATLAB来为设计做充分的准备和验证. 在学习EDA课程的时候,我们往往都是按照要求,直接打开QuartusII,噼里啪啦开始疯狂敲代码,然后仿真--不对--再改再仿真--还不对--再改直到仿真结果正确为止.不错,这的确是人们先入为主的一种方法.但这只是我们学习HDL语言,学习使用开发工具时候比较

deep learning 利用MATLAB制作GUI的数字识别可视化界面

在前面几节讲过一些简单的深度神经网络分类器,由于CNNs(卷积神经网络)程序出来的识别率有一些问题需要,所以暂时还没有更新这一部分.这节我想介绍下利用MATLAB的GUI设计一个图形化界面的NMIST识别系统.界面其实很简单,如下所示: 下面我就将一步一步介绍如何做这个界面. 第一步:打开MATLAB→File→New→GUI,然后就会出现如下图示. 然后点击Blank GUI(Default),这是就创建了一个空白的untitled.fig,你可以把它保存在你想存的目录下面. 第二步:这是就需

等价类划分法设计测试用例

序内部结构,设计测试用例的唯一依据是软件需求规格说明书. 等价类 所谓等价类,是输入条件的一个子集合,该输入集合中的数据对于揭示程序中的错误是等价的.等价类又分为有效等价类和无效等价类.有效等价类代表对程序有效的输入,而无效等价类则是其他任何可能的输入(即不正确的输入值).有效等价类和无效等价类都是使用等价类划分法设计用例时所必须的,因为被测程序若是正确的,就应该既能接受有效的输入,也能接受无效输入的考验. 划分等价类的标准: 1.完备测试.避免冗余; 2.划分等价类重要的是:集合的划分,划分为

【转帖】MATLAB中用FDATool设计滤波器及使用

MATLAB中用FDATool设计滤波器及使用 该文章讲述了MATLAB中用FDATool设计滤波器及使用. 1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool.具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool. 2. 在fdatool工具中应该注意的几个问题:(a)Fstop(阻带截止频率)不能大于或等于采样频率Fs/2,这是由于数字滤波器设计的方式决定的.(b)将设计好的滤波器

《Invert》开发日志01:核心玩法设计

前面提过,这个游戏的核心玩法基于我做的第一个Unity游戏,名字就叫<Invert>,现在在应用宝上面还能搜到.不过那个游戏也不是我原创的,它的玩法设计来自github上的一个开源项目(https://github.com/gorried/inverter),那时候我正在上培训班,它本来是我的一个课下练习.当时主要是为了熟悉游戏从制作到发布的流程,所以几乎完全模仿了原项目的设计,连方块的配色都没改(因为我觉得那配色挺好看的,还特意用Photoshop取了人家的色值). 但是现在回过头来看,这种

基本路径法设计测试用例

基本路径法是白盒测试中使用最为广泛的方法.以下将介绍一下基本路径法如何使用. 基本路径法设计测试用例的步骤基本如下 1.由程序的源代码作为基础导出控制流图 2.计算控制流图的环路复杂度 3.确定基本路径 4.根据基本路径设计测试用例 接下来我举个例子 1 Int IsLeap(int year) 2 { 3 if (year % 4 == 0) 4 { 5 if (year % 100 == 0) 6 { 7 if ( year % 400 == 0) 8 leap = 1; 9 else 10

【tool】运用因果图法设计象棋中马行走路线的测试用例

因果图法设计用例 需求规格: 1.如果落点在棋盘外,则不移动棋子; 2.如果落点与起点不构成日字型,则不移动棋子; 3.如果落点处有自己方棋子,则不移动棋子; 4.如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子; 5.如果不属于1-4条,且落点处无棋子,则移动棋子; 6.如果不属于1-4条,且落点处为对方棋子(非老将),则移动棋子并除去对方棋子; 7.如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束. 一.原因条件: 1. 落点在棋盘上; 2. 落点与起点构