基于MATLAB的高阶带通滤波器的设计与仿真
发布网友
发布时间:2022-04-20 08:14
我来回答
共1个回答
热心网友
时间:2022-07-12 09:05
摘 要
滤波器是一种能使有用信号顺利通过而同时对无用频率信号进行抑制(或衰减)的电子装置。工程上常用它来做信号处理、数据传送和抑制干扰等。传统的数字滤波器的设计过程复杂,计算工作量大,滤波特性调整困难,影响了它的应用。本文所用的设计方法是基于MATLAB的频率抽样设计法,它是用来设计FIR数字滤波器的系统函数,本文中运用最优化设计法对数字滤波器进行设计,用这种方法进行设计,可以使阻带中的误差极小化。通过MATLAB的仿真实验结果令人满意。
关键词:滤波器;频率抽样;最优化设计;
Abstract
Filters can be a useful signal to the smooth passage at the same time inhibiting unwanted frequency signals (or decay) of electronic devices. Engineering used it as signal processing, data transmission and curb disturbances. The traditional digital filter design process is complex, the computation work load is big, the filter characteristic adjustment difficulty, has affected its application.This article uses the design method is based on the MATLAB frequency sampling design law, it is uses for to design the FIR numeral filter the system function, in this article carries on the design using the optimized design law to the digital filter, carries on the design with this method, may cause in the stop-band the erroneous minimizing, the experimental simulation result to be satisfying.
Keywords: Filter;Sampling frequency;The most optimal design;
目 录
摘 要 I
Abstract II
第1章 绪论 1
1.1 课题背景 1
1.2 数字滤波器及传统设计方法 1
第2章 MATLAB简介 3
2.1 MATLAB的概况 3
2.2 本章小结 4
第3章 设计原理 5
3.1 低通滤波器的原理 5
3.2设计要求 5
3.3设计思路 5
3.4本章小结 6
第4章 设计与实现 7
4.1 MATLAB设计程序 7
4.1.1 头文件程序 7
4.1.2 设计主程序 8
4.2 程序运行结果 9
4.3 本章小结 11
结论 12
参考文献 13
致谢 14
第1章 绪论
1.1 课题背景
对输入信号中某特定频率或频带成分具有选择性的网络称之为滤波器。滤波器可广泛应用于通信、自动控制、计算和测量技术等领域。有关滤波器的理论和设计日趋完善。低通滤波器是容许低于截至频率的信号通过, 但高于截止频率的信号不能通过的电子滤波装置。
对于不同滤波器而言,每个频率的信号的减弱程度不同。当使用在音频应用时,它有时被称为高频剪切滤波器, 或高音消除滤波器。
低通滤波器概念有许多不同的形式,其中包括电子线路(如音频设备中使用的hiss 滤波器、平滑数据的数字算法、音障(acoustic barriers)、图像模糊处理等等,这两个工具都通过剔除短期波动、保留长期发展趋势提供了信号的平滑形式。
低通滤波器在信号处理中的作用等同于其它领域如金融领域中移动平均数(moving average)所起的作用;
低通滤波器有很多种,其中,最通用的就是巴特沃斯滤波器和切比雪夫滤波器。 巴特沃斯滤波器是滤波器的一种设计分类,其采用的是巴特沃斯传递函数,有高通、低通、带通、高通、带阻等多种滤波器类型。
巴特沃斯滤波器在通频带内外都有平稳的幅频特性,但有较长的过渡带,在过渡带上很容易造成失真。在电力系统微机保护和二次控制中,很多信号的处理与分析都是基于对正弦基波和某些整次谐波的分析,而系统电压电流信号(尤其是故障瞬变过程)中混有各种复杂成分,所以滤波器一直是电力系统二次装置的关键部件。目前微机保护和二次信号处理软件主要采用数字滤波器。传统的数字滤波器设计使用繁琐的公式计算,改变参数后需要重新计算,在设计滤波器尤其是高阶滤波器时工作量很大。利用MATLAB信号处理工具箱(Signal Processing Toolbox)可以快速有效的实现数字滤波器的设计与仿真。
1.2 数字滤波器及传统设计方法
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。FIR数字滤波器的单位脉冲响应是有限长序列。它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳*近法等。
在对滤波器实际设计时,整个过程的运算量是很大的。。当滤波器阶数比较高时,计算量比较大,设计过程中改变参数或滤波器类型时都要重新计。设计完成后对已设计的滤波器的频率响应要进行校核,要得到幅频相频响应特性,运算量也是很大的。我们平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候都是要根据设计要求和滤波效果不断的调整,以达到设计的最优化。在这种情况下,滤波器的设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间内完成设计。利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效的设计数字滤波器,大大的简化了计算量,直观简便。
第2章 MATLAB简介
2.1 MATLAB的概况
在科学研究和工程应用中,往往要进行大量的数字计算,其中包括矩阵运算。一般来说,这些运算难以用手工精确快捷地进行,而要借助计算机编制相应的程序来做近似计算。用C\BASIC和FORTRRAN语言编制计算程序,既需要队友观算法有深刻得了解,还需要熟练掌握所用语言的语法及编程技巧也是繁杂的,不仅消耗人力与物力,而且影响工作的进程和效率。为了克服上述困难,美国MathWorks公司于1967年推出了Matrix Laboratory(MATLAB)软件包,并不断更新和扩充。目前,MATLAB已经发展到了最新的7.0.1版本(MATLAB Release 14 with Service Pack 1),由MathWorks公司于2004年10月推出。
MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、FORTRAN等语言相同的事情简捷得多.
当前流行的MATLAB 5.3/Simulink 3.0包括拥有数百个内部函数的主包和三十几种工具包(Toolbox)。工具包又可以分为功能性工具包和学科工具包。功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能。学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类。
开放性使MATLAB广受用户欢迎,除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包。
MATLAB的典型应用包括:
(1) 数学计算;
(2) 科学算法开发;
(3) 数据采集及信号处理;
(4) 建模及原型仿真;
(5) 数据分析和数据可视化;
(6) 科学与工程绘图;
(7) 应用程序开发(包括建立图形化用户界面)。
MATLAB的主要功能与特点:
(1)MATLAB语言表达方式与日常习惯使用的数字表达方式几乎相同,是基于向量、数组和矩阵的高级程序设计语言;
(2)提供了几乎涵盖所有科学领域所需的算法程序、库函数和工具包;
(3)具有可视化建模和仿真功能;
(4)具有高质量、高可靠性的数值计算能力;
(5)跨平台兼容,即可以将MATLAB程序转化为其他语言程序,也可以预期他语言程序相连接使用;
(6)具有开放性和可扩充性,即可以方便地与外部设备、文件连接使用。
2.2 本章小结
目前,MATLAB已成为科学工作者、工程实践人员、在校学生进行理论学习、习题演算、算法推导必不可少的软件。本章主要介绍了MATLAB相比较其他工具在设计滤波器时的诸多优势和好处,以及MATLAB的典型应用。在本文中,MATLAB得到了很好的应用。
第3章 设计原理
3.1 低通滤波器的原理
概括来说,低通滤波器就是利用电容同高频阻低频,电感通低频阻高频的原理.
对于需要截止的高频,利用电容吸收电感、阻碍的方法不使它通过,对于需要的低频,利用电容高阻、电感低阻的特点是它通过。
3.2设计要求
理想低通滤波器技术指标为
用频率设计法设计FIR滤波器。
3.3设计思路
通过对离散傅立叶变换的学习,我们知道一个有限长序列可以用N个频域抽样值唯一的确定,即
其中H(k)是h(n)的离散傅立叶变换,是H(z)在单位圆上的均匀抽样值,其列长N,
这为本次设计FIR数字滤波器提供了另一途径,即直接从频域出发,对理想频响进行抽样,使
然后,用离散傅立叶反变换求单位脉冲响应
再用Z变换求系统函数。
则可得设计思路:
若设计一类线性相位数字滤波器,即h(n)为偶对称,N为奇数的情况,有
其中,幅度特性应该具有偶对称性
将频率抽样也用幅值和幅角表示,
则根据约束条件,应满足
用频率抽样法设计的系统函数H(z)对理想系统函数Hd(z)的*近情况。
已知
其中 为内插函数
有内插公式可见,除了每个抽样点上的频响严格与理想特性一致外,抽样点之间的频响则由抽样点的内插函数延伸叠加而成,*近程度取决于频率响应曲线的平滑程度和抽样点的密度。因此,如果抽样点之间的理想特性越平稳,内插函数就越接近理想值。
3.4本章小结
在本文中所用的设计方法是频率抽样设计法,它是用来设计FIR数字滤波器的系统函数,而设计出来的系统函数可以用频率抽样结构方法实现,也可用其他结构实现。
第4章 设计与实现
频率抽样设计法可分为两种方法,第一种是直接运用上文中所述的基本原理,而对*近误差不加*,也就是说,无论设计后的误差有多大,都可以认可,这种方法称为朴素设计法;另一种方法是通过改变过渡带的抽样值,使阻带中的误差极小化,这种方法称为最优设计法。在本文中运用最优设计法对数字滤波器进行设计。
4.1 MATLAB设计程序
4.1.1 头文件程序
1、头文件freqz_m
function[db,mag,pha,grd,w]=freqz_m(b,a)
%z域数字频率响应计算freqz的改进版本
%b直接型滤波器分子系数;a直接型滤波器分母系数
%db为[0:pi]之间的相对振幅;mag为[0 pi]区间的绝对值;pha为[0 pi]区间的相位响应;
%grd为[0 pi]区间的群延迟;w为[0 pi]区间内的501个频率样本数组
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:1:501));'w=(w(1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(b,a,w);
2、头文件hr_type2
function[Hr,w,b,L]=hr_type2(h);
%线性相位滤波器类型2,计算滤波器振幅响应
%Hr振幅响应;w在[0,2pi]之间计算Hr的500个频率点;
%b为2型低通滤波器系数;L为Hr的阶次;h为2型低通滤波器的脉冲响应.
M=length(h);L=M/2;
b=2*[h(L:-1:1)]; %1乘(L+1)行向量
n=[1:1:L];n=n-0.5; %(L+1) 乘1列向量
w=[0:1:500]'*2*pi/500;
Hr=cos(w*n)*b';
4.1.2 设计主程序
%设计条件:wp=0.2pi;ws=0.3pi;Rp=0.25dB;Ar=50dB;
N=60;alpha=(N-1)/2;L=0:N-1;wL=(2*pi/N)*L;
Hrs=[ones(1,7),0.5,0.1,zeros(1,43),0.1,0.5,ones(1,6)]; %理想滤波器振幅响应抽样
Hdr=[1,1,0,0]; wdl=[0,0.2,0.2,1]; %理想滤波器振幅响应
k1=0:floor((N-1)/2); k2=floor((N-1)/2)+1:N-1
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=real(ifft(H,N));
[db,mag,pha,grd,w]=freqz_m(h,1);
[Hr,ww,a,M]=hr_type2(h);
%画图
figure(2)
subplot(2,2,1); plot(wL(1:11)/pi,Hrs(1:11),'o',wdl,Hdr);
axis([0,1,-0.1,1.1]); title('频率样本 N=60')
xlabel('频率(单位:pi)'); ylabel('h(n)');
subplot(2,2,2); stem(L,h); axis([-1,N,-0.1,0.3]);
title('脉冲响应');xlabel('n'); ylabel('h(n)');
m1=[0 0]; m2=[-1 60]; line(m2,m1)
subplot(2,2,3); plot(ww/pi,Hr,wL(1:11)/pi,Hrs(1:11),'o');
axis([0,1,-0.2,1.2]); title('振幅响应')
xlabel('频率(单位:pi)'); ylabel('Hr(w)');
subplot(2,2,4); plot(w/pi,db);
axis([0,1,-60,10]); title('幅度响应')
xlabel('频率(单位:pi)'); ylabel('分贝');
fs=6400000; %采样频率64k
t=0:(1/fs):(0.1-(1/fs)); %时长0.001秒
t_len=size(t,2);
f1=1400;
f2=1600; %双音信号1k和1.6k
f_len=linspace(-fs/2-fs/2/t_len,fs/2-fs/2/t_len,t_len);
figure(1);
a1=1.65;
a3=-0.887;
a5=0.16;
s=(sin(2*pi*f1*t)+sin(2*pi*f2*t));
ss=a1.^s+a3.^s.^s.^s;
fftmov1=20*log10(abs(fft(ss)));
fftmov1=fftshift(fftmov1);
plot(f_len,fftmov1);
ylim([-100 120]);
xlim([0 5000]);
grid on;
xlabel('频率hz');
ylabel('幅度db');
title('输出信号频谱');
4.2 程序运行结果
图4-1 程序运行结果
图4-1.1 程序运行结果
图4-2 输出信号频谱图
4.3 本章小结
本章节根据设计思路,设计出了相应的程序,通过实验仿真到了比较满意的结果。在程序设计的过程中,由于平时实践操作得少,遇到了一些麻烦,但经过认真的思索,问题还是得到了解决,这使我明白只有把我们学到的理论知识和实践操作相结合,才能算得上真正的学到了本事。
结论
本文通过对设计思路进行了全面的研究,并按照设计要求编写出设计程序,运用MATLAB仿真软件运行出比较满意的结果。从搜集查阅各种相关资料到确定题目,从编写设计程序到运行出满意的结果,这一过程中,使我深刻的意识到自身的不足,理论与实践的差距,要把理论上学习的东西运用到实践中并不容易。同时,我也懂得了科学的博大与精深,在以后的学习过程中,我要在学习理论知识的同时尽可能多的把它们在实践中的到验证,这样才能学好学精。
参考文献
[1] 周辉,董正宏.数字信号处理基础及MATLAB实现.北京希望电子出版社,2006.2
[2] 周绮敏等.信号与系统试验教程.人民邮电出版社,2005.6
[3] 陈亚勇等.MATLAB信号处理详解.人民邮电出版社.2001.9
[4] 梁虹,梁洁,陈跃斌等.信号与系统分析及MATLAB实现.电子工业出版社.2002.6
致谢
在本次设计中,我得到了老师的很多帮助。在我还不是很熟悉这个设计软件的时候,老师细心的给我讲解,使我能熟练的使用这个软件。尤其在我不懂的地方,老师不厌其烦地引导我寻找解决问题的方法,老师教给我的不仅仅只有知识,更重要的是一丝不苟,严肃认真的科学态度,在此我向老师深表谢意!同时,我要感谢在设计过程中其他同学对我的帮助,如果没有他们的帮忙,我的设计可能不会这么全面,在此,对帮助我的人深表谢意!