精华内容
下载资源
问答
  • 巴特沃斯低通滤波器

    2018-12-02 22:46:00
    巴特沃斯低通滤波器,用巴特沃斯低通滤波器进行滤波后,结果和理想低通滤波器不同,模糊的平滑过渡是截止频率增大的函数。此外,使用这种BLPF处理过的任何图像中都没有出现“振铃”现象,这要归因于这种滤波器在低频...
  • 巴特沃斯滤波器通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。
  • 可以运行,本人的大作业,处理的彩色图片,对三通道分别处理
  • 摘要:设计了一个巴特沃斯低通滤波器,并用电路仿真软件对其进行了仿真,幅频特性和相频特性较好,通带内 频率特性平坦,且不存在波浪起伏现象,阻带内的曲线缓缓变化到零,所得指标能满足要求,能达到较好的滤波 ...
  • 这个 m 文件使用 n 阶巴特沃斯滤波器的表达式实现了一个低通滤波器。 过滤器的一个简单应用说明了它的用途。
  • 222 2 2 2 基于 MATLAB 设计巴特沃斯低通滤波器 摘 要 首先分析了巴特沃斯低通滤波器的特性然后用MATLAB的信号处理工具箱提供的 函 数设计了巴特沃斯低通滤波器使得巴特沃斯滤波器的设计变得更加简单快捷直观 ...
  • 关于一阶和二阶巴特沃斯低通滤波器的设计,c语言编写,简单容易理解。
  • %利用双线性变化法转换成数字滤波器 figure freqz(Bz,Az); [H,w]=freqz(Bz,Az);%得出函数值 subplot(211) hold on plot([0.35,0.35],[0,-300],':g','linewidth',1.5) plot([0.45,0.45],[0,-300],':r','linewidth',...
  • 基于matlab 的巴特沃斯低通滤波器的实现 一 课程设计的目的 运用MATLAB实现巴特沃斯低通滤波器的设计以及相应结果的显示另外还对多种低通滤波窗口进行了比较 二课程设计的基本要求 1熟悉和掌握MATLAB 的基本应用技巧...
  • 巴特沃斯低通滤波器的c语言实现

    热门讨论 2014-11-02 10:23:15
    用c 语言实现的巴特沃斯低通滤波器,输出结果与matlab仿真设计结果一直
  • 用c实现巴特沃斯低通滤波器,代码通俗易懂,易于上手。
  • 分类号 编号 烟 台 大 学 毕 业 论 文 基于MATLAB设计巴特沃斯低通滤波器 The Design of Butterworth Low-passing Filter Based on MATLAB 申请学位 院 系 专 业 姓 名 学 号 指导老师 2011年 05 月 26日 烟台大学 ...
  • 精品文档 能实行 c 语言不能显示图像但是你要懂得如何用 c 调用 matlab 过程比较复杂 这个程序任何参数都可以用不限制 #include<engine.h> #include<math.h> #include<stdio.h> #include<stdlib.h> #include...
  • 这是一个对二阶压控压源型巴特沃斯低通滤波器的设计,包含了具体的步骤。
  • 本资源为一个matlab源代码和一个纯净的音乐信号,通过对音乐信号加高频余弦噪声,得到掺杂高频余弦噪声的音乐信号;后通过设计巴特沃斯低通滤波器以及频域分析,实现高频噪声的去除,重新得到纯净的音乐信号。
  • 用运放设计一个巴特沃斯低通滤波器

    设计一个巴特沃斯低通滤波器

    一、设计要求:

    设计目标为设计一个二阶巴特沃斯低通滤波器,转折频率为6.3千赫兹

    二、方案设计

    2.1 电路设计

    电路设计采用无限增益多路反馈型滤波电路,逼近方式采用巴特沃斯逼近,电路图如图:

    image-20210709221906840

    2.2 参数计算

    使用查表法确定参数,步骤如下:

    • 因为采用无限增益多路反馈型巴特沃斯低通滤波器,所以查看如下表格4-5,根据截止频率为6.3KHZ,所以选择C1为0.01uF

    image-20210709222117224

    • 按照公式K=100/(fc*C1) 计算电阻换标系数
    	K=100/(63000.01)=1.587
    
    • 拟设计通带增益Kp= -2,所以由表4-6查得归一化阻值:
    	r1=2.565kΩ
    	r2=3.292kΩ
    	r3=5.130
    • 由表得C2/C1=0.15,所以得到电容 C2=0.0015uF

    • 将归一化电阻值分别乘上电阻换标系数可以得到实际电阻值为:

    	R1=2.565*1.587=4.07kΩ
    	R2=3.2921.587=5.224kΩ
    	R3=5.1301.587=8.14

    三、电路仿真

    按照第一次的电路图带入计算的数值在multisim中进行仿真

    image-20210709222616478

    运行后查看特性曲线

    幅频特性曲线:转折频率约为6.3KHZ

    image-20210709222722513

    相频特性曲线:90度时频率也约为6.3KHZ

    image-20210709222728336

    打开示波器查看仿真波形:

    绿色为原始波形(6kHz),蓝色为原始波形加入一个高频噪声后的波形,红色为经过通带增益-2的低通滤波器滤波后波形,滤波后存在相位偏移

    image-20210709222905917

    展开全文
  • 本资源内包含一个matlab源代码和一个纯净的音乐信号,通过对音乐信号加高频余弦噪声,得到掺杂高频余弦噪声的音乐信号;后通过设计巴特沃斯低通滤波器以及频域分析,实现高频噪声的去除,重新得到纯净的音乐信号。
  • 设计一巴特沃斯低通滤波器,要求其通带截止频率3400Hz通带最大衰减3dB;阻带截止频率4000Hz,阻带最小衰减40dB
  • 比较好用的MATLAB编程,巴特沃斯低通滤波器图像增强
  • 巴特沃斯滤波器是电子滤波器的一种,特点是频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。巴特沃斯滤波器是目前最为流行的一类数字滤波器?
  • 方法:程序采用巴特沃斯低通滤波和椭圆低通滤波,其中,备注对涉及到的函数进行通俗的解释,并画出了滤波器的频率响应特性和时域、频域滤波结果。其中还对两个滤波函数(fftfilt, filtfilt)得结果进行对比,显示了...
  • 四阶巴特沃斯低通滤波器设计

    千次阅读 2021-08-11 23:32:49
    本次设计围绕四阶巴特沃斯低通滤波器,从电路设计,时域分析,频率分析,S域分析几个方面着手,通过理论分析、仿真实验、真实测量来研究和验证整个系统的性质。在时域上验证系统的冲激响应和阶跃响应以及零输入响应...

    目录

    第一章:整体思路
    第二章:电路设计
    第三章:实验与分析

    1、时域分析
    2、频域分析
    3、S域分析
    第四章:总结
    第五章:附录

    第一章 整体思路

    本次设计围绕四阶巴特沃斯低通滤波器,从电路设计,时域分析,频率分析,S域分析几个方面着手,通过理论分析、仿真实验、真实测量来研究和验证整个系统的性质。在时域上验证系统的冲激响应和阶跃响应以及零输入响应;在频域分析上验证系统的幅频曲线和相频曲线;在S域上通过极点分布研究系统是否稳定。

    第二章 电路设计

    1、运放芯片的选择
    本次实验的截至频率不大于1KHZ,带宽不大于1MHZ,选择通用运放芯片即可,最后决定采用LMV358这个通用芯片。
    在这里插入图片描述

    2、电路原理图
    在这里插入图片描述

    通过查表法可得,四阶巴特沃斯的一级电路的放大系数为1.152,第二级放大系数为2.235。
    则R2/R1=1.152-1=0.152,R4/R3=2.235-1=1.135。所以选取电阻值为R1=100KΩ,R2=15.2KΩ,R1=10KΩ,R1=12.35KΩ。用于滤波的电阻均采用20kΩ,电容采用0.01uf。则谐振频率f0=1/(2ΠRC)≈795HZ。电路的总增益Av=1.1522.235=2.57472。以下为系统传递函数的求解过程。
    在这里插入图片描述
    第三章:实验与分析
    1、时域分析
    ①阶跃响应
    a、理论分析:
    用matlab通过拉普拉斯逆变换求得系统函数
    1/s的时域表达式。然后通过matlab画图得出时域表达式的图像。
    输入命令:
    在这里插入图片描述

    解得:
    在这里插入图片描述

    输入命令:
    在这里插入图片描述

    得到波形图:
    在这里插入图片描述

    b、multisim仿真
    阶跃信号的产生:
    在这里插入图片描述

    设计参数时让频率足够小,占空比足够大,确保能够在模拟阶跃信号。
    电路设计:
    在这里插入图片描述

    仿真结果:
    在这里插入图片描述

    可以看出仿真出来的波形基本正确,电压增益约为2.574,波形也与matlab一样。
    c、实际效果
    在这里插入图片描述

    ②冲激响应
    a、理论分析
    在matlab输入:
    在这里插入图片描述

    解得:
    在这里插入图片描述

    输入:
    在这里插入图片描述

    得到:
    在这里插入图片描述

    b、multisim仿真
    冲激信号的产生:
    在这里插入图片描述

    仿真结果:
    在这里插入图片描述

    可以看到刚开始时出现很高的电压,之后出现很低的电压,之后逐渐振荡减小,与理论分析一致。
    c、实际效果
    在这里插入图片描述

    ③正弦函数响应
    a、理论分析
    输入命令:
    在这里插入图片描述

    得到:
    在这里插入图片描述

    b、multisim仿真
    电路:
    在这里插入图片描述

    结果:
    在这里插入图片描述
    在这里插入图片描述

    由上面的两张图可以看出,multisim的仿真结果与matlab基本一致。
    c、实际效果
    在这里插入图片描述

    与理论值相比,电压幅度有一点差距,但是总体趋势是一致的。
    在这里插入图片描述

    与理论值基本一致。
    2、频域分析
    ①幅频曲线
    a、理论分析
    输入命令:
    在这里插入图片描述

    得到:
    在这里插入图片描述

    由图中可以看出通带增益为20lg(2.574)=8.21,截至频率为5000rad/s,即约为795HZ。由于两个阻尼系数经过特别设置,与之前计算的f0=1/(2ΠRC)≈795HZ相同。
    b、multisim仿真
    电路设计:
    采用波特仪测量幅频曲线
    在这里插入图片描述

    结果:
    在这里插入图片描述

    由上图可知,在增益为5.25dB时,即-3dB点左右,频率约为795HZ,这与matlab的计算结果相同。
    c、实际效果
    实际测量部分图片:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    测量结果:
    在这里插入图片描述

    由matlab画散点图可得:
    在这里插入图片描述
    在这里插入图片描述

    由图可见,实际测量效果与matlab和multisim的结果大致相同,理论上当f=795HZ时,20*lg(Av)=5.21,与图中的5.29相近。
    ②相频曲线
    a、理论分析
    输入命令:
    在这里插入图片描述

    得到:
    在这里插入图片描述
    在这里插入图片描述

    由图中可以看出截至角频率为6210rad/s,即988HZ。在988HZ处,ΔΨ=-223°

    b、multisim仿真
    电路设计:
    采用波特仪测量幅频曲线
    在这里插入图片描述

    仿真结果:
    在这里插入图片描述

    由上图可以看到,结果与matlab计算结果基本一致。
    c、实际效果
    实际测量部分图片:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    测量结果:

    在这里插入图片描述

    用matlab画相频曲线:
    在这里插入图片描述
    在这里插入图片描述

    由上图可以看出在f=988HZ时,对应的相位差为-224°,这和理论值-223°基本一致。
    3、S域分析
    输入命令:
    在这里插入图片描述

    得到:
    在这里插入图片描述

    由上图可以看出,极点均在左侧,所以系统是稳定的。

    第四章:总结

    本次实验实际上是对一个元器件已经固定的系统进行多方面的分析,先是查阅资料后按常规设计出电路,然后计算系统的传递函数,最后实验围绕系统传递函数展开。通过本次实验设计,意识到了理论知识的重要性。之前做过的二阶低通滤波电路,没有涉及阻尼系数的概念,采用20KΩ和0.01uf元件构建的二阶电路的截至频率并不是1/(2ΠRC),但是通过设置第一级与第二级的阻尼系数,可以让截止频率等于1/(2ΠRC)。
    通过本次实验,学到了:
    ①matlab作为强大的数学计算工具,可以通过matlab计算截至频率,画频谱图,画各种信号的响应,matlab可以更多用于理论的计算。
    ②multisim中波特仪的使用方法,波特仪的幅频和相频的单位与matlab中用margin函数画出的图像的单位是一致的,但是matlab中频率用的是角频率,而multisim用的是HZ。只有在波特仪的起始值与终点值设置合理时波特仪才会显示图像。
    ③在matlab计算截至频率的过程中,卡在了margin的输入参数问题,最后发现必须用tf函数构建系统传递函数后才能作为margin的输入参数,即使传递函数已经化为包含s的式子。
    ④在制作电路时,放大系数用的电阻必须精确,这直接关系到频域响应。所以在本次实验中对于15.2KΩ和12.35KΩ的电阻采用两个0603封装的电阻串联使用,增大精确度。

    第五章 附录

    实际电路图
    在这里插入图片描述

    Boom表
    在这里插入图片描述

    原理图
    在这里插入图片描述

    Pcb图

    在这里插入图片描述

    展开全文
  • 基于Matlab巴特沃斯低通滤波器的设计谢继杨(成都理工大学工程技术学院,四川乐山,614000)摘要:现如今已经有相当成熟的技术去模拟滤波器,人们为了更加深入的理解巴特沃斯滤波器,于是巴特沃斯模拟滤波器便基于...

    基于Matlab巴特沃斯低通滤波器的设计

    谢继杨

    (成都理工大学工程技术学院,四川乐山,614000)

    摘要:现如今已经有相当成熟的技术去模拟滤波器,人们为了更加深入的理解巴特沃斯滤波器,于是巴特沃斯模拟滤波器便基于matlab来编程。同时几种模拟滤波器将被我们用于比较。

    关键词:MATLAB;巴特沃斯低通滤波器;相关滤波器的比较

    Design of Butterworth low pass filter based onMatlab

    ZuozheXiejiyang

    (TheEngineering&TechnicalCollege of Chengdu University of technology,Leshan,Sichuan614000)

    Abstract:Nowadays, there are quite mature technologies to simulate filters. In order to have a deeper understanding ofbutterworthfilters,butterworthanalog filters are programmed based on MATLAB. At the same time several analog filters will be used for comparison.

    Keywords:MATLAB;Butterworth low pass filter;Comparison of correlation filters

    1.引言:

    MATLAB属于科学计算软件的一种,在工程应用领域用于分析设计和复杂计算,方便的使用,简洁的输入,高效的运算,丰富的内容是它的代名词,并且编写后可作函数文件的方式储存,调用相当简单。滤波器这种电子装置可以在有用频率信号通过的同时衰减无用频率。在频率高于一个确定数值的电路中,滤波器便起到了抑制作用。所以,巴特沃斯滤波器能使用matlab来高速便捷的编程模拟。

    2正文:

    2.1巴特沃斯滤波器的原理

    在现代各式各样的滤波器设计方法中,巴特沃斯型滤波器是最为为人知晓的,之所以被推广应用的原因,是因为它很容易就被设计,性能优点比起缺点更为明显,元件Q值在滤波器中属于低水平,因此很好制造还能达到设计标准。其最为明显的地方当属于在通频带那最为平滑的频率响应曲线。

    要想实现改变截止频率,就必须先将还没设计的滤波器截止频率比上基准滤波器的截止频率,使用计算出的比值M去比上这当中所有的元件值。其中M的计算公式为;M=还未设计滤波器的截止频率/基准滤波器的截止频率。

    关于变换特征阻抗,要将待设计的滤波器的特征阻抗去除以基准滤波器的特征阻抗,得到比值K,接下来用K去与该滤波器中的所有的电容元件值相比以及与基准滤波器中所有的电感元件值相乘,便可实现。

    2.2巴特沃斯滤波器的优点

    在通频带内最大程度的平坦,不起伏,在阻频带则慢慢下降至零是频率响应的特点。从一个边界角频率开始角频率逐渐增加振幅随之减少并趋向负无穷则是在振幅的对数对角频率的波特图特点。

    每种滤波器在高阶与低阶呈现的振幅对角频率不同,巴特沃斯滤波器不一样的地方便是阶数、振幅对角频率保持了同样形状,只是在阻频带振幅衰减速度与阶数成正比。最为直观的表现为一阶巴特沃斯滤波器的衰减率六分贝每倍频,二阶巴特沃斯滤波器衰减率十二分贝每倍频,三阶巴特沃斯的衰减率十八分贝每倍频,特别指出在一阶时每十倍频是二十分贝。

    类比于切比雪夫滤波器,巴特沃斯滤波器有高通,低通,带通,带阻等多种滤波器分类设计。平稳的幅频特点,较为漫长的过渡带,让它在通频带中容易在过渡带失真,在仿真时第一周期往往会出现失真,随之往后的幅频特性越来越好。

    2.3多种滤波器的比较

    Bessel滤波器在线性过滤器中具有最为平坦的群延迟以及最为平坦的幅度和相位响应。因此在音频天桥系统中使用最为常用。每到模拟Bessel滤波器时恒定的群延迟便出现在通频带内并几乎将其横跨,所以过滤的信号波形在通频带上被保留。几乎呈线性的相位响应则属于用户常常关注的区域——带通。所以Bessel滤波器用于减少非线性相位失真在所有IIR滤波器中这一固有特点。

    切比雪夫这一滤波器的特点是频率响应幅度等波纹波动,发生在通带或阻带上,等波纹这一振幅特点在通带上。被称为切比雪夫Ⅰ型的滤波器则是在阻带内单调的;被称为切比雪夫Ⅱ型的滤波器则在通带才是单调的,在阻带内却是等波纹的。所以如何选用切比雪夫滤波器得看实际情况采取合适的型号针对性选用。

    椭圆滤波器滤波器也就是常说的Cauer滤波器,在阶数相同的情况下通带和阻带波动最小,而且在通带和阻带波动相同,这也正是它被区别于巴特沃斯滤波器和切比雪夫滤波器的特点。如果从传递函数的角度出发,常数除以多项式是巴特沃斯和切比雪夫滤波器的特点,表现为衰减为无限大当处于无限大阻带时。而Cauer滤波器既有零点也有极点,产生等波纹时极点与零点在通带内,有限的传输零点在阻带内时产生了让过渡区减少的情况,所以方便获得的衰减曲线非常陡峭,这便形成了Cauer最大优势,不过有利还是会存在弊端,如此陡峭的衰减曲线正是通过通带和阻带的不稳定来换取的。而且由于传输函数较之巴特沃斯和切比雪夫滤波器更为繁琐,如果使用传统设计思路,设计程序,过程计算极为复杂。

    4f42972685fa47ccb3f8b2fa1cb5bc48.png

    巴特沃斯、切比雪夫、贝塞尔和椭圆滤波器比较

    3实例

    首先将巴特沃斯滤波器在matlab上模拟如下:

    2e7b50287e42574be3d68d1687bd7d13.png

    图3.1.1二阶有源电路图

    一、巴特沃斯低通滤波器可用公式表示为:

    cf615dea163e54f6d7734c32cf2d8bf9.png

    图3.1.2

    4824d4de5c43cdcd13141b3618c37a5b.png=滤波器的阶数

    4f3e815b7a175991c03a0e50c1ae408a.png=截止频率=振幅下降为-3分贝时的频率

    1d115fde8a28552af111982e69ce85ff.png=通频带边缘频率

    二、为一个巴特沃斯低通滤波器设计技术标准:

    通带截至频率fp=2.6kHz,

    阻带截至频率fs=3.6kHz,

    通带最大衰减2dB,

    阻带最小衰减31dB。

    三、在MATLAB中程序编写如下:

    wp= 2*pi*2600;

    ws= 2*pi*3600;

    Rp= 2;

    As = 31;

    [N,wc] =buttord(wp,ws,Rp,As,'s');

    [B, A] =butter(N,wc,'s');

    fk=0:800/512:8000;

    wk= 2*pi*fk;

    HK =freqs(B,A,wk);

    x =fk/1000;

    y = 20*log10(abs(HK));

    figure

    plot(fk/1000, 20*log10(abs(HK)));

    gridon,xlabel('频率(kHz)'),ylabel('幅度(dB)')

    title('巴特沃斯模拟滤波器')

    axis([0,4,-35,5])

    四、运行于MATLAB的结果

    dde68275e62f697da5c1bf601af9ca3a.png

    图3.1.4响应特性对于巴特沃斯低通滤波器的显示

    验证结果

    经仿真得到结果:

    巴特沃斯滤波器随着频率升高幅度单调变化,图像平顺,波纹稳定不起伏。完全符合巴特沃斯滤波器特点,实例仿真成功。

    4总结

    Matlab的运用大大简化了设计过程,降低了设计成本,不仅按照要求设计出了满足指标的巴特沃斯滤波器,还通过波特图显示出了其幅频曲线,严谨的事实依据为其验证提高了可靠性,体现了科学性,推动了巴特沃斯滤波器的各项研究进程,为以后深入研究打下了牢固基础。

    参考文献:

    [1]吴忻生,唐萍,秦瀚.数字滤波技术在称重系统信号采集中的应用[J].传感器与微系统,2010,29(09):131-134.

    [2]张小虹.数字信号处理[M].北京:机械工业出版社,2008.

    展开全文
  • 基于MATLAB设计巴特沃斯低通滤波器.pdf
  • 1.低通滤波器 低通滤波是将频域图像中的高频部分滤除而通过低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的。 2.理想低通滤波器 最简单...

    1.低通滤波器
    低通滤波是将频域图像中的高频部分滤除而通过低频部分。图像的边缘和噪声对应于频域图像中的高频部分,而低通滤波的作用即是减弱这部分的能量,从而达到图像平滑去噪的目的。

    2.理想低通滤波器
    最简单的低通滤波器是理想低通滤波器,基本思想是给定一个频率阈值,将高于该阈值的所有部分设置为0,而低于该频率的部分保持不变。

    理想是指该滤波器不能用电子元器件来实现,但是可以通过计算机来模拟。

    在VTK中定义了理想低通滤波器,下面我们来看下怎么使用该滤波器来对图像进行低通滤波:

    //理想低通滤波器
    #include <vtkSmartPointer.h>
    #include <vtkJPEGReader.h>
    #include <vtkImageFFT.h>
    #include <vtkImageIdealLowPass.h>
    #include <vtkImageData.h>
    #include <vtkImageRFFT.h>
    #include <vtkImageCast.h>
    #include <vtkImageExtractComponents.h>
    #include <vtkImageActor.h>
    #include <vtkRenderer.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderWindowInteractor.h>
    
    int main()
    {
    	vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
    	reader->SetFileName("data\\lena.jpg");
    	reader->Update();
    
    	vtkSmartPointer<vtkImageFFT> fftFilter = vtkSmartPointer<vtkImageFFT>::New();
    	fftFilter->SetInputConnection(reader->GetOutputPort());
    	fftFilter->Update();
    
    	vtkSmartPointer<vtkImageIdealLowPass> lowPassFilter = vtkSmartPointer<vtkImageIdealLowPass>::New();
    	lowPassFilter->SetInputConnection(fftFilter->GetOutputPort());
    	lowPassFilter->SetXCutOff(0.05); //设置x\y方向上的截断频率
    	lowPassFilter->SetYCutOff(0.05);
    	lowPassFilter->Update();
    
    	vtkSmartPointer<vtkImageRFFT> rfftFilter = vtkSmartPointer<vtkImageRFFT>::New();//将处理后的频域图像转换至空域图像,
    	rfftFilter->SetInputConnection(lowPassFilter->GetOutputPort());              //注意:转换后的图像每个像素值都是一个复数;
    	rfftFilter->Update();
    
    	vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal = vtkSmartPointer<vtkImageExtractComponents>::New();
    	ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort());
    	ifftExtractReal->SetComponents(0);//提取实部分量
    
    	vtkSmartPointer<vtkImageCast> castFilter = vtkSmartPointer<vtkImageCast>::New();//数据类型转换为unsigned char类型
    	castFilter->SetInputConnection(ifftExtractReal->GetOutputPort());
    	castFilter->SetOutputScalarTypeToUnsignedChar();
    	castFilter->Update();
    
    	vtkSmartPointer<vtkImageActor> originalActor = vtkSmartPointer<vtkImageActor>::New();
    	originalActor->SetInputData(reader->GetOutput());
    
    	vtkSmartPointer<vtkImageActor> erodedActor = vtkSmartPointer<vtkImageActor>::New();
    	erodedActor->SetInputData(castFilter->GetOutput());
    
    	double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 };
    	double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 };
    	vtkSmartPointer<vtkRenderer> leftRenderer = vtkSmartPointer<vtkRenderer>::New();
    	leftRenderer->AddActor(originalActor);
    	leftRenderer->ResetCamera();
    	leftRenderer->SetViewport(leftViewport);
    	leftRenderer->SetBackground(1.0, 0, 0);
    
    	vtkSmartPointer<vtkRenderer> rightRenderer = vtkSmartPointer<vtkRenderer>::New();
    	rightRenderer->AddActor(erodedActor);
    	rightRenderer->SetViewport(rightViewport);
    	rightRenderer->ResetCamera();
    	rightRenderer->SetBackground(1.0, 1.0, 1.0);
    
    	vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    	renderWindow->AddRenderer(rightRenderer);
    	renderWindow->AddRenderer(leftRenderer);
    	renderWindow->SetSize(540, 320);
    	renderWindow->SetWindowName("Frequency_IdealLowPassFilter");
    
    	vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    	interactor->SetRenderWindow(renderWindow);
    	renderWindow->Render();
    	interactor->Start();
    
    	return 0;
    }

    运行结果如下:

    从结果看,在过滤掉图像的高频部分后,图像变得模糊,丢失了许多细节,另外还可以看到图像会存在一定的振铃效应,这也是理想低通滤波的特点

    首先读入一副图像,通过vtkImageFFT将图像转换到频域空间。vtkImageIdealLowPass对频域图像做理想低通滤波,需要用户设置每个方向的截断频率,相应的设置函数SetXCutOff()和SetYCutOff()。执行完毕后,需要通过vtkImageRFFT将处理后的频域图像转换至空域图像。需要注意的是,转换后的图像每个像素都是一个复数,需要vtkImageExtractComponents将该图像的第一个分量提出出来显示,否则图像不能正确显示。由于傅里叶变换输入输出的数据类型都是double,为了方便显示,还需要将其转换为Unsigned char类型,这里vtkImageCast负责类型转换。
    3.巴特沃兹低通滤波器

    在实际中经常使用的是巴特沃斯滤波器。巴特沃斯滤波器对应的转移函数(可以看做是一个系数矩阵)是:

                                                      

    其中D(u,v)表示频域点(u,v)到频域图像原点的距离,称为截止频率,当D(u,v) = 时,H(u,v)=0.5,即对应的频域能量将为原来的一半。因为巴特沃斯低通滤波器在高低频间的过渡平滑,因此不会出现明显的振铃效应。VTK中实现巴特沃斯低通滤波器的类是vtkImageButterworthLowPass.

    /***********************巴特沃兹低通滤波器*****************************************/
    #include <vtkSmartPointer.h>
    #include <vtkJPEGReader.h>
    #include <vtkImageFFT.h>
    #include <vtkImageButterworthLowPass.h>
    #include <vtkImageRFFT.h>
    #include <vtkImageExtractComponents.h>
    #include <vtkImageCast.h>
    #include <vtkImageActor.h>
    #include <vtkRenderer.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkInteractorStyleImage.h>
    
    int main()
    {
    	vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
    	reader->SetFileName("data\\lena-gray.jpg");
    	reader->Update();
    
    	vtkSmartPointer<vtkImageFFT> fftFilter = vtkSmartPointer<vtkImageFFT>::New();
    	fftFilter->SetInputConnection(reader->GetOutputPort());
    	fftFilter->Update();
    
    	vtkSmartPointer<vtkImageButterworthLowPass> lowPassFilter = vtkSmartPointer<vtkImageButterworthLowPass>::New();
    	lowPassFilter->SetInputConnection(fftFilter->GetOutputPort());
    	lowPassFilter->SetXCutOff(0.05);
    	lowPassFilter->SetYCutOff(0.05);
    	lowPassFilter->Update();
    
    	vtkSmartPointer<vtkImageRFFT> rfftFilter = vtkSmartPointer<vtkImageRFFT>::New();
    	rfftFilter->SetInputConnection(lowPassFilter->GetOutputPort());
    	rfftFilter->Update();
    
    	vtkSmartPointer<vtkImageExtractComponents> ifftExtractReal = vtkSmartPointer<vtkImageExtractComponents>::New();
    	ifftExtractReal->SetInputConnection(rfftFilter->GetOutputPort());
    	ifftExtractReal->SetComponents(0);
    
    	vtkSmartPointer<vtkImageCast> castFilter = vtkSmartPointer<vtkImageCast>::New();
    	castFilter->SetInputConnection(ifftExtractReal->GetOutputPort());
    	castFilter->SetOutputScalarTypeToUnsignedChar();
    	castFilter->Update();
    	
    	vtkSmartPointer<vtkImageActor> originalActor = vtkSmartPointer<vtkImageActor>::New();
    	originalActor->SetInputData(reader->GetOutput());
    
    	vtkSmartPointer<vtkImageActor> erodedActor = vtkSmartPointer<vtkImageActor>::New();
    	erodedActor->SetInputData(castFilter->GetOutput());
    	///
    	double leftViewport[4] = { 0.0, 0.0, 0.5, 1.0 };
    	double rightViewport[4] = { 0.5, 0.0, 1.0, 1.0 };
    	vtkSmartPointer<vtkRenderer> leftRenderer =	vtkSmartPointer<vtkRenderer>::New();
    	leftRenderer->AddActor(originalActor);
    	leftRenderer->SetViewport(leftViewport);
    	leftRenderer->SetBackground(1.0, 1.0, 1.0);
    	leftRenderer->ResetCamera();
    
    	vtkSmartPointer<vtkRenderer> rightRenderer = vtkSmartPointer<vtkRenderer>::New();
    	rightRenderer->AddActor(erodedActor);
    	rightRenderer->SetViewport(rightViewport);
    	rightRenderer->SetBackground(1.0, 1.0, 1.0);
    	rightRenderer->ResetCamera();
    	
    	vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New();
    	rw->AddRenderer(leftRenderer);
    	rw->AddRenderer(rightRenderer);
    	rw->SetSize(640, 320);
    	rw->SetWindowName("ButterworthLowPassExample");
    
    	vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    	vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New();
    	rwi->SetInteractorStyle(style);
    	rwi->SetRenderWindow(rw);
    	rwi->Start();
    
    	return 0;
    }

    运行结果如下:

    vtkImageButterworthLowPass与理想低通滤波器的使用一样。为了便于比较,这里设置X和Y方向的截止频率时,与理想低通滤波器设置一致,从结果来看,巴特沃斯低通滤波器产生的图像更为平滑,不会出现振铃现象。

     

    参考资料:

    1.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》
    2. 张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.

    所用软件:vtk7.0+visual studio 2013


    注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:

    https://blog.csdn.net/www_doling_net/article/details/8541534

    https://blog.csdn.net/shenziheng1/article/category/6114053/4

    展开全文
  • 用matlab做巴特沃斯低通滤波器

    万次阅读 多人点赞 2020-07-11 23:00:39
    用matlab做巴特沃斯低通滤波器的干货 基本数据 fs=100 N=1024 n=-N/2:N/2-1 f=n*fs/N也可以表示为f=linspace(-fs/2,fs/2,N); t=n/fs 第一步:做出原信号的频谱函数 注意:用fft函数作频谱分析,得到的是0~fs内的频谱...
  • matlab 巴特沃斯低通滤波器

    万次阅读 2019-10-28 11:06:21
    此处是MATLAB 的代码 wp=2*pi*5000;ws=2*pi*12000;Rp=2;Rs=30; [N,wc]=buttord(wp,ws,Rp,Rs,'s');% s is the anology filter [B,A]=butter(N,wc,'s'); sk=0:511; fk=0:14000/512:14000;wk=2*pi*fk;...p...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,810
精华内容 724
关键字:

巴特沃斯低通滤波器