FIR滤波器的MATLAB和Quartus实现
matlabfir滤波器设计
matlabfir滤波器设计MATLAB是一个高级编程语言和交互式环境,被广泛应用于各种科学和工程问题的数值分析、数据可视化和编程开发等领域。
FIR滤波器是数字信号处理中经常使用的一种滤波器,它是基于有限长冲激响应的滤波器。
在MATLAB平台上,我们可以使用fir1函数来设计FIR滤波器。
一、FIR滤波器设计基础1.1 什么是FIR滤波器FIR滤波器是有限长冲激响应滤波器,由于其具有线性相位特性和可控阶数等优点,在数字信号处理中得到了广泛的应用。
一般来说,FIR滤波器的频率响应特性由滤波器的系数函数确定。
FIR滤波器的设计一般采用窗函数法、最小二乘法、频率抽取法等方法。
窗函数法是最常见的一种方法,大部分情况下选择的是矩形窗、汉宁窗、布莱克曼窗等。
1.3 fir1函数介绍fir1函数是MATLAB中用于FIR滤波器设计的函数,用法为:h = fir1(N, Wn, type)N为滤波器的阶数,Wn是用于指定滤波器截止频率的参数,type指定滤波器类型,可以是低通、高通、带通、带阻等。
二、使用fir1函数设计FIR滤波器2.1 设计要求采样率为300Hz;滤波器阶数为50;截止频率为50Hz。
2.2 实现步骤(1)计算规范化截止频率规范化截止频率是指在数字滤波器设计中使用的无单位量,通常范围为0到1。
在本例中,我们需要将50Hz的截止频率转化为规范化截止频率。
Wn = 2*50/300 = 1/3根据计算出的规范化截止频率和滤波器阶数,我们可以使用fir1函数来进行滤波器设计。
此处滤波器的阶数为50,规范化截止频率为1/3,类型为低通。
(3)绘制滤波器的幅频响应图为了验证设计的低通FIR滤波器是否符合要求,我们需要绘制其幅频响应图。
freqz(h,1,1024,300)经过上述步骤后,我们就得到了一张低通FIR滤波器的幅频响应图,如下图所示:图1.低通FIR滤波器的幅频响应图三、总结通过上述例子,我们可以看出在MATLAB中与fir1函数可以非常方便的进行FIR滤波器的设计。
使用MATLAB设计FIR滤波器
使⽤MATLAB设计FIR滤波器1. 采⽤fir1函数设计,fir1函数可以设计低通、带通、⾼通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。
语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n, wn, ‘ftype’, window, ‘noscale’)参数的意义及作⽤:b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;n:滤波器的介数;wn:滤波器的截⽌频率,取值范围为0<wn<1,1对应信号采样频率⼀半。
如果wn是单个数值,且ftype参数为low,则表⽰设计截⽌频率为wn的低通滤波器,如果ftype参数为high,则表⽰设计截⽌频率为wn的⾼通滤波器;如果wn是有两个数组成的向量[wn1wn2],ftype为stop,则表⽰设计带阻滤波器,ftype为bandpass,则表⽰设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表⽰设计的第⼀个频带为通带,ftype为DC-0,表⽰设计的第⼀个频带为阻带;window:指定使⽤的窗函数,默认为海明窗;noscale:指定是否归⼀化滤波器的幅度。
⽰例:N=41; %滤波器长度fs=2000; %采样频率%各种滤波器的特征频率fc_lpf=200;fc_hpf=200;fp_bandpass=[200 400];fc_stop=[200 400];%以采样频率的⼀半,对频率进⾏归⼀化处理wn_lpf=fc_lpf*2/fs;wn_hpf=fc_hpf*2/fs;wn_bandpass=fp_bandpass*2/fs;wn_stop=fc_stop*2/fs;%采⽤fir1函数设计FIR滤波器b_lpf=fir1(N-1,wn_lpf);b_hpf=fir1(N-1,wn_hpf,'high');b_bandpass=fir1(N-1,wn_bandpass,'bandpass');b_stop=fir1(N-1,wn_stop,'stop');%求滤波器的幅频响应m_lpf=20*log(abs(fft(b_lpf)))/log(10);m_hpf=20*log(abs(fft(b_hpf)))/log(10);m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);m_stop=20*log(abs(fft(b_stop)))/log(10);%设置幅频响应的横坐标单位为Hzx_f=0:(fs/length(m_lpf)):fs/2;%绘制单位脉冲响应%绘制单位脉冲响应subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');%绘制幅频响应曲线subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);2. 采⽤fir2函数设计,函数算法是:⾸先根据要求的幅频响应向量形式进⾏插值,然后进⾏傅⾥叶变换得到理想滤波器的单位脉冲响应,最后利⽤窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。
FIR滤波器的MATLAB设计与实现
FIR滤波器的MATLAB设计与实现1、设计任务1、用MATLAB软件实现FIR滤波器;2、设计基于DSP的FIR滤波器硬件框图;3、了解用DSP实现FIR滤波器的关键问题;4、完成必要的软件流程图;2.前言在通信与电子信息当中,在对信号作分析与处理时,常会遇到有用信号叠加无用噪声的问题;这些噪声信号有的是与信号同时产生的,有的是在传输过程中混入的,在接收的信号中,必须消除或减弱噪声干扰,这是信号处理中十分重要的问题;根据有用信号与噪声的不同特性,消除或减弱噪声,提取有用信号的过程就称为滤波;滤波器的种类很多,实现方法也多种多样;随着数字技术的飞速发展,数字滤波理论也得到了长足的进步;因此,对数字滤波系统硬件实现的要求也越来越高,而软件模拟的方法不仅能及时地提供系统运行的信息,还可以随时改变系统结构从而验证全新的系统,所以软件仿真变得非常重要;Matlab 是具有很强的科学计算和图形显示功能的软件系统,可以对数字滤波器进行精确设计,并且方便地进行FFT 频谱分析与频谱图显示,从而对数字滤波器进行快速地检验和分析;本文讨论在MATLAB 平台下的FIR 数字滤波器设计与分析;DSP是一种实时、快速、特别适合于实现各种数字信号处理运算的微处理器;由于它由具有丰富的硬件资源、高速数据处理能力和强大的指令系统,而在通信、航空、航天、雷达、工业控制、网络及家用电器等各个领域得到广泛应用;DSP分为定点和浮点两种,本文以定点DSP芯片为例,讨论FIR滤波器实现的几个关键问题;所讨论的这些问题,在DSP系统设计中有实际的参考和应用价值;3.FIR 滤波器的原理与MATLAB仿真设计滤波器概述数字滤波在数字信号处理中占有重要的地位,是广泛使用的一种基本线性处理模块,它可以实现模拟器件很难达到的准确线性相位关系特性;数字滤波器分为无限冲激响应滤波器IIR和有限冲激响应滤波器FIR;由于FIR系统只有零点,因此这类滤波器不像IIR 滤波器那样容易取得比较好的通带与阻带衰减特性;要取得好的衰减特性,一般要求Hz 的阶次要高,即N 要大;FIR 滤波器有自己突出的优点,其一是系统总是稳定的,其二是易实现线性相位,其三是只要经过一定的时延,任何非因果有现场序列都能变成因果有限长序列,因而总能用因果系统来实现,其四是FIR 滤波器由于单位冲击响应是有限长的,因而可以用快速傅里叶变换算法来实现过滤信号,从而可以大大提高运算效率;由于FIR 滤波器在阶数相同的条件下运算速度比IIR 滤波器快,同时FIR 滤波器具有不含反馈环路、结构简单以及可以实现的严格线性相位等优点,因而在对相位要求比较严格的条件下,常常采用FIR 数字滤波器;目前常用的设计方法主要有窗函数法、频率取样法及等波纹逼近法;本文应用窗函数法设计FIR 数字低通滤波器;具体参数见表一;FIR 数字滤波器基本原理3.2.1窗函数法的基本思想先构造一个线性相位理想滤波器的频率响应()jw d H e ,然后用一个N 点的窗函数wn, (01)n N ≤≤-去截取理想滤波器的单位抽样响应()d h n 通常为无限长,从而得到具有线性相位的实际滤波器的有限长单位抽样响()()()d h n h n w n =;3.2.2基本方法1构造线性相位理想滤波器的频率响应()jw d H e ,为简单起见,若没有90°相移的特殊要求,一般选择滤波器具有第一类线性相位;2求理想滤波器的单位抽样响应()d h n ;3根据技术指标要求和4种形式的线性相位FIR 数字滤波器的特点,选择合适的窗函数wn 及其长度N,然后对()d h n 加窗函数截取,得到具有线性相应的实际FIR 数字滤波器的单位抽样相应()()()d h n h n w n =,(01)n N ≤≤-;4检验实际滤波器的频率响应()[()]jw H e DTFT h n =是否满足设计指标要求;3.2.3用窗函数设计FIR 滤波器的步骤1根据技术要求确定线性相位理想滤波器的频率响应()jw d H e ;2求理想滤波器的单位抽样响应()d h n ;3根据对过渡带及阻带衰减的要求,选择窗函数的形式,并估计窗口长度N,设待求滤波器的过渡带用△w 表示,它近似等于窗函数主瓣的宽度;4计算滤波器的单位抽样响应()()()d h n h n w n =5验算技术指标是否满足要求,设计出的滤波器频率响应用下式计算10()()N jwjwn n H e h n e --==∑ 3.2.4用窗函数设计FIR 滤波器设滤波器的通带截止频率为p f ,阻带截止频率为s f ,系统采样频率为samp f ,则其过渡带宽带为tw s p f f f =-,抽样周期为 2S sampT f π= 则过渡带数字角频率为22s p tw tw samp samp f f f w f f ππ-== 各种窗函数的过渡带宽可用x Nπ来表示,其中N 是滤波器阶数,x 是一个整数,对应于矩形窗,三角窗,汉宁窗,汉明窗,其值分别为4,8,8,8,所以滤波器的阶数N 可由下式求得2()samp tw s p xf x N w f f π==- 理想低通滤波器的冲击响应为()sin(())()c d n w n h n π-∂=-∂ 其中(1)2N -∂=, c w 是3dB 通带截止数字角频率,其值为 ()()2p s Sp s c samp f f T f f w f π++==加窗后的低通滤波器的冲击响应为()()()n d n n h h w =检验实际滤波器的频率响应()[()]jw H e DTFT h n =是否满足设计指标要求;表1 几种常见的窗函数对比例:用窗函数设计一个线性相位FIR低通滤波器,并满足性能要求:通带边界的归一化频率wp=,阻带边界的归一化频率ws=,阻带衰减不小于30dB,.通带波纹不大于3dB,假设一个信号,其中f1=5Hz,f2=20Hz.;信号的采样频率为50Hz.;并将原信号与通过滤波器的信号进行比较;由题意值,阻带衰减不小于30dB,根据表1,选取汉宁窗,因为汉宁窗的第一旁瓣相对主瓣衰减为31dB,满足滤波要求;wp=pi;ws=pi; %滤波器的边界频率wdelta=ws-wp; %过渡带宽度N=ceil8pi/wdelta; %根据过渡带宽等于表中汉宁窗函数的主瓣宽度求得滤波器所用常函数的最小带宽Wn=+pi/2; %截止频率取通带和阻带边界频率的中点b=fir1N,Wn/pi,hanningN+1;%设计FIR滤波器H,f=freqzb,1,512,50; %采用50Hz的采样频率绘出该滤波器的幅频和相频响应subplot2,1,1,plotf,20log10absH;xlabel'频率';ylabel'振幅';grid on;subplot2,1,2,plotf,180/piunwrapangleH;xlabel'频率';ylabel'相位';grid on;f1=3;f2=20;dt=;t=0:dt:3; %采样间隔和检测信号的时间序列x=sin2pif1t+cos2pif2t; %检测信号y=fftfiltb,x; %给出滤波器的输出figure2subplot2,1,1,plott,x,title'输入信号' %绘出输入信号subplot2,1,2,plott,y %绘出输出信号hold on;plot1 1N-1/2dt,ylim,'r' %绘出延迟到的时刻xlabel'时间',title'输出信号'图1 所设计滤波器的幅频响应上图和相频响应下图图2 所设计滤波器的输入和输出信号程序运行结果如图1,2.该例对应于50Hz的采样频率通带边界频率为fp=50/2=,fs=50/2=;有图1上图得,在小于的频段上,几乎看不到下降,即满足通带波纹不大于3dB的要求;在大于的频段上,阻带衰减大于30dB,满足题目要求;由图1下图得,在通带范围内,相位频率响应为一条直线,表面该滤波器为线性相位;图2给出了滤波器的输入信号和输出信号,输入信号包括3Hz和20Hz的信号,由图1可知,20Hz的信号不能通过该滤波器,通过滤波器后只剩下3Hz的信号;由于FIR滤波所需的阶数较高,信号延迟N-1/2也较大,输出信号前面有一段直线就是延迟造成的; 4.FIR滤波器的DSP实现FIR滤波器的DSP实现方案DSP与一般的微处理器相比有很大的区别;它所特有的结构和指令集合为解决复杂的数字信号处理问题提供了便利;在DSP处理器上实现FIR滤波时,一般使用实系数的FIR滤波器,其最基本的操作是MAC乘-累加指令;本文介绍在TMS320C54X上实现FIR 滤波器;C54X上有一个17位17位的乘法器和一个40位的加法器,用于在单周期内实现MAC运算;同时,C54X使用了先进的多总线体系结构,包含1条程序总线,3条数据总线及4条辅助地址总线;这些特殊的硬件结构使得C54X支持单指令循环,快循环,数据块搬移及循环寻址;所以这些都有利于高效的实现FIR滤波器;硬件框图图3 系统总体框图JTAGJoint Test Action Group联合测试行动小组是一种国际标准测试协议IEEE兼容,主要用于芯片内部测试;基本原理是在器件内部定义一个TAPTest Access Port&0;测试访问口通过专用的JTAG测试工具对内部节点进行测试;JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试;FLASE存储器具有性价比高,体积小,功耗低,可电擦写,使用方便等优点;在DSP应用系统中采用Flash存储器和固定数据是一种比较好的选择;SRAM静态存储器,读写速度快,但价格较高;适合于外部存放需要经常访问或更新的临时数据;RS232电平转换模块,将外部电平转换为适合DSP芯片内部要求的电平;图3是系统的总体框图;主要包括输入信号缓冲及调理电路、A/D 变换器、输入缓冲 FIFO、DSP及外围电路、输出缓冲FIFO、D/A变换器等几部分;其中DSP及外围电路包括程序存储器、串行口、显示及键盘接口等;串行口用于实现和PC机的通信,可以通过PC机对滤波器的控制;假定输入模拟信号为带限信号;该信号经缓冲和调理后经A/D变换进入输入缓冲FIFO,当 FIFO中的数据达到一定数量时产生中断,DSP将数据读入内存中并进行计算和处理,这里DSP主要实现FIR滤波运算;处理后的数据写入输出FIFO中,之后通过D/A变换后输出模拟信号;输出的信号是低通滤波后的结果;用DSP实现FIR滤波器的关键问题定点数的定标在滤波器的实现过程中,DSP所要处理的数可能是整数,也可能是小数或混合小数;然而,DSP在执行算术运算指令时,并不知道当前所处理的数据是整数还是小数,更不能指出小数点的位置在哪里;因此,在编程时必须指定一个数的小数点处于哪一位,这就是定标;通过定标,可以在16位数的不同位置上确定小数点,从而表示出一个范围大小不同且精度也不同的小数;误差问题因为在用定点DSP实现时,所有的数据都是定长的,运算也都是定点运算,因而会产生有限字长效应;所产生的误差主要包括:数模转换引起的量化误差、系数量化引起的误差以及运算过程中的舍入误差;在用定点DSP时,产生误差是不能避免的;循环寻址循环寻址是DSP中经常用到的一种寻址方式;该寻址方法可以对一块特定存储区实现循环的操作;可以把循环寻址理解为实现一个滑动窗,新数据引入后将覆盖老的数据,便得该窗中包含了需处理的最新数据;在数字信号处理中的FIR、卷积等运算中,循环寻址具有极其重要的意义;运算量估计及D SP 芯片的选取;滤波器必须做到实时处理,因此对运算量应该有一个精确的估计,然后选择合适的D SP 处理器;估计运算量时应按最高采样率时计算,主要估算其乘加次数;A/D 及D/A 变换器的选取A/D 及D/A 变换器的选取主要考虑速度和数据宽度;变换器的速度一定要大于所设计滤波器的最高采样速率并要考虑一定的裕量,变换器的数据宽度则根据实际需要的计算精度选择;DDS 芯片的选取DDS 芯片的选择主要考虑频率的调整步长,当可调滤波器的调整步长较大时,可以选择精度稍低的D DS 芯片;软件流程滤波器的软件要实现的功能主要是FIR滤波;工作流程为:根据按键输入的频率,DSP计算出应对AD9850设置的状态字并对AD9850进行设置,AD9850将按设置的频率输出时钟;A/D 转换后的数据进入FIFO中,当到达设置的数据量时将产生中断,DSP将输入 FIFO 中的数据读入DSP并进行FIR运算;运算完成后的数据写入输出FIFO;输出FIFO中的数据将按照与A/D转换同样的速率输出到 D/A 变换器中并产生模拟输出;这样,只要保证FIR运算足够快就可以既不会产生数据溢出,也不会输出数据不足;图4 软件流程图5.结束语由于数字技术的飞速发展,数字滤波理论得到飞速发展,对数字滤波器的设计也提出了更高的要求;现代数字滤波器可以用软件或硬件2 种方式来实现,软件方式实现的优点是可以通过参数的修改进行滤波器性能的仿真和优化;本文运用MATLAB软件,根据设计要求进行了FIR滤波器的仿真;并分析了用DSP实现FIR滤波器的硬件结构和几个关键问题,这些关键问题在实际设计中都有着重要义; 6.参考文献1程佩青.数字信号处理教程M.北京:清华大学出版社,2008,323-369.2万永革.数字信号处理的MATLAB实现M.北京:科学出版社,2007,187-234.3张卫宁.DSP原理及应用教程M.北京:科学出版社,2008,282-296.4张雄伟,邹霞,贾冲.DSP芯片原理与应用M.北京:机械工业出版社,2005,48-76.5罗军辉,罗勇江,白义臣,庞娜.Matlab在数字信号处理中的应用M.北京:机械工业出版社,2005,99-115.6赵顺珍,马英..基于DSP的FIR数字滤波器设计与实现J..微计算机信息,2009 ,25 2:29-31.7张萍.基于MATLAB与DSP的FIR数字滤波器的设计J.中国科技信息,200723:80 – 81.8周辉,董正宏.数字信号处理基础及Matlab实现M.北京:希望电子出版社,2006,116-121.9彭红平,杨福宝.基于Matlab 的FIR 数字滤波器设计J.武汉理工大学学报,2005,105: 275-278.7.个人总结这次课设题目是FIR滤波器的MATLAB设计与实现,通过这次课设使我受益匪浅,首先,我先去图书馆下载各种论文,在网上查找各种资料,但FIR滤波器的知识已经忘得差不多了,一些资料看不懂,把数字信号课件又了一遍,然后是MATLAB编程,以前虽然做实验的时候接触过MATLAB软件,但并不很熟练,这次编程中出现了一些不应该的错误;在这次课设中,需要了解怎么用DSP实现FIR滤波器,由于我们没有学过DSP,所以查了一些资料,但还是觉得很不明白;在写课设报告过程中,越写越觉得自己很无知,平时学习不扎实,对各种知识点没有进行及时积累与总结,导致做课设时临时抱佛脚;以后一定要认真学习,拓展学习知识面,也要加强团队合作与沟通;。
基于MATLAB设计FIR滤波器
基于MATLAB设计FIR滤波器FIR(Finite Impulse Response)滤波器是一种数字滤波器,它具有有限的冲激响应长度。
基于MATLAB设计FIR滤波器可以使用signal工具箱中的fir1函数。
fir1函数的语法如下:b = fir1(N, Wn, window)其中,N是滤波器的阶数,Wn是截止频率,window是窗函数。
要设计一个FIR低通滤波器,可以按照以下步骤进行:步骤1:确定滤波器的阶数。
阶数决定了滤波器的截止频率的陡峭程度。
一般情况下,阶数越高,滤波器的陡峭度越高,但计算复杂度也会增加。
步骤2:确定滤波器的截止频率。
截止频率是指在滤波器中将信号的频率限制在一定范围内的频率。
根据应用的需求,可以选择适当的截止频率。
步骤3:选择窗函数。
窗函数是为了在时域上窗口函数中心增加频率衰减因子而使用的函数。
常用的窗函数有Hamming、Hanning等。
窗函数可以用来控制滤波器的幅度响应特性,使得它更平滑。
步骤4:使用fir1函数设计滤波器。
根据以上步骤确定滤波器的阶数、截止频率和窗函数,可以使用fir1函数设计FIR滤波器。
具体代码如下:N=50;%设定阶数Wn=0.5;%设定截止频率window = hanning(N + 1); % 使用Hanning窗函数步骤5:使用filter函数对信号进行滤波。
设计好FIR滤波器后,可以使用filter函数对信号进行滤波。
具体代码如下:filtered_signal = filter(b, 1, input_signal);其中,input_signal是输入信号,filtered_signal是滤波后的信号。
以上,便是基于MATLAB设计FIR滤波器的简要步骤和代码示例。
根据具体需求和信号特性,可以进行相应的调整和优化。
用Matlab设计FIR滤波器的三种方法
用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法、FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的性能。
关键词 MATLAB,数字滤波器,有限冲激响应,窗函数,仿真1 前言数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
2 FIR滤波器的窗函数设计法 FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。
窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:(1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。
(2) 由性能指标确定窗函数W(n)和窗口长度N。
(3) 求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。
(4) 检验滤波器性能。
本文将针对一个含有5Hz、15Hz和30Hz的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法:程序设计法、 FDATool设计法和SPTool设计法。
参数要求:采样频率fs=100Hz,通带下限截止频率fc1=10 Hz,通带上限截止频率fc2=20 Hz,过渡带宽6 Hz,通阻带波动0.01,采用凯塞窗设计。
2 程序设计法MATLAB信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。
基于Matlab的FIR滤波器设计与实现
基于Matlab的FIR滤波器设计与实现⼀、摘要 前⾯⼀篇⽂章介绍了通过FDATool⼯具箱实现滤波器的设计,见“”,这⾥通过⼏个例⼦说明采⽤Matlab语⾔设计FIR滤波器的过程。
⼆、实验平台 Matlab7.1三、实验原理 以低通滤波器为例,其常⽤的设计指标有:1. 通带边缘频率f p(数字频率为Ωp)2. 阻带边缘频率f st (数字频率为Ωst)3. 通带内最⼤纹波衰减δp=-20log10(1-αp),单位为 dB4. 阻带最⼩衰减αs=-20log10(αs),单位为 dB5. 阻带起伏αs6. 通带峰值起伏αp 其中,以1、2、3、4条最为常⽤。
5、6条在程序中估算滤波器阶数等参数时会⽤到。
数字频率 = 模拟频率/采样频率四、实例分析例1 ⽤凯塞窗设计⼀FIR低通滤波器,通带边界频率Ωp=0.3pi,阻带边界频率Ωs=0.5pi,阻带衰减δs不⼩于50dB。
⽅法⼀:⼿动计算滤波器阶数N和β值,之后在通过程序设计出滤波器。
第⼀步:通过过渡带宽度和阻带衰减,计算滤波器的阶数B和β值。
第⼆步:通过程序设计滤波器。
程序如下:b = fir1(29,0.4,kaiser(30,4.55));[h1,w1]=freqz(b,1);plot(w1/pi,20*log10(abs(h1)));axis([0,1,-80,10]);grid;xlabel('归⼀化频率/p') ;ylabel('幅度/dB') ;波形如下:⽅法⼆:采⽤[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得到凯塞窗滤波器。
这⾥的函数kaiserord(f,a,dev)或者kaiserord(f,a,dev,f s): f为对应的频率,f s为采样频率;当f⽤数字频率表⽰时,f s则不需要写。
a=[1 0]为由f指定的各个频带上的幅值向量,⼀般只有0和1表⽰;a和f长度关系为(2*a的长度)- 2=(f的长度) devs=[0.05 10^(-2.5)]⽤于指定各个频带输出滤波器的频率响应与其期望幅值之间的最⼤输出误差或偏差,长度与a相等,计算公式:阻带衰减误差=αs,通带衰减误差=αp,可有滤波器指标中的3、4条得到。
FIR滤波器的MATLAB设计与实现
FIR滤波器的MATLAB设计与实现FIR滤波器(Finite Impulse Response Filter)是一种数字滤波器,其特点是其响应仅由有限长度的序列决定。
在MATLAB中,我们可以使用信号处理工具箱中的函数来设计和实现FIR滤波器。
首先,需要明确FIR滤波器的设计目标,包括滤波器类型(低通、高通、带通、带阻)、通带和阻带的频率范围、通带和阻带的增益等。
这些目标将决定滤波器的系数及其顺序。
在MATLAB中,我们可以使用`fir1`函数来设计FIR滤波器。
该函数的使用方式如下:```matlabh = fir1(N, Wn, type);```其中,`N`是滤波器长度,`Wn`是通带边缘频率(0到0.5之间),`type`是滤波器的类型('low'低通、'high'高通、'bandpass'带通、'stop'带阻)。
该函数会返回一个长度为`N+1`的滤波器系数向量`h`。
例如,如果要设计一个采样频率为10kHz的低通滤波器,通带截止频率为2kHz,阻带频率为3kHz,可以使用以下代码:```matlabfc = 2000; % 通带截止频率h = fir1(50, fc/(fs/2), 'low');```上述代码中,`50`表示滤波器的长度。
注意,滤波器的长度越大,滤波器的频率响应越陡峭,但计算成本也更高。
在设计完成后,可以使用`freqz`函数来分析滤波器的频率响应。
例如,可以绘制滤波器的幅度响应和相位响应曲线:```matlabfreqz(h);```除了使用`fir1`函数外,MATLAB还提供了其他函数来设计FIR滤波器,如`fir2`、`firpm`、`firls`等,具体使用方式可以参考MATLAB的文档。
在实际应用中,我们可以将FIR滤波器应用于音频处理、图像处理、信号降噪等方面。
例如,可以使用FIR滤波器对音频信号进行去噪处理,或者对图像进行锐化处理等。
基于matlab的FIR滤波器设计(处理加噪音频-窗函数法)
基于matlab的FIR滤波器设计(处理加噪音频,窗函数法) 一、录制音频二、利用窗函数法设计的低通滤波器处理加有噪声的音频波形f3=7000;%所加噪声正弦函数的频率[Y,fs,bits]=wavread('D:\yinpin\nihao01.wav');%利用wavread产生音频的函数及采样频率L=length(Y);t=0:1/fs:(L-1)/fs;%定义时间的范围及步长y=0.005*sin(2*pi*f3*t); n1=floor(L/2);%所加噪声f1=(0:n1)*fs/L;Y=Y(:,1);sound(Y,fs);%输出加噪前音频Y1=y+Y';%给音频加噪声FY1=abs(fft(Y1,L));FY=abs(fft(Y,L));sound(Y1,fs);%输出加噪后的音频figure(1)subplot(211)plot(t(1:1000),Y(1:1000)); grid on;%加噪前音频的时域图xlabel('时间(t)');ylabel('幅度(Y)');title('加噪前录音波形的时域图');subplot(212)plot(f1,FY(1:n1+1)); grid on;%加噪前音频的频域图xlabel('频率(f)');ylabel('幅度(FY)');title('加噪前录音波形的频域图');figure(2)subplot(211)plot(t(1:1000),Y1(1:1000)); grid on;%加噪后音频的时域图xlabel('时间(t)');ylabel('幅度(Y1)');title('加噪声后录音波形的时域图');subplot(212)plot(f1,FY1(1:n1+1)); grid on;%加噪后音频的频域图xlabel('频率(f)');ylabel('幅度(FY1)');title('加噪声后录音波形的频域图');m=0.03; M=round(8/m);N=M-1;%定义滤波器的阶数b=fir1(N,0.6);figure(3)[h,f]=freqz(b,1,512);%滤波器的幅频特性图plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率与幅值xlabel('频率/赫兹');ylabel('增益/分贝');title('滤波器的增益响应');figure(4)sf=filter(b,1,Y1);%使用filter函数对信号进行滤波Fsf=abs(fft(sf,L));subplot(211)plot(t(1:1000),sf(1:1000)); grid on;%滤波后音频的时域图xlabel('时间(t)');ylabel('幅度(sf)');title('滤波后录音波形的时域图');axis([0.01 0.05 -0.002 0.002])subplot(212)plot(f1,Fsf(1:n1+1)); grid on;%滤波后音频的频域图xlabel('频率(f)');ylabel('幅度(Fsf)');title('滤波后录音波形的频域图');sound(sf,fs);三、运行结果加噪前录音波形的时域图和频域图加噪后录音波形的时域图和频域图窗函数法设计低通滤波器的增益响应滤波后录音波形的时域图和频域图。
matlab频率采样法设计fir滤波器
matlab频率采样法设计fir滤波器频率采样法是一种常用的数字滤波器设计方法,可以用于设计FIR (有限脉冲响应)滤波器。
本文将介绍频率采样法的基本原理、设计步骤和实例应用。
我们来了解一下频率采样法的基本原理。
频率采样法的思想是将模拟滤波器的频率响应与数字滤波器的频率响应进行匹配。
具体地说,我们通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列。
然后,通过对这些样值进行离散傅里叶变换(DFT),得到数字滤波器的频率响应。
最后,根据所需的滤波器规格和设计要求,对数字滤波器的频率响应进行优化,得到滤波器的系数。
接下来,我们来介绍频率采样法的设计步骤。
首先,确定所需的滤波器规格,包括截止频率、通带衰减和阻带衰减等。
然后,选择合适的采样频率,通常要大于等于滤波器的最高频率分量的两倍。
接下来,根据所需的滤波器类型(如低通、高通、带通或带阻),选择相应的模拟滤波器原型。
然后,通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列。
再然后,对这些样值进行DFT,得到数字滤波器的频率响应。
最后,根据设计要求和优化准则,对数字滤波器的频率响应进行优化,得到滤波器的系数。
下面,我们以一个具体的实例来说明频率采样法的应用。
假设我们需要设计一个低通滤波器,截止频率为1kHz,通带衰减为0.5dB,阻带衰减为40dB。
我们选择采样频率为10kHz,并选择巴特沃斯滤波器作为模拟滤波器原型。
首先,我们根据通带衰减和阻带衰减的要求,确定模拟滤波器的阶数和截止频率。
然后,通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列。
接下来,对这些样值进行DFT,得到数字滤波器的频率响应。
最后,根据设计要求和优化准则,对数字滤波器的频率响应进行优化,得到滤波器的系数。
通过这些系数,我们可以实现一个满足要求的低通滤波器。
总结一下,频率采样法是一种常用的数字滤波器设计方法,可以用于设计各种类型的FIR滤波器。
通过对模拟滤波器的单位样值响应进行频率采样,得到离散的样值序列,然后通过DFT得到数字滤波器的频率响应,最后根据设计要求和优化准则对频率响应进行优化,得到滤波器的系数。
基于MATLAB与CCS的FIR滤波器的C语言实现
基于MATLAB与CCS的FIR滤波器的C语言实现在开始之前,我们需要了解FIR滤波器的工作原理。
FIR滤波器是通过使用一组固定的权重系数来完成滤波操作的。
这些权重系数称为滤波器的冲击响应或脉冲响应。
当输入信号通过FIR滤波器时,每个输入样本都会与滤波器的系数进行加权,并求和得到输出样本。
因此,滤波器的输出是输入信号和滤波器冲击响应的加权和。
首先,我们需要在MATLAB中设计一个FIR滤波器。
MATLAB提供了一些用于设计FIR滤波器的函数,如fir1和fir2、我们可以使用这些函数来生成滤波器的系数,并将其导出为C语言代码。
假设我们要设计一个低通FIR滤波器,满足以下条件:-采样率为Fs=8000Hz-截止频率为Fc=1000Hz-通带最大衰减为0.5dB-阻带最小衰减为50dB在MATLAB中,我们可以使用fir1函数来设计滤波器,具体代码如下:```MATLABFs=8000;%采样率Fc=1000;%截止频率N=50;%滤波器阶数%计算归一化的截止频率Wn=Fc/(Fs/2);% 使用fir1函数设计滤波器h = fir1(N, Wn, 'low', kaiser(N + 1, 5.65));%导出滤波器系数为C语言代码codegen -config:lib FIRFilter -args {coder.Constant(h)} -report```上述代码中,我们通过fir1函数设计了一个50阶的低通滤波器,该滤波器的截止频率为1000Hz,并且使用了kaiser窗函数进行窗口设计。
然后,我们使用MATLAB的代码生成工具将滤波器系数导出为C语言代码。
导出的C语言代码可以被CCS进行编译和运行。
将导出的C语言代码复制到CCS的工程目录中,并添加相应的文件引用。
然后,我们可以在CCS中编写FIR滤波器的C语言实现代码。
下面是一个简单的C语言实现示例:```C#define FILTER_LENGTH 51 // 滤波器的阶数//定义滤波器系数数组float h[FILTER_LENGTH] =//填充滤波器系数};//定义滤波器的状态变量数组float delayLine[FILTER_LENGTH] = {0};//定义FIR滤波器函数float firFilter(float x)float y = 0;//将输入样本加入延迟线中for (int i = FILTER_LENGTH - 1; i > 0; --i)delayLine[i] = delayLine[i - 1];}delayLine[0] = x;//计算加权和for (int i = 0; i < FILTER_LENGTH; ++i)y += h[i] * delayLine[i];}return y;int maifloat inputSignal = ; // 输入信号float outputSignal = firFilter(inputSignal); // 使用滤波器处理输入信号//处理输出信号```在上述代码中,我们首先定义了滤波器的系数数组h和状态变量数组delayLine。
matlabfir滤波器设计
matlabfir滤波器设计由于滤波器设计的复杂性,在matlab中完成滤波器设计过程可以减少大量的计算工作,下面将介绍在matlab中的FIR滤波器的设计。
一、matlab入口1. matlab工作环境:(1)安装matlab软件,在matlab中运行“dspstart”,启动数字信号处理的工作环境,包括了一些常用处理的函数和示例程序,在这种环境下可以进行滤波器设计的研究。
(2)matlab可以完成离散时间信号处理,因此,滤波器的设计需要在离散时间信号领域完成,即用离散时间信号的算法来完成滤波器设计。
2. matlab工具箱:(1)安装滤波器设计工具箱,这是一个专门用于滤波器设计的matlab库,包括了四种基本滤波器:抗谐波滤波器(notched filter),低通滤波器(low pass filter),带阻滤波器(band stop filter),以及带通滤波器(band pass filter)。
(2)安装滤波器设计高级工具箱,这是一个高级的matlab 库,可以支持滤波器的更复杂的设计,包括滤波器的参数优化,非线性滤波器,以及多种滤波器结构的数字滤波器。
3. matlab辅助性的工具:(1)安装滤波器设计助手,这是一个滤波器设计的可视化工具,可以帮助滤波器的初学者快速上手,了解滤波器设计的基本思想,并运行滤波器的例子及示例程序。
(2)安装滤波器设计指南,这是一个matlab脚本文件,可以帮助滤波器的更高级的使用者了解滤波器设计的原理,以及各种滤波器的不同之处,可以大大提高滤波器的设计效率。
二、 matlab 滤波器设计思路1. FIR滤波器的设计:(1)首先要明确滤波器的工作频率范围,记录滤波器的输入信号精度以及输出精度。
(2)设计滤波器的类型,选择适用于该频率范围内的滤波器类型,如低通滤波器,带阻滤波器等。
(3)定义滤波器的功率频谱,根据滤波器的类型,定义滤波器的功率频谱,包括最大值,超调因数以及滤波器的边带幅度。
FIR数字滤波器的MATLAB详细程序
%FIR-DF hd=ideal_lp(wc,M);Fs=32000;a=2*pi*6500;b=2*pi*7000;c=2*pi*9000;n1=0:4096;t=n1/Fs;xa=cos(a*t)+cos(b*t)+cos(c*t);%+cos(d*t);figure(1);y=fft(xa);plot(abs(y));title('fft(xa)变换');grid;Rp=0.25;As=52;%ws=pi*6600*2/Fs;wp=pi*6700*2/Fs;%gao tong%ws=pi*6700*2/Fs;wp=pi*6600*2/Fs;%di tongws=[pi*6600*2/Fs,pi*7400*2/Fs];wp=[pi*6800*2/Fs,pi*7200*2/Fs];%dai tong%ws=[pi*6600*2/Fs,pi*7400*2/Fs,pi*8600*2/Fs,pi*9400*2/Fs];wp=[pi*6800*2/Fs,pi*7200*2/Fs, pi*8800*2/Fs,pi*9200*2/Fs];%dai tong%ws=[pi*6800*2/Fs,pi*7200*2/Fs];wp=[pi*6600*2/Fs,pi*7400*2/Fs];%dai zuDB=abs(ws(1)-wp(1));%DB=abs(ws-wp);M0=ceil((As-8)/(2.285*DB));%阶数M=M0+mod(M0,2);%确保阶数为偶数N=M+1;%长度为奇数%0.112*(As-8.7);As>50;%0.5842*(As-21)^0.4+0.07886*(As-21);21<=As<=50;%0;As<21;if As>50beta=0.112*(As-8.7);elseif21<=As&&As<=50beta=0.5842*(As-21)^0.4+0.07886*(As-21);elsebeta=0;endwn=kaiser(N,beta);wc=(wp+ws)/2/pi;%fir1使用wc归一化%hn=fir1(M,wc,'high',wn);%gao tonghn=fir1(M,wc,wn);%dai tong,di tong%hn=fir1(M,wc,'stop',wn);%dai zufigure(2);plot(abs(wn));title('窗函数');grid;figure(3);[hh,w]=freqz(hn,1);freqzplot(hh,w,'linear');title('幅频/相频特性');%Hn=fft(hn);%plot(abs(Hn));title('FFT(Hn)');%freqz(hn,1);title('幅频特性');y=filter(hn,1,xa);figure(4);y1=fft(y);plot(abs(y1));title('高通滤波器滤波之后');grid;%=========验证=====================%验证%w_kai=wn';%hd=hn;%h=hd.*w_kai;%freqz_mN1=1000;[H,W]=freqz(hn,1,N1,'whole');%[H,W]=freqz(B,A,N1,'whole');delta_w=2*pi/N1;db=20*log10(abs(H)/max(abs(H))+eps);%通带波纹db数%rp1=-(min(db(wp/delta_w+1:1:501)))%gao tong yan zheng%as1=-round(max(db(1:1:ws/delta_w+1)))%rp1=-(min(db(1:1:wp/delta_w+1)))%di tong yan zheng%as1=-round(max(db(ws/delta_w+1:1:501)))rp1=-(min(db(wp(1)/delta_w+1:1:wp(2)/delta_w+1)))%dai tong yan zhengas1=round(max(-max(db(1:1:ws(1)/delta_w+1)),-max(db(ws(2)/delta_w+1:1:501))))%rp1=-min(min(db(1:1:wp(1)/delta_w+1)),min(db(wp(2)/delta_w+1:1: 501)))%dai zu yan zheng%as1=-round(max(db(ws(1)/delta_w+1:1:ws(2)/delta_w+1)))%N1=4096;%Hw=fft(h,N1);%wk=2*pi*[0:N1-1]/N1;%hgw=Hw.*exp(j*wk*N/2);%rp=max(20*log10(abs(hgw)))%%hgmin=min(real(hgw));%rs=20*log10(abs(hgmin))%w_kai=wn';%hd=hn;%h=hd.*w_kai;%d_w=2*pi/1000;%[db,w0]=freqz(h,1);%rp1=-(min(db(wp/d_w+1:1:501))) %as1=-round(max(db(1:1:ws/d_w+1)))。
FIR滤波器窗函数设计法详细步骤以及Matlab代码
FIR滤波器窗函数设计法详细步骤以及Matlab代码采⽤窗函数法设计理想低通,⾼通滤波器,参考北京交通⼤学陈后⾦主编的【数字信号处理】5.2节窗函数法设计线性相位FIR数字滤波器P164,和P188。
设计步骤如下:1)确定滤波器类型,不同的FIR类型可设计不同类型的滤波器,I型可设计LP(低通滤波器),HP(⾼通滤波器),BP(带通滤波器),BS(带阻滤波器)。
Fir I型Fir II型Fir III型Fir IV型LP,HP,BP,BS LP,BP BP HP,BP,BS2)确定设计的滤波器的参数Eg:若要设计⼀个低通滤波器,fp=20,fs=30;Ap=1,As=40,则3db截频Wc = 2*pi*(fs-fp)/Fs;Fs为采样频率。
3)确定窗函数窗的类型主瓣宽度近似过渡带宽度δp,δs Ap(dB)As(dB)矩形窗4pi/N 1.8pi/N0.090.8221Hann8pi/N 6.2pi/N0.00640.05644Hamming8pi/N7pi/N0.00220.01953Blackman12pi/N11.4pi/N0.00020.001774Kaiser可调窗,需要确定β值 50<A , β = 0.1102(A-8.7); 21<=A<=50, β=0.5842(A-21)^0.4 + 0.07886(A-21); A<21, β = 0;4) 确定滤波器的阶数M,⾸先确定滤波器的长度N。
对于除凯撒窗以外的窗函数,N值由以下公式确定:N>=(窗函数近似过渡带宽度)/(Wp-Ws)Fir I型Fir II型Fir III型Fir IV型脉冲响应h[k]为偶对称h[k]为偶对称h[k]为奇对称h[k]为奇对称窗函数长度:N=mod(N+1,2)+N N=mod(N,2)+N N=mod(N+1,2)+N N=mod(N,2)+N阶数M=N-1为偶数M=N-1为奇数M=N-1为偶数M=N-1为奇数若采⽤Kaiser窗,则M≈(A-7.95)÷ 2.285*|Wp-Ws|,A>21。
matlab中fir数字滤波器常用函数
一、 fir数字滤波器概述fir数字滤波器是一种常用的数字信号处理工具,用于滤除特定频率成分或增强特定频率成分。
在信号处理领域,fir数字滤波器具有重要的应用价值,能够有效地对信号进行去噪、平滑或频率变换等处理。
在matlab中,有许多常用的fir数字滤波器函数,下面将对这些常用函数进行介绍。
二、 fir1函数fir1函数是matlab中用于设计一维fir滤波器的函数,它可以根据指定的滤波器类型、滤波器阶数和截止频率来生成fir数字滤波器。
该函数的调用格式为:h = fir1(n, wn, type)其中,n表示滤波器的阶数,wn为一个标量或长度为2的向量,用于指定截止频率,type为滤波器类型,可以是‘high’、‘low’、‘stop’或‘bandpass’。
三、 fir2函数fir2函数是matlab中用于设计二维fir滤波器的函数,它可以根据指定的滤波器类型、滤波器尺寸和频率响应来生成fir数字滤波器。
该函数的调用格式为:h = fir2(n, f, m, w)其中,n表示滤波器的尺寸,f表示频率响应,m表示频率响应对应的标量,w为设定的窗函数。
四、 fircls函数fircls函数是matlab中用于设计带通fir滤波器的函数,它可以根据指定的滤波器类型、通带和阻带的频率范围来生成fir数字滤波器。
该函数的调用格式为:h = fircls(n, f, a, dev)其中,n表示滤波器的阶数,f表示通带和阻带的频率范围,a表示通带和阻带的幅度响应值,dev表示通带和阻带的允许偏差。
五、 firpm函数firpm函数是matlab中用于设计带通fir滤波器的函数,它可以根据指定的滤波器类型、通带和阻带的频率范围以及频率响应来生成fir数字滤波器。
该函数的调用格式为:h = firpm(n, f, a, w)其中,n表示滤波器的阶数,f表示通带和阻带的频率范围,a表示通带和阻带的幅度响应值,w为设定的窗函数。
fir数字滤波器设计实验报告
fir数字滤波器设计实验报告fir数字滤波器设计实验报告引言:数字滤波器是一种广泛应用于信号处理和通信系统中的重要工具。
其中,有一类常见的数字滤波器是FIR(Finite Impulse Response)数字滤波器。
FIR数字滤波器具有线性相位特性、稳定性好、易于设计和实现等优点,被广泛用于音频处理、图像处理、通信系统等领域。
本实验旨在通过设计一个FIR数字滤波器,探索其设计原理和实际应用。
一、实验目的本实验的目的是通过设计一个FIR数字滤波器,实现对特定信号的滤波处理。
具体来说,我们将学习以下几个方面的内容:1. FIR数字滤波器的基本原理和特点;2. FIR数字滤波器的设计方法和流程;3. 使用MATLAB软件进行FIR数字滤波器的设计和仿真。
二、实验原理1. FIR数字滤波器的基本原理FIR数字滤波器是一种线性时不变系统,其输出仅与当前输入和过去若干个输入有关,没有反馈回路。
这种特性使得FIR数字滤波器具有线性相位特性,适用于对信号的频率响应要求较高的应用场景。
FIR数字滤波器的输出可以通过卷积运算来计算,即将输入信号与滤波器的冲激响应进行卷积运算。
2. FIR数字滤波器的设计方法FIR数字滤波器的设计方法有很多种,常见的包括窗函数法、频率采样法和最优化方法等。
在本实验中,我们将使用窗函数法进行FIR数字滤波器的设计。
窗函数法的基本思想是将理想滤波器的频率响应与一个窗函数相乘,从而得到实际可实现的滤波器。
三、实验步骤1. 确定滤波器的设计要求在设计FIR数字滤波器之前,我们首先需要明确滤波器的设计要求。
包括滤波器的通带、阻带、过渡带的频率范围和响应要求等。
2. 选择窗函数和滤波器的阶数根据设计要求,选择合适的窗函数和滤波器的阶数。
常见的窗函数有矩形窗、汉宁窗、汉明窗等。
不同的窗函数对滤波器的性能有一定影响,需要根据实际情况进行选择。
3. 计算滤波器的冲激响应利用所选窗函数和滤波器的阶数,计算滤波器的冲激响应。
MATLAB FIR滤波器
Matlab中,函数fir1()和fir2()利用加窗傅里叶级数法设计FIR滤波器。
函数fir1()用来设计传统的LP(低通)、HP(高通)、BP(带通)、BS(带阻)和多频带FIR滤波器;而函数fir2()用来设计具有任意幅度响应的的FIR滤波器。
一、函数fir1的各种形式如下:b= fir1(N,Wn)b= fir1(N,Wn,'ftype')b= fir1(N,Wn,window)b= fir1(N,Wn,'ftype',window)b= fir1(...,'normalization')其中,1、N为滤波器节点个数;2、Wn(0<Wn<1)为归一化截止频率;3、ftype为滤波器类型(默认(缺省时)是low):•'high' for a highpass filter with cutoff frequency Wn.•'stop' for a bandstop filter, if Wn = [w1 w2]. The stopband frequency range is specified by this interval.•'DC-1' to make the first band of a multiband filter a passband.•'DC-0' to make the first band of a multiband filter a stopband.4、window为所加窗的类型(默认的是hamming窗),e.g hamming、chebwin、blackman、hanning、kaiser等。
5、normalization为是否将滤波器的幅度进行归一化:•'scale' (default): Normalize the filter so that the magnitude response of the filter at the center frequency of the passband is 0 dB.•'noscale': Do not normalize the filter.fir1()举例:设计一个低通滤波器二、函数fir2的各种形式如下:b = fir2(n,f,m)b = fir2(n,f,m,window)b = fir2(n,f,m,npt)b = fir2(n,f,m,npt,window)b = fir2(n,f,m,npt,lap)b = fir2(n,f,m,npt,lap,window)其中,向量f是指定频率点的幅度响应样本,与m定义的幅度响应样本对应;f和m具有相同的长度,并且f的第一个和最后一个分量分别是0和1;可以对f中的频点进行复制,从而跳变地逼近幅度响应指标。
用MATLAB设计数字FIR低通滤波器(哈明窗)
用MATLAB设计数字FIR低通滤波器(哈明窗)设计数字FIR低通滤波器,技术指标如下:Wp=0.2pi.rp=0.25db;Ws=0.3pi,as=50db.求解,如下图:程序:wp=0.2*pi;ws=0.3*pi;trwidth=ws-wp;M=ceil(6.6*pi/trwidth)+1;%朝正无穷方向取整n=[0:1:M-1];wc=(ws+wp)/2%求的截止频率(弧度)hd=ideal_lp(wc,M) %调用计算理想低通滤波器的单位取样响应wham=(hamming(M))';%哈明窗函数h=hd.*wham;[H,w]=freqz(h,1,1000,'whole'); %求Z变换频率响应函数H=(H(1:1:501))';w=(w(1:1:501))'mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(h,1,w);deltaw=2*pi/1000;Rp=-(min(db(1:1:wp/deltaw+1)))As=-round(max(db(ws/deltaw+1:1:501)))subplot(1,1,1)subplot(2,2,1),stem(n,hd);title('理想脉冲响应')axis([0 M-1 -0.1 0.3]);xlabel('N');ylabel('hd(n)');subplot(2,2,2),stem(n,wham);title('Hamming窗')axis([0 M-1 -0 1.1]);xlabel('N');ylabel('w(n)');subplot(2,2,3),stem(n,h);title('实际脉冲响应')axis([0 M-1 -0.1 0.3]);xlabel('N');ylabel('h(n)');subplot(2,2,4),plot(w/pi,db);title('相对标尺的幅度响应');grid on;axis([0 1 -100 10]);xlabel('frequency in pi units');ylabel('decibels');set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1])%设置或修改LTI对象的属性值set(gca,'XTickMode','manual','XTick',[-50,0])set(gca,'XTickLabelMode','manual','XTickLabels',['50';'0'])子程序:function hd=ideal_lp(wc,N);a=(N-1)/2;n=[0:1:(N-1)];m=n-a+eps;hd=sin(wc*m)./(pi*m);。
基于MATLAB与CCS的FIR滤波器的C语言实现
基于MATLAB与CCS的FIR滤波器的C语言实现FIR(Finite Impulse Response)滤波器是一种数字滤波器,其输出仅取决于有限长度的输入序列。
MATLAB和CCS都提供了强大的工具和函数来设计和实现FIR滤波器。
下面将以一个具体的例子来介绍如何使用MATLAB和CCS来实现FIR滤波器的C语言实现。
首先,在MATLAB中使用fir1函数进行FIR滤波器的设计:```matlabfs = 1000; % 采样频率fpass = 200; % 通带截止频率fstop = 250; % 阻带起始频率Rp=1;%通带最大纹波(dB)Rs=60;%阻带最小衰减(dB)%计算通带和阻带频率f1 = fpass / (fs / 2);f2 = fstop / (fs / 2);% 使用fir1函数设计FIR滤波器b = fir1(30, [f1 f2], 'stop', kaiser(31, 3));%输出滤波器系数```然后,使用MATLAB中的codegen函数将FIR滤波器系数转换为C代码:```matlabcodegen -config:dll FIRFilter -args {b} -report```这将生成一个名为FIRFilter.c的文件,在该文件中包含了FIR滤波器的C语言实现。
接下来,在CCS中创建一个新的project,并将FIRFilter.c文件添加到该project中。
在Source Files文件夹中右键单击,并选择“Add Existing Files to Project”,然后选择FIRFilter.c文件。
接着,点击Build按钮来编译并生成可执行文件。
最后,在CCS中使用FIR滤波器的C语言实现进行信号处理。
可以通过以下代码示例来实现:```c#include <stdint.h>#include "FIRFilter.h"#define BUFFER_SIZE 1000//输入信号int16_t inputSignal[BUFFER_SIZE];//输出信号int16_t outputSignal[BUFFER_SIZE];int main(void)//初始化输入信号//...//调用FIR滤波器实现函数FIRFilter(inputSignal, outputSignal, BUFFER_SIZE);//处理输出信号//...return 0;```上述代码中,首先定义了输入和输出信号的数组,然后在main函数中调用FIR滤波器实现函数,并传入输入和输出信号的数组以及信号的长度。
matlab的fir滤波器设计
matlab的fir滤波器设计FIR(Finite Impulse Response)滤波器是指响应有限长度序列输入的数字滤波器,它可以用于信号去噪、信号滤波和信号重构等领域。
MATLAB软件是目前应用广泛的数学软件工具箱,它可以实现数字信号处理、信号滤波和滤波器设计等功能。
下面我们来分步骤解析如何利用MATLAB完成FIR滤波器设计。
第一步,确定滤波器参数要设计FIR滤波器,需要明确设计的目的,例如信号去噪还是信号滤波。
同时,需要确定滤波器的参数,包括滤波器的采样率、通带边界、阻带边界等。
第二步,调用MATLAB工具箱并加载数据打开MATLAB软件,选择Digital Signal Processing Toolbox,调用fir1函数,该函数用于设计一般的低通、高通、带通和带阻FIR 滤波器。
加载需要滤波的数据,并将其存储在一个变量中。
第三步,进行滤波器设计在MATLAB命令行窗口中输入以下命令,来进行FIR滤波器的设计。
h = fir1(N, Wn, 'type');其中,N是滤波器的阶数,Wn是正规化的截止频率值,type是滤波器的类型,可以是低通、高通、带通和带阻滤波器。
例如,我们要设计一个30阶的低通滤波器,带通频带为0.3至0.7,采样率为1000Hz,输入以下命令:N = 30;Wn = [0.3 0.7];Btype = 'low';FIR_filter = fir1(N, Wn, Btype);第四步,使用FIR滤波器进行滤波使用filter函数,可以将设计好的FIR滤波器应用到加载的数据上,进行滤波操作。
Y_filtered = filter(FIR_filter, 1, X);其中,FIR_filter是设计好的FIR滤波器,X是加载的待滤波数据,Y_filtered是经过滤波器处理后的数据。
第五步,可视化输出结果通过绘制函数将滤波器的输入和输出信号进行可视化处理,观察滤波效果。
MATLAB到vivado--fir
MATLAB到vivado--fir1、MTLAB在APP中选择filter design2、点击左下角的Set quantization parameter,设置Filterarithmetic为Fixed-point(定点数)浮点数x=0.5,定标Q=15【16bit signed】,则定点数xq=L0.532768J=16384,式中LJ表示下取整。
反之,一个用Q=15表示的定点数16384,其浮点数为163842-15=16384/32768=0.5。
浮点数转换为定点数时,为了降低截尾误差,在取整前可以先加上0.5。
Q和S表示方法,如下表所示。
Q表示 S表示十进制表示范围 Q15 S0.15 -1≤x≤0.9999695 Q14 S1.14 -2≤x≤1.9999390Q13 S2.13 -4≤x≤3.9998779 Q12 S3.12 -8≤x≤7.9997559 Q11 S4.11 -16≤x≤15.9995117 Q10 S5.10 -32≤x≤31.9990234 Q9 S6.9 -64≤x≤63.9980469Q8 S7.8 -128≤x≤127.9960938 Q7 S8.7 -256≤x≤255.9921875 Q6 S9.6 -512≤x≤511.9804375 Q5 S10.5 -1024≤x≤1023.96875 Q4 S11.4 -2048≤x≤2047.9375 Q3 S12.3 -4096≤x≤4095.875 Q2 S13.2 -8192≤x≤8191.75 Q1 S14.1-16384≤x≤16383.5 Q0 S15.0 -32768≤x≤32767x表示实际的数(一个浮点数), q表示它的Qn型定点小数(一个整数)。
q = (int) (x 2^n)x = (float)q/2^n3、点击左下角的Design filter,进入滤波器参数设置页面,在其中设置采样频率(Fs)、通带频率(Fpass)、阻带频率(Fstop)、通带衰减(Apass)以及阻带衰减(Astop)等参数,并点击最下面的“Design Filter”按钮生成滤波器系数:【幅频特性曲线中阻带按余弦形式缓慢下降的程度:滚降系数】4、Targets —> XILINXCoefficient(.COE) File导出coe文件,此文件中的系数是以定点十六进制表示的,每个数据长度为16位(由Numerator word length决定),其为实际浮点数据左移17位(由Numerator frac. length决定)得到,例如实际浮点数据第一个系数为0.001,定点表示为0x0081((int)0.001 2 ^ 17 = 131 = 0x0081,即0.001左移17位=Q17)5、Xilinx fir输出位宽OutputWidth=coefwidth+inputwidth+ceil(log2(Tap)) ()比如,这里coefwidth=12, inputwidth=12, Tap是滤波器的阶数,ceil是向上取整。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
&逃之^_~夭夭
FIR滤波器的实现
注意:实验中建立的文件为exp,故只要改下名字就可以了。
执行双击MA TLAB图标,在命令窗口输入simulink,在弹出的窗口中执行File->New->Model,建立名为fir.mdl文件,在按给出的原理图放置元器件并连接线路,最后结果如下图所示:
Simulation—configuration parameter,
单击出现单击Analyze,再单击
Stop time 改为500时,用Scope观察到的波形如下
Stop time 改为10时波形如下
Quartus II中打开fir,qpf执行procesing—start compilation/simulation,无误后执行Assignments—Device,出现设置参数如下
单击simulator setting,在simulation input中选择fir.vwf,单击OK即可,再编译仿真执行File->New->VHD File,建立ADCINT.vhd,输入源文件,
执行File->New->,建立原理图文件
Assignment –assignment editor,引脚锁定
Tools—programmer 下载
将block.Bdf设为顶层文件,点击fir.bdf右键点击Set as Top-Level Entity。