采用窗函数法进行数字信号截短的优化算法
摘 要: 对数字信号进行有限点数的截短采样时,通常会发生频谱泄露。提出一种基于FPGA的矩形窗、海明窗、汉宁窗和布莱克曼窗四个窗函数的改进型信号截短算法方案,并对其资源消耗和运行速度进行优化,从而提高频谱泄露的性能。为了减少系统资源消耗和提高精度,采用了资源共享技术、选择合理的数据位宽以及为CORDIC模块选择合适的迭代次数;为了优化速度,采用了恰当的流水线技术,从而较大提高了处理速度。仿真表明,优化后的系统逻辑资源减少20%~51%,时序约束达到360 MHz,其中的布莱克曼窗对第一级旁瓣衰减达到59.3 dB。 0 引言对一个时域信号进行有限时间片段的分析时,如果对数字信号进行直接截短,就会导致频谱泄露,从而导致信号分析出现差错,影响信号分析的精度,以至难以满足应用要求[1-3]。对此,国内外学者提出了一系列改进数字信号截短的方法。文献[4-5]研究了频谱泄露的原因以及加窗函数后频谱泄露的特性。文献[6]对海明窗(Hamming Window)、汉宁窗(Hanning Window)在信号截短中的时谱特性进行比较分析。文献[7]分析矩形窗(Rectangular Window)、海明窗、汉宁窗和布莱克曼窗(Blackman Window)对截短时域和空域信号产生的影响。然而,这些研究都局限在理论和仿真分析,其对应的方案尚未结合FPGA硬件应用需要。
为了解决工业产品设计中的频谱泄露问题,文中基于FPGA硬件系统,对集成矩形窗、海明窗、汉宁窗和布莱克曼窗四个窗函数的系统进行优化设计,在频谱泄露特性、速度和硬件资源等方面对现有的设计方案进行了较大的优化,从而提高了系统的综合性能。
1 窗函数的设计
该方法的基本思路是:首先利用坐标旋转数字计算(CORDIC)迭代方法产生余弦函数,然后利用式(1)~式(4)分别所表示矩形窗、海明窗、汉宁窗和布莱克曼窗函数实现基于FPGA的矩形窗、海明窗、汉宁窗和布莱克曼窗的信号截短方案。
由式(1)~式(4)可见,为了实现这些窗函数,首先要解决余弦函数中相位的求解,其次计算余弦函数,最后完成加减运算。其中,CORDIC迭代算法提供一种逼近的方法求得余弦值。
限制该算法中的旋转相位θi,使得tanθi=2-i,即θi=tan-12-i。CORDIC迭代可用如式(5)所示的方程组表示:
其中,di=+1,zi≥0;di=-1,zi<0,用于确定旋转方向。依据迭代公式,设计硬件结构,框图如图1所示。
在圆周旋转模式中,i取值越大输出精度越高,令i=n时能满足设计要求,那么经过n次迭代后:
通过设置x0=K总和y0=0就可以计算xn=cosz0和yn=sinz0了,其中,z0为输入相位, K总=cosθ0×cosθ1×…×cosθn。
2 窗函数的优化
2.1 CORDIC迭代参数优化
CORDIC是系统的核心模块,由式(6)可知这是一个迭代的过程,为了使CORDIC算法模块能够辨认并计算本设计的最小刻度相位,同时考虑节省迭代对应的资源开销,最后一次迭代所对应的旋转相位只要满足小于该最小刻度相位即可。约定文中设计的系统采样点数是256点至16 M点之间任意可选,当信号长度N为16 M点时,可获得本设计的最小刻度相位0.000 021 458°。经过式(6)的计算可得,在i=22时,即第22次迭代所对应的旋转相位0.000 013 660°小于最小刻度相位,故将文中方案迭代次数确定为23。
为了将最小刻度相位能够用二进制进行较精确地表示,由相位因子
可知二进制位宽应至少为25位。而CORDIC算法模块的相位输入范围为0~π/2,且输入相位是有符号数。在保证精度的情况下从节省资源的角度出发,CORDIC算法模块将相位位宽确定为24位,输出余弦值的位宽也定为24位。
2.2 窗函数的结构优化
进一步分析式(1)~式(4)四个窗函数的表达式,发现这些表达式具有相同的结构,因此可以将它们合并为一条通用的表达式,如式(7)所示:
不同窗函数对应不同的窗系数A、B、C,各窗函数对应的具体系数由式(1)~式(4)可以得出,在设计时,这些窗系数可由一个两位二进制变量的值来确定。
由于在任一时刻只有一个窗函数在工作。此特点满足了资源共享的条件,因此可以对方案所需的资源进行共享优化,4种窗函数使用相同的CORDIC和乘法器,图2(a)和图2(b)分别为优化前和优化后的电路结构。
从图中可以看出,优化后的结构可以大大减少FPGA内部的硬件消耗。
表1为设计优化前后在FPGA器件中布局布线所消耗的资源情况,可见优化后设计所消耗的各类资源比优化前减少了20%~51%。
2.3 速度的优化设计
整个设计采取了恰当的流水线技术对速度进行优化,其基本思路是:在组合逻辑较长的路径上插入几级寄存器,从而大大提高了数据的吞吐量。经过增加流水线级数的方法,时钟周期比流水线设计前小,从而提高运行速度。图3为迭代过程流水线设计之前和之后的模块图。
对于图3(a)所示的优化前的方案,仅能通过30 MHz的时序约束。假设系统运行于30 MHz的频率下,数据从进入系统到输出结果需要19个时钟周期,即633 ns。而对于图3(b)所示优化后方案,进行流水线设计之后可以通过360 MHz的时序约束,数据从进入系统到输出结果需要42个时钟周期,即117 ns。很明显,经过流水线设计后,系统的运行速度大大提高。此外,流水线设计使系统每个时钟处理一个数据,不用等到一个数据完全输出才进行下一个数据的处理。
3 窗函数对抑制频谱泄漏方案的实现和分析
3.1 系统整体实现
文中窗函数采用点数可调,令信号是长度256点到16 M点动态可调的窗函数控制器,即需要根据不同的信号长度为系统提供相应的相位因子。图4所示为窗函数计算过程的流程图,相位生成器根据FPGA中的主控器MicroBlase传来的相位因子和信号长度两个参数产生相应时刻的相位,然后CORDIC模块根据该相位计算相应的余弦值,接着根据当前窗函数类型选择相应的窗系数并完成窗函数计算,最后利用窗函数结果对输入信号进行加窗处理。
3.2 整体仿真效果和分析
为了分析文中方案对频谱泄露的特性,对文中的窗函数法采样数据的频谱特性进行实验和分析。首先对实验信号y(t)=40×[sin(40πt)+sin(120πt)]进行采样,采样频率为1 000 Hz,采用点数共1 571点,modelsim仿真软件通过读取该文件数据对文中所设计的系统进行仿真并将仿真结果保存在文本文件中,采用仿真进行频谱分析,结果如图5所示。
分析矩形窗、海明窗、汉宁窗和布莱克曼窗的4种情况中旁瓣衰减,它们的第一旁瓣相对于主瓣衰减和主瓣宽度如表2所示。
由频谱图可以看出,对信号加矩形窗(图5(a))处理,有明显的频谱泄露;而对信号加海明窗(图5(b))、汉宁窗(图5(c))或布莱克曼窗(图5(d))处理后,则频谱泄露明显减小。海明窗、汉宁窗和布莱克曼窗主瓣加宽,旁瓣则显著减小。从减小泄漏观点出发,汉宁窗优于矩形窗,布莱克曼窗最好,但主瓣加宽,相当于频率分辨力有所下降。相对而言海明窗加权的系数能使主瓣宽度更小。布莱克曼窗主瓣较宽,旁瓣衰减达到-59.3,频谱泄露最小,幅值识别精度最高,但频率识别精度最低。可见,基于FPGA的窗函数截短,相对于直接截短的方式,采用文中窗函数处理方案,信号的频谱泄露特性得到较好改善。
4 结论
文中所提出的方案对矩形窗、海明窗、汉宁窗和布莱克曼窗进行了算法设计和方案优化。为了优化方案中的资源消耗和提高精度,采用了资源共享技术、选择合理的数据位宽以及为CORDIC模块选择合适的迭代次数;为了优化设计的速度,采用了流水线技术,从而较大提高处理的速度。最后,利用工具软件modelsim对系统进行了仿真,验证了算法对应的系统功能的正确性以及分析了系统的优化性能。
参考文献
[1] 张斌,孔敏,吴从兵.基于窗函数下频谱泄露的研究[J].信息化纵横,2009(11):10-12.
[2] 田园,周勖.窗函数在数字滤波器设计中的应用[J].国外电子测量技术,2013,32(4):25-27.
[3] 郭建涛,刘友安,玉林.基于窗函数设计的跳频信号时域分析[J].计算机应用,2011,31(9):2333-2335.
[4] XUE H,YANG R.Optimal interpolating windowed discrete Fourier transform algorithms for harmonic analysis in power systems[J].IEE Proceedings of Generation,Transmission and Distribution,2003,150(5):583-587.
[5] RELJIN I S,RELJIN B D.Extremely flat-top windows for harmonic analysis[J].IEEE Trans.on Instrumentation and Measurement.2007,56(3):1025-1041.
[6] DAVID C.Swanson.Precision spectral peak frequency measurement using a window leakage ratio function.Mechanical Systems and Signal Processing Volumes 54-55,March 2015:1-15.
[7] RAPUANO S,HARRIS F J.An introduction to FFT and time domain windows[J].IEEE instrumentation & Measurcmcnt Magazine,2007,10(6):32-44.
窗函数的基本概念:理解数字信号处理入门教程
数字信号处理中的窗函数,是一种非常重要的信号加权处理方法,它能够在时域和频域上对原始信号进行截断或调制。窗函数应用广泛,不仅在语音信号处理领域,还被广泛应用于图像处理、光学、雷达等领域。本文将全面介绍窗函数的基本概念、各种类型以及其在语音信号处理中的应用实例,希望读者通过本文的阅读,更好地理解窗函数的作用,并能够运用窗函数来提升信号处理效果。
01基本概念
1.1 时域窗函数
在时域上,窗函数可以看成是一个定义在有限时间区间上的加权函数,它在时域上对原始信号进行截断或调制。通常来说,时域窗函数都具有对称性,比如矩形窗、汉宁窗、汉明窗、布莱克曼窗等。
以汉明窗为例,它是一种典型的对称窗函数。在时域和频域上都有着良好的表现。其数学表达式为:
其中 n 表示离散时间轴的序号,N 是时域窗函数的长度。
对于汉明窗的应用举例,我们可以考虑一个音频文件,我们想要对它进行频谱分析,获取其所包含的各个频段信息,这就需要使用离散傅里叶变换(DFT)或快速傅里叶变换(FFT)。但傅里叶变换的一个问题是,它对频域波形的剪切效应非常敏感,对于信号的分辨率和精度会产生一定的影响。如下,我们生成了一个测试信号,并应用了汉宁窗。然后,我们计算了DFT并绘制了频谱图。可以看到,在应用汉宁窗之后,信号的频率分量得到了更好的分辨率和精度。
为解决这一问题,我们可以使用汉明窗对原始音频信号进行加权处理。具体来说,就是将汉明窗的大小适当调整,覆盖到音频数据的每个小片段上,并将其与原始音频数据进行点乘操作。这样做可以将被处理信号在时域上变得平滑,在一定程度上减少谱泄漏现象。下面是汉明窗的频域和时域响应图:
1.2 频域窗函数
频域窗函数是在频域上加窗,使得被处理信号只在特定频段内有效。通过乘以频域窗函数,可以有效降低傅里叶变换后频域波形的剪切效应。常见的频域窗函数包括帕特森窗和凯泽窗等。
以帕特森窗为例,它是一种能够提高频域分辨率的窗函数,通常用于声学信号处理领域。该窗函数在低频段降低了加权,而在高频段增加了加权,使得信号的高频部分更加突出。
在实际应用中,频域窗函数经常被用于不同领域和场合的声音信号处理,如噪音去除、语音增强、人声识别等。下面是帕特森窗的时间和频率特性图:
02 窗函数的发现与发展历程
窗函数的概念可以追溯到19世纪初。1822年,法国物理学家西芒(Simeon Denis Poisson)提出了第一个关于窗函数的定义,他将其作为一种用于处理周期性信号的工具。
在20世纪初,人们开始深入研究傅里叶分析,并开始意识到窗函数在谱估计中的重要性。1926年,德国数学家汉瑟·瓦尔德(Hans Wilhelm Waldbauer)首次将窗函数引入到谱估计中,并提出使用矩形窗进行处理。随后,美国数学家库克林(Kaiser Bode Culler)和弗林特(Flint William Henry)分别提出了汉宁窗和布莱克曼窗等更多类型的窗函数,并应用于实际信号处理中。
随着数字技术的发展,窗函数在数字信号处理中得到了广泛应用。1980年,德国学者福克(Hans-Jürgen Von Martens)将帕特森窗引入到语音信号处理领域,提高了语音信号的频域分辨率。随后,美国学者法里德·史密斯(Fredric J. Harris)提出了哈尼窗和布莱曼-Harris窗,并成功应用于数字信号处理领域。
总之,窗函数的发现和演变历程是一个不断探索和创新的过程,它伴随着数字信号处理技术的发展而不断完善,为数字信号分析和处理提供了强有力的工具。
03 应用实例
语音信号是一种非常重要的信号类型,它包含了人类日常生活中的各种信息,如语言内容、说话人的情感以及口音等。窗函数在语音信号处理中有着广泛的应用,可以用于维护语音质量和提高信号分辨率。
以汉明窗为例,它在语音信号处理中的应用非常广泛,可用于对语音信号进行预加重、分帧分析、窗函数加权、倒谱法等等。例如,在语音识别领域中,我们需要对语音信号进行分帧分析,将长时信号分成若干小区间,并对每个区间进行分析和处理。如下,我们知道,语音信号中的每一帧通常包含20-40ms的语音信号,并且需要将每一帧信号进行FFT变换得到频谱图以进行信号分析。但是,这样做会导致频率泄漏问题和频谱分辨率不足问题。为了解决这个问题,需要将每一帧信号乘以一个窗函数进行预处理,然后再进行FFT变换。窗函数可以通过控制频谱波形的“剪切”效应来改善频域分辨率。
这个过程其实就可以使用汉明窗来实现。具体来说,我们可以将汉明窗的大小调整成一定的长度,覆盖到语音数据的每个时间片段上,然后将其与原始语音数据进行点乘操作。如此一来,就可以将被处理信号在时域上变得平滑,在一定程度上减小频域波形剪切效应。
除了汉明窗,还有其他的窗函数也被广泛应用于语音信号的分析和处理,如矩形窗、汉宁窗、布莱克曼窗等。它们在语音识别、语音增强、语音编解码、声源定位等方面都发挥着重要作用。
03 结语
本文详细介绍了窗函数在数字信号处理中的基本概念和各种类型,包括时域窗函数和频域窗函数,并重点阐述了它们在语音信号处理领域的应用实例。希望通过本篇文章的阅读,读者可以进一步理解窗函数的重要性和实际应用。同时,我们也需要注意,窗函数并非完美的处理方法,需要根据实际情况进行选择和优化。
相关问答
数字信号已知F(S)=12(S+8)/S(S+4)(S+12),求原函数f(t)_作业帮
[最佳回答]设F(s)=A/s+B/(s+4)+C/(s+12)则:A=sF(s)|s=0=12(0+8)/(0+4)(0+12)=2B=(s+4)F(s)|s=-4=12(-4+8)/(-4)(-4+12)=-...
信号与系统中函数值怎么算?
设系统的输入、输出分别为:x(t)、y(t)它们的F氏变换分别为:X(jw)、Y(jw)那么:Y(jw)=H(jw)X(jw)(1)输出的傅立叶谱等于频响函数乘以输入的傅氏谱;H(j...
连续出现信号只保留第一次出现信号怎么写函数?
要实现连续出现信号只保留第一次出现信号,可以编写一个函数来进行处理。该函数需要记录前一个信号的状态,并将新的信号与前一个信号进行比较。如果新的信号与...
的...已知x(t)=cos[ω0(t-t0)],写出信号的频谱函数X(jω),...
[最佳回答]欧拉公式展开,cos[ω0t]=1/2[e^(jω0t)+e^(-jω0t)],傅立叶级数为a1=1/2,a2=-1/2,周期函数X(jω)=∑2πak*δ(ω-kω0),再算上时移的t0,即π[δ(...
数字合成函数信号发生器使用方法?
数字合成函数信号发生器(DigitalSynthesizedFunctionSignalGenerator)是一种能够生成各种频率、波形和调制方式的信号源,通常用于电子实验室、教育机构和...
信号与系统自相关函数公式?
计算公式:R(τ)=E[x(t)x(t+τ)],E为集合平均符号特点:在0点的值最大;之后变小,若信号中有周期成分,则自相关函数也有周期性,且不衰减!如:正弦信...
信号与系统单边指数信号频谱函数计算?
这个频谱函数是以分数的形式给出,所以幅度=分子幅度/分母幅度,相位=分子相位-分母相位1的幅度是1,相位是0α+jw的幅度是根号α平法加w平方,相位是arctan(w...
信号的自相关函数计算方法?
计算公式:R(τ)=E[x(t)x(t+τ)],E为集合平均符号特点:在0点的值最大;之后变小,若信号中有周期成分,则自相关函数也有周期性,且不衰减!如:正弦信...
如何根据函数式判断信号类型?
这要看你的信号分什么离散了.离散信号有时间上离散和幅度上离散,但从时间上离散还不能判断是不是数字信号.只有在两者都是离散的情况下才能算数字信号.这要看...
f20合成函数信号发生器使用方法?
一、开启电源,开关指示灯显示。二、选择合适的信号输出形式(方波或正弦波)。三、选择所需信号的频率范围,按下相应的档级开关,适当调节微调器,此时微调器...