实验八(窗函数)
- 格式:ppt
- 大小:358.00 KB
- 文档页数:7
窗函数的基本介绍
窗函数是信号处理和时域滤波等应用领域中经常使用的一类函数。
它们的本质是一段有限型的信号,可用来分析信号的时域特性,计算相关性和协方差,从而实现有效的时域滤波,以及广义的系统估计和信号分离。
窗函数有很多种,比如加窗(矩形窗)、Triangular窗、Hann窗、Hamming窗等,在不同场景下选择不同的窗函数,必要时可以综合利用多种窗函数,共同完成信号处理任务。
窗函数最初是由波形采样的要求而被引入的,其用法是为了减少采样不足时产生的波形“非线性”失真的影响。
窗函数也可用于消除信号中的时域非均匀度,改善信号中噪声比率的性能,以及减少抽取信号帧的时域干扰。
窗函数的基本原理是,把信号按时间截断到一定的长度,然后以窗函数为模板乘上一定的系数,从而达到信号变换的目的。
在实现时域滤波的过程中,窗函数也起到抑制时域响应边界波形的作用,有效抑制了滤波器的失真,改善了滤波器的时域性能。
根据使用的不同时域窗函数,可将窗函数分为加窗(矩形窗)、Triangular窗、Hann窗、Hamming窗等几种。
加窗是最简单的一种窗函数,它不具有任何时域特性,但在输出信号上有一定的影响。
它实际上是一个正的宽带,满足条件:w(n)>0,n=[-M,M]。
目录摘要 (I)1.窗函数 (1)2.窗函数的种类 (2)2.1 基本窗函数 (4)2.2 广义余弦窗 (5)3.基于matlab的实现 (9)3.1MATLAB软件简介 (9)3.2各窗函数的图形 (11)3.3各窗函数的幅频特性 (13)4.频谱泄露 (15)4.1频谱泄漏原理 (15)4.2 产生机理 (15)4.3窗函数的频谱泄漏的抑制方法 (16)4.4窗函数的选择 (18)5.实验结果分析 (19)6.心得体会 (20)参考文献 (21)摘要现代图像、语声、数据通信对线性相位的要求是普遍的。
正是此原因,使得具有线性相位的FIR数字滤波器得到大力发展和广泛应用。
在实际进行数字信号处理时,往往需要把信号的观察时间限制在一定的时间间隔内,只需要选择一段时间信号对其进行分析。
这样,取用有限个数据,即将信号数据截断的过程,就等于将信号进行加窗函数操作。
而这样操作以后,常常会发生频谱分量从其正常频谱扩展开来的现象,即所谓的“频谱泄漏”。
当进行离散傅立叶变换时,时域中的截断是必需的,因此泄漏效应也是离散傅立叶变换所固有的,必须进行抑制。
而要对频谱泄漏进行抑制,可以通过窗函数加权抑制DFT的等效滤波器的振幅特性的副瓣,或用窗函数加权使有限长度的输入信号周期延拓后在边界上尽量减少不连续程度的方法实现。
而在后面的FIR滤波器的设计中,为获得有限长单位取样响应,需要用窗函数截断无限长单位取样响应序列。
另外,在功率谱估计中也要遇到窗函数加权问题。
由此可见,窗函数加权技术在数字信号处理中的重要地位。
1.窗函数1.1基本概念在实际进行数字信号处理时,往往需要把信号的观察时间限制在一定的时间间隔内,只需要选择一段时间信号对其进行分析。
这样,取用有限个数据,即将信号数据截断的过程,就等于将信号进行加窗函数操作。
而这样操作以后,常常会发生频谱分量从其正常频谱扩展开来的现象,即所谓的“频谱泄漏”。
当进行离散傅立叶变换时,时域中的截断是必需的,因此泄漏效应也是离散傅立叶变换所固有的,必须进行抑制。
窗函数(window function)窗函数是频谱分析中一个重要的部分,CoCo包含了所有通用的窗函数以及冲击测试中的受迫/指数(force/exponential)窗。
窗函数修正了由于信号的非周期性并减小了频谱中由于泄露而带来的测量不准确性。
快速傅里叶变换假定了时间信号是周期无限的。
但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露。
窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍。
截断效应带来了泄漏,窗函数是为了减小这个截断效应,其设计成一组加权系数。
例如,一个窗函数可以定义为:w(t)=g(t) -T/2<t<T/2w(t)=0 其他g(t)是窗函数,T是窗函数的时间待分析的数据x(t)则表示为:x(t)=w(t)*x(t)'x(t)'表示原始信号x(t)表示待分析信号。
加窗在时域上表现的是点乘,因此在频域上则表现为卷积。
卷积可以被看成是一个平滑的过程。
这个平滑过程可以被看出是由一组具有特定函数形状的滤波器,因此,原始信号中在某一频率点上的能量会结合滤波器的形状表现出来,从而减小泄漏。
基于这个原理,人们通常在时域上直接加窗。
大多数的信号分析仪一般使用矩形窗(rectangular),汉宁(hann),flattop和其他的一些窗函数。
矩形窗函数:w(k)=1汉宁窗:w(k)=0.5*(1-cos(2*pi*k/(N-1))) 0<=k<=N-1由于加窗计算中衰减了原始信号的部分能量,因此对于最后的结果还需要加上修正系数。
在线性谱分析中,一般使用幅度系数(amplitude correction),在功率谱中,一般使用能量系数(energy correction)。
具体请看下以章节。
泄露效应对于简单的信号,比如一个单频率的正弦波,泄露就表现为不在其频率点上仍然会有能量的出现。
离其本身的频率越近的频率,泄露的情况越严重,而离的越远,则情况则会好一些。
4.3 实验原理数字滤波器的设计是数字信号处理中的一个重要内容。
数字滤波器设计包括FIR(有限单位脉冲响应)滤波器与IIR(无限单位脉冲响应)滤波器两种。
与IIR滤波器相比,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。
设FIR滤波器单位脉冲响应h(n)长度为N,其系统函数H(z)为:H(z)是z-1的N-1次多项式,它在z平面上有N-1个零点,原点z=0是N-1阶重极点,因此H(z)是永远稳定的。
稳定和线性相位特性是FIR滤波器突出的优点。
FIR滤波器的设计任务是选择有限长度的h(n)。
使传输函数H( )满足技术要求。
FIR滤波器的设计方法有多种,如窗函数法、频率采样法及其它各种优化设计方法,本实验介绍窗函数法的FIR滤波器设计。
窗函数法是使用矩形窗、三角窗、巴特利特窗、汉明窗、汉宁窗和布莱克曼窗等设计出标准响应的高通、低通、带通和带阻FIR滤波器。
一、firl函数的使用在MA TLAB 下设计标准响应FIR滤波器可使用firl函数。
firl函数以经典方法实现加窗线性相位FIR滤波器设计,它可以设计出标准的低通、带通、高通和带阻滤波器。
firl函数的用法为:b=firl(n,Wn,/ftype/,Window)各个参数的含义如下:b—滤波器系数。
对于一个n阶的FIR滤波器,其n+1个滤波器系数可表示为:b(z)=b(1)+b(2)z-1+…+b(n+1)z-n。
n—滤波器阶数。
Wn—截止频率,0≤Wn≤1,Wn=1对应于采样频率的一半。
当设计带通和带阻滤波器时,Wn=[W1 W2],W1≤ω≤W2。
ftype—当指定ftype时,可设计高通和带阻滤波器。
Ftype=high时,设计高通FIR滤波器;ftype=stop时设计带阻FIR滤波器。
低通和带通FIR滤波器无需输入ftype参数。
Window—窗函数。
窗函数的长度应等于FIR滤波器系数个数,即阶数n+1。
二、窗函数的使用在MA TLAB下,这些窗函数分别为:1.矩形窗:w=boxcar(n),产生一个n点的矩形窗函数。
实验 用窗函数设计FIR 滤波器一、实验目的1、熟悉FIR 滤波器设计的基本方法。
2、熟悉线性相位FIR 滤波器的幅频特性和相位特性。
3、掌握用窗函数设计FIR 数字滤波器的原理及方法,了解各种不同窗函数对滤波器性能的影响。
二、实验原理1、FIR 滤波器的设计 在前面的实验中,我们介绍了IIR 滤波器的设计方法并实践了其中的双线性变换法,IIR 具有许多诱人的特性;但与此同时,也具有一些缺点。
例如:若想利用快速傅立叶变换技术进行快速卷积实现滤波器,则要求单位脉冲响应是有限长的。
此外,IIR 滤波器的优异幅度响应,一般是以相位的非线性为代价的,非线性相位会引起频率色散。
FIR 滤波器具有严格的相位特性,这对于许多信号的处理和数据传输是很重要的。
目前FIR 滤波器的设计方法主要有三种:窗函数法、频率采样法和切比雪夫等波纹逼近的最优化设计方法。
窗函数法比较简单,可应用现成的窗函数公式,在技术指标要求不高的时候是比较灵活方便的。
它是从时域出发,用一个窗函数截取理想的[]d h n 得到[]h n ,以有限长序列[]h n 近似理想的[]d h n ;如果从频域出发,用理想的[]j d h e ω在单位圆上等角度取样得到[]H k ,根据[]H k 得到[]H z 将逼近理想的[]d h z ,这就是频率采样法。
2 、窗函数设计法同其他的数字滤波器的设计方法一样,用窗函数设计滤波器也是首先要对滤波器提出性能指标。
一般是给定一个理想的频率响应[]j d H e ω,使所设计的FIR 滤波器的频率响应[]j H e ω去逼近所要求的理性的滤波器的响应[]j d H e ω。
窗函数法设计的任务在于寻找一个可实现(有限长单位脉冲响应)的传递函数1()[]N j j nn H e h n e ωω--==∑ (4.1)去逼近[]j d H e ω。
我们知道,一个理想的频率响应[]j d H e ω的傅立叶反变换201[]()2j j n d d h n H e e d πωωωπ=⎰(4.2)所得到的理想单位脉冲响应[]d h n 往往是一个无限长序列。
窗函数的实现与分析窗函数是一种在数字信号处理中常用的技术,用于对信号进行加窗处理。
加窗处理的目的是在频域上对信号进行平滑,以减少频谱泄漏或者减小窗口边界效应。
窗函数广泛应用于傅里叶变换、滤波器设计、频谱分析、信号重构等领域。
窗函数实现的原理是在信号的时域上对原始信号进行截断,即乘以一个截断窗口函数。
截断窗口函数通常是一个平滑、有限的、具有零边界值的函数。
这样可以使得信号在窗口内部逐渐减小,并在窗口外部变为零,从而达到减少频谱泄漏的效果。
常用的窗函数有矩形窗、汉明窗、汉宁窗、布莱克曼窗、海明窗等。
下面以汉明窗为例,介绍窗函数的实现与分析。
汉明窗是一种常用的窗函数,其定义为:w(n) = 0.54 - 0.46 * cos(2πn/N),其中0 <= n <= N-1假设需要对长度为N的信号x(n)进行加窗处理,实现过程如下:1.初始化窗口长度N。
2.初始化一个长度为N的空数组w,用于存储窗函数的值。
3.对n从0到N-1循环,计算w(n)的值,并存储到w中。
4.对信号x(n)和窗函数w(n)进行逐点乘法运算,得到加窗后的信号y(n)。
y(n)=x(n)*w(n),其中0<=n<=N-15.返回加窗后的信号y(n)。
分析:1.汉明窗的定义表明,在窗口中心附近,窗函数的值最大,逐渐向窗口两端减小,直至为零。
这样可以对信号进行平滑处理,减少频谱泄漏。
2.汉明窗的参数0.54和0.46是经验值,具体值的选择可以根据应用场景进行调整,以达到最佳的效果。
3.窗口长度N的选择也很重要。
如果窗口长度过短,会导致频谱分辨率降低,无法准确表示高频成分;如果窗口长度过长,会导致频域分辨率提高,但时间分辨率降低。
4.窗函数的选择也是根据应用场景的不同而不同。
汉明窗适用于大多数信号分析场景,但对于具有突变的信号,如短时能量突变的语音信号,汉明窗可能会引入较大的误差。
5.窗函数的性能可以通过计算频谱泄漏、主瓣宽度、旁瓣幅度等指标来评估。
窗函数设计法课程设计一、课程目标知识目标:1. 学生能理解窗函数的基本概念,掌握窗函数的种类及其特性;2. 学生能运用窗函数设计法对信号进行处理,并解释处理过程;3. 学生能推导窗函数设计法在频率域和时域的关系。
技能目标:1. 学生能够独立操作窗函数设计软件,进行信号的窗函数设计;2. 学生能够分析实际信号处理问题,选择合适的窗函数,并解释选择理由;3. 学生能够运用窗函数设计法解决实际问题,形成实验报告。
情感态度价值观目标:1. 学生能够认识到窗函数设计法在信号处理领域的重要意义,培养对信号处理技术的兴趣;2. 学生在学习过程中,培养合作意识,学会分享和交流;3. 学生能够通过本课程的学习,培养科学严谨、勤奋钻研的学习态度。
课程性质分析:本课程为电子信息类学科的基础课程,旨在使学生掌握窗函数设计法的基本原理和应用,培养学生解决实际信号处理问题的能力。
学生特点分析:学生处于高年级阶段,已具备一定的信号处理基础,具有较强的逻辑思维能力和实际操作能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,鼓励学生参与课堂讨论,提高学生解决问题的能力。
在教学过程中,关注学生的学习反馈,及时调整教学方法和进度,确保课程目标的实现。
通过本课程的学习,使学生能够达到上述具体的学习成果。
二、教学内容1. 窗函数基本概念及分类:- 窗函数的定义及作用- 常见窗函数(矩形窗、汉明窗、汉宁窗等)的特点及适用场景2. 窗函数设计法原理:- 窗函数设计法的数学表达式- 窗函数设计法在时域和频域的关系- 窗函数设计法的误差分析3. 窗函数设计法应用实例:- 信号处理中的窗函数设计法应用- 不同窗函数设计法在实际信号处理中的性能比较4. 教学实验:- 窗函数设计软件的使用方法- 实际信号处理问题的窗函数设计法应用- 实验报告撰写及成果展示教学大纲安排:1. 引言:窗函数在信号处理中的应用(1课时)2. 窗函数基本概念及分类(2课时)3. 窗函数设计法原理(3课时)4. 窗函数设计法应用实例(2课时)5. 教学实验(4课时)教材章节关联:本教学内容与教材第3章“窗函数设计法”相关,涵盖了教材中3.1节至3.5节的内容。
窗函数的实现及分析窗函数是指将理想的频谱截断成有限的频谱,并对信号进行加权的函数。
在信号处理中,窗函数被广泛应用于频谱分析、滤波器设计、波形合成和信号的时频分析等方面。
其作用是减小频谱泄漏、降低旁瓣干扰和改善频谱估计的准确性。
1. 直接实现法(Direct Approach):直接实现法是指通过直接计算窗函数的定义式来得到窗函数的采样值。
例如,常见的矩形窗函数可以通过以下公式计算得到:w(n)=1,0<=n<Nw(n)=0,其他情况其中,n为窗函数的采样序号,N为窗函数的长度。
类似地,其他窗函数如汉宁窗、汉明窗、布莱克曼窗等也可以通过相应的定义式计算得到。
直接实现法的优点是实现简单,计算速度快。
缺点是窗函数的采样点数需要提前确定,并且无法根据需要动态调整窗函数的长度。
此外,直接实现法在频率分辨率方面相对较差,易产生频谱泄漏现象。
2. 卷积实现法(Convolution Approach):卷积实现法是指利用卷积运算的性质,通过将序列信号和窗函数进行卷积来实现窗函数。
例如,矩形窗可以通过以下卷积运算实现:w(n)=RECT(n)=δ(n)*δ(n)其中,δ(n)为单位脉冲函数。
卷积实现法的优点是可以根据需要动态调整窗函数的长度和形状,适应不同的信号分析要求。
此外,卷积实现法拥有较好的频率分辨率和抗频谱泄漏能力。
对于窗函数的分析,可以从以下几个方面进行:1.主瓣宽度:主瓣宽度是指窗函数的主瓣在频谱中的宽度。
窗函数的主瓣宽度决定了频率分辨率的能力,主瓣宽度越窄,频率分辨率越高。
例如,矩形窗的主瓣宽度较宽,频谱分辨率相对较低;而汉宁窗、汉明窗等窗函数的主瓣宽度相对较窄,频谱分辨率较高。
2.旁瓣干扰:旁瓣干扰是指窗函数在频谱中产生的旁瓣能量。
窗函数的旁瓣干扰会引入频谱泄漏现象,降低频谱估计的准确性。
一般而言,窗函数的旁瓣干扰越低,频谱估计的准确性越高。
常见的窗函数如布莱克曼窗具有较低的旁瓣干扰能力。
窗函数有多种类型,它们各自具有不同的特性和用途。
以下是一些常见的窗函数类型及其特点:
1.矩形窗(Rectangular Window):矩形窗的幅度为常数1,对应于时域上的矩形函
数。
在频域上,矩形窗的频谱为sinc函数,具有宽主瓣和高旁瓣的特性。
矩形窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。
2.汉明窗(Hamming Window):汉明窗是一种常用的窗函数,具有较低的旁瓣衰
减。
它在时域上的形式为0.54 - 0.46*cos(2πn/N),n为时域上的序号,N为窗口长度。
汉明窗在频域上具有较为平坦的幅度响应和较低的旁瓣,适用于需要减少旁瓣干扰的应用场景。
3.海宁窗(Hanning Window):海宁窗是汉明窗的一种特殊形式,也被称为汉宁
窗。
它在时域和频域上的特性与汉明窗类似,但是旁瓣衰减更快。
海宁窗在时域上表示为正弦函数和余弦函数的组合,其频谱具有较为尖锐的主瓣和较低的旁瓣。
适用于需要快速衰减旁瓣的应用场景。
4.凯泽窗(Kaiser Window):凯泽窗是一种具有可调参数的窗函数,其旁瓣衰减速
度和主瓣宽度可以根据参数进行调整。
凯泽窗在频域上具有较为尖锐的主瓣和快速衰减的旁瓣,适用于需要灵活控制窗函数特性的应用场景。
这些窗函数类型各有特点,应根据具体应用场景选择适合的窗函数类型。
窗函数公式窗函数公式在信号处理和频谱分析中有着重要的应用。
窗函数是一种对信号进行加权处理的方法,可以改善信号分析的精度和准确性。
常用的窗函数包括矩形窗、汉宁窗、汉明窗、布莱克曼窗等。
窗函数的公式可以表示为:w(n) = { w(n), 0 ≤ n ≤ N-1; 0, 其他情况 }其中,w(n)为窗函数的值,n为窗口中的样本点索引,N为窗口长度。
矩形窗是最简单的窗函数,其公式为:w(n) = 1矩形窗的特点是在窗口内的样本点都被等权重处理,不对信号进行任何加权操作。
这种窗函数在频谱分析中常用于快速傅里叶变换(FFT)等算法中。
汉宁窗是一种常用的平滑窗函数,其公式为:w(n) = 0.5 - 0.5 * cos(2πn/(N-1))汉宁窗的特点是窗口两端的样本点权重较小,逐渐增大到窗口中心,然后再逐渐减小。
这种窗函数能够有效减小频谱泄漏(spectralleakage)现象,提高频谱分析的精度。
汉明窗是汉宁窗的改进版本,其公式为:w(n) = 0.54 - 0.46 * cos(2πn/(N-1))汉明窗在汉宁窗的基础上进一步增加了一项修正系数,使得窗口两端的样本点权重更小,更加平滑。
这种窗函数在频谱分析中应用广泛,能够有效降低频谱泄漏和峰值削弱(peak sidelobe)现象。
布莱克曼窗是一种在频谱分析中经常使用的窗函数,其公式为:w(n) = 0.42 - 0.5 * cos(2πn/(N-1)) + 0.08 * cos(4πn/(N-1))布莱克曼窗在汉明窗的基础上又增加了一项修正系数,使得窗口两端的样本点权重更小,更加平滑。
这种窗函数在频谱分析中能够有效减小频谱泄漏和峰值削弱现象,适用于对频谱分辨率要求较高的场合。
除了以上几种常用的窗函数,还有许多其他类型的窗函数,如升余弦窗、凯泽窗、高斯窗等,它们各自有着不同的特点和适用范围。
在实际应用中,选择合适的窗函数对信号分析结果的准确性和精度有着重要影响。
窗函数(window function)窗函数是频谱分析中一个重要的部分,CoCo包含了所有通用的窗函数以及冲击测试中的受迫/指数(force/exponential)窗。
窗函数修正了由于信号的非周期性并减小了频谱中由于泄露而带来的测量不准确性。
快速傅里叶变换假定了时间信号是周期无限的。
但在分析时,我们往往只截取其中的一部分,因此需要加窗以减小泄露。
窗函数可以加在时域,也可以加在频域上,但在时域上加窗更为普遍。
截断效应带来了泄漏,窗函数是为了减小这个截断效应,其设计成一组加权系数。
例如,一个窗函数可以定义为:w(t)=g(t) -T/2<t<T/2w(t)=0 其他g(t)是窗函数,T是窗函数的时间待分析的数据x(t)则表示为:x(t)=w(t)*x(t)'x(t)'表示原始信号x(t)表示待分析信号。
加窗在时域上表现的是点乘,因此在频域上则表现为卷积。
卷积可以被看成是一个平滑的过程。
这个平滑过程可以被看出是由一组具有特定函数形状的滤波器,因此,原始信号中在某一频率点上的能量会结合滤波器的形状表现出来,从而减小泄漏。
基于这个原理,人们通常在时域上直接加窗。
大多数的信号分析仪一般使用矩形窗(rectangular),汉宁(hann),flattop和其他的一些窗函数。
矩形窗函数:w(k)=1汉宁窗:w(k)=0.5*(1-cos(2*pi*k/(N-1))) 0<=k<=N-1由于加窗计算中衰减了原始信号的部分能量,因此对于最后的结果还需要加上修正系数。
在线性谱分析中,一般使用幅度系数(amplitude correction),在功率谱中,一般使用能量系数(energy correction)。
具体请看下以章节。
泄露效应对于简单的信号,比如一个单频率的正弦波,泄露就表现为不在其频率点上仍然会有能量的出现。
离其本身的频率越近的频率,泄露的情况越严重,而离的越远,则情况则会好一些。
利用窗函数法设计FIR 滤波器一.要求用窗函数法设计线性相位FIR 低通滤波器,通带截止频率0.5 ,阻带频率0.9 ,通带允许的最大衰减5dB ,阻带衰减不小于40dB 。
二. 设计原理1.线性相位FIR 数字滤波器对于长度为N 的h(n),频率响应函数为()()1N jwjw nn H e h n e--==∑ ()()()gj w jwH eH eθω=式中,()gH ω称为相位特性;()w θ为相位特性注意,这里()gH ω不用于|()jw H e |,()gH ω为w 的实函数,可能取负值,而|()jwH e| 总是正值。
线性相位FIR 滤波器是指()w θ是w 的线性函数,即()w θτω=- τ为常数 ① 如果 满足下式:()0w θθτω=- 0θ是起始相位 ②严格地说,此时 不具有线性相位特性,但以上两情况都满足群延时是一个常数,即()d d θωτω-=也称这种情况为线性相位。
一般称满足①式是第一类线性相位;满足②式为第二类线性相位。
是第二类线性相位特性常用的情况。
2.窗函数设计原理设数字滤波器的传输函数为()j H e ω,()dh n 是与其对应的单位脉冲响应,()H z为系统函数。
()()1N jwjw nn H eh n e--==∑ ①()()12d jwjw nh n H eed ππωπ-=⎰ ②()()1N nn H z h n z ---=∑ ③一般说来,()d h n 是无限长的,需要求对()j H e ω的一个逼近。
采用窗函数设计法时,可通过对理想滤波器的单位采样响应加窗设计滤波器()()()d H n n h n ω=④其中, ()n ω是一个长度有限的窗,在区间0 ≤ n ≤ N 外值为0 ,且关于中间点对称()()1n N n ωω=--⑤频率响应根据式3-5 ,由卷积定理得出()()()12d j j i H eH ee ωωωωπ=∙ ⑥理想的频率响应被窗函数的离散时间傅立叶变换()i e ωω “平滑”了。
数字信号处理中通常是取其有限的时间片段进行分析,而不是对无限长的信号进行测量和运算。
具体做法是从信号中截取一个时间片段,具体做法是从信号中截取一个时间片段,然后对信号进行傅里叶然后对信号进行傅里叶变换、变换、相关分析等数学处理。
相关分析等数学处理。
相关分析等数学处理。
信号的截断产生了能量泄漏,信号的截断产生了能量泄漏,信号的截断产生了能量泄漏,而用而用FFT 算法计算频谱又产生了栅栏效应,从原理上讲这两种误差都是不能消除的。
从原理上讲这两种误差都是不能消除的。
在在FFT 分析中为了减少或消除频谱能量泄漏及栅栏效应,可采用不同的截取函数对信号进行截短,截短函数称为窗函数,简称为窗。
截短函数称为窗函数,简称为窗。
泄漏与窗函数频谱的两侧旁瓣有关,泄漏与窗函数频谱的两侧旁瓣有关,对于窗函数的选用总的原则是,对于窗函数的选用总的原则是,对于窗函数的选用总的原则是,要从保持最要从保持最大信息和消除旁瓣的综合效果出发来考虑问题,尽可能使窗函数频谱中的主瓣宽度应尽量窄,以获得较陡的过渡带;旁瓣衰减应尽量大,以提高阻带的衰减,但通常都不能同时满足这两个要求。
通常都不能同时满足这两个要求。
频谱中的如果两侧瓣的高度趋于零,频谱中的如果两侧瓣的高度趋于零,频谱中的如果两侧瓣的高度趋于零,而使能量而使能量相对集中在主瓣,就可以较为接近于真实的频谱。
就可以较为接近于真实的频谱。
不同的窗函数对信号频谱的影不同的窗函数对信号频谱的影响是不一样的,响是不一样的,这主要是因为不同的窗函数,这主要是因为不同的窗函数,这主要是因为不同的窗函数,产生泄漏的大小不一样,产生泄漏的大小不一样,产生泄漏的大小不一样,频率分辨频率分辨能力也不一样。
信号的加窗处理,重要的问题是在于根据信号的性质和研究目的来选用窗函数。
图1是几种常用的窗函数的时域和频域波形,其中矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低,如果仅要求精确读出主瓣频率,而不考虑幅值精度,而不考虑幅值精度,则可选用矩形窗,则可选用矩形窗,则可选用矩形窗,例如测量物体的自振频率等;例如测量物体的自振频率等;例如测量物体的自振频率等;布莱克曼窗布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比。
窗函数的C语⾔实现⼀般的讲数字信号处理的书中都会提到窗函数。
⼤多数只会提及其中的⼏种。
这⾥我把这些窗都⽤C语⾔实现了⼀下,都不复杂,但如果要⾃⼰去弄也挺费时间。
所有函数都⽤Matlab验证了。
包括以下窗:1/*窗类型*/2 typedef enum3 {4 Bartlett = 0,5 BartLettHann,6 BlackMan,7 BlackManHarris,8 Bohman,9 Chebyshev,10 FlatTop,11 Gaussian,12 Hamming,13 Hann,14 Kaiser,15 Nuttal,16 Parzen,17 Rectangular,18 Taylor,19 Triangular,20 Tukey21 }winType;别的不多说了,直接上⼲货。
1/*2 *file WindowFunction.h3 *author Vincent Cui4 *e-mail whcui1987@5 *version 0.36 *data 31-Oct-20147 *brief 各种窗函数的C语⾔实现8*/91011 #ifndef _WINDOWFUNCTION_H_12#define _WINDOWFUNCTION_H_1314 #include "GeneralConfig.h"1516#define BESSELI_K_LENGTH 101718#define FLATTOPWIN_A0 0.21557899519#define FLATTOPWIN_A1 0.4166315820#define FLATTOPWIN_A2 0.27726315821#define FLATTOPWIN_A3 0.08357894722#define FLATTOPWIN_A4 0.0069473682324#define NUTTALL_A0 0.363581925#define NUTTALL_A1 0.489177526#define NUTTALL_A2 0.136599527#define NUTTALL_A3 0.01064112829#define BLACKMANHARRIS_A0 0.3587530#define BLACKMANHARRIS_A1 0.4882931#define BLACKMANHARRIS_A2 0.1412832#define BLACKMANHARRIS_A3 0.0116833343536 dspErrorStatus taylorWin(dspUint_16 N, dspUint_16 nbar, dspDouble sll, dspDouble **w);37 dspErrorStatus triangularWin(dspUint_16 N, dspDouble **w);38 dspErrorStatus tukeyWin(dspUint_16 N, dspDouble r, dspDouble **w);39 dspErrorStatus bartlettWin(dspUint_16 N, dspDouble **w);40 dspErrorStatus bartLettHannWin(dspUint_16 N, dspDouble **w);41 dspErrorStatus blackManWin(dspUint_16 N, dspDouble **w);42 dspErrorStatus blackManHarrisWin(dspUint_16 N, dspDouble **w);43 dspErrorStatus bohmanWin(dspUint_16 N, dspDouble **w);44 dspErrorStatus chebyshevWin(dspUint_16 N, dspDouble r, dspDouble **w);45 dspErrorStatus flatTopWin(dspUint_16 N, dspDouble **w);46 dspErrorStatus gaussianWin(dspUint_16 N, dspDouble alpha, dspDouble **w);47 dspErrorStatus hammingWin(dspUint_16 N, dspDouble **w);48 dspErrorStatus hannWin(dspUint_16 N, dspDouble **w);49 dspErrorStatus kaiserWin(dspUint_16 N, dspDouble beta, dspDouble **w);50 dspErrorStatus nuttalWin(dspUint_16 N, dspDouble **w);51 dspErrorStatus parzenWin(dspUint_16 N, dspDouble **w);52 dspErrorStatus rectangularWin(dspUint_16 N, dspDouble **w);53545556#endifWindowFunction.h1/*2 *file WindowFunction.c3 *author Vincent Cui4 *e-mail whcui1987@5 *version 0.36 *data 31-Oct-20147 *brief 各种窗函数的C语⾔实现8*/91011 #include "WindowFunction.h"12 #include "GeneralConfig.h"13 #include "MathReplenish.h"14 #include "math.h"15 #include <stdlib.h>16 #include <stdio.h>17 #include <string.h>1819/*函数名:taylorWin20 *说明:计算泰勒窗。
实验八过程与函数一、实验目的1.能理解Sub子程序、Function函数。
2.能用Sub子程序、Function函数编写简单的程序。
二、实验内容例1:设计一个简单的VB程序,要求输出结果如图所示。
(1)创建工程。
(2)建立用户界面,在窗体上添加一个按钮。
(3)双击按钮控件,切换到代码设计窗口,添加程序代码如下:(4)调试运行程序。
(5)请修改程序,仍使用Sub子程序输出如图2所示程序。
运行成功后,保存结果到练习文件夹中的vb8-1文件夹。
图1 图2例2:设计一个简单的VB程序,要求输出结果如图3所示。
(1)创建工程。
(2)建立用户界面,在窗体上添加一个按钮。
(3)双击按钮控件,切换到代码设计窗口,添加程序代码如下:(4)调试运行程序。
(5)请修改程序,仍使用Function函数输出如图4所示程序。
运行成功后,保存结果到练习文件夹中的vb8-2文件夹。
图3 图4例3:设计一个简单的VB程序,要求输出2~100之间所有的素数。
自定义子函数SuShu 用于判断一个整数是不是素数。
运行成功后,保存结果到练习文件夹中的vb8-3文件夹。
例4:执行下列程序,思考两个变量的显示结果为何不同。
完成后保存结果到练习文件夹中的vb8-4文件夹。
三思考题1.已知三角形面积的计算公式是s=Sqr(p*(p-a)*(p-b)*(p-c)),其中p=(a+b+c)/2 。
要求写成自定义函数形式用于计算三角形面积。
程序保存到练习文件夹中的vb8-5文件夹。
在主程序中能检查输入的a、b、c值是否满足两边之和大于第三边的三角形成立条件。
如果不成立,则提示重新输入。
提示:Private Function mj(a As Single,b As Single,c As Single)。