一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种单音信号的检测方法与流程

2021-07-16 18:36:00 来源:中国专利 TAG:信号处理 单音 检测方法 信号


1.本发明涉及一种单音信号的检测方法,属于信号处理技术领域。


背景技术:

2.由于非整周期截断和非同步采样会导致采用fft进行谐波分析时产生频谱泄露和栅栏效应。针对fft算法的不足,通常采用时域加窗函数、频域谱线插值的双谱线加窗插值方法提高fft算法的精度,双谱线加窗插值算法首先对信号进行时域加窗操作,如常用的hanning窗、hamming窗、blackman

harris窗、nuttall窗等,再通过fft得到信号的频域表示,找出包含目标频率的一段频段,求出这一频段内的最大峰值和次峰值,进而对最大峰值和次峰值进行多项式拟合求出频率和幅值修正系数,这类方法可有效提高谐波的幅值和频率估计精度。
3.但这些常用的窗函数参数固定,不能动态调整窗函数的旁瓣高度和主瓣宽度,适用范围较窄。双谱线插值算法利用fft计算包含目标频率的频段内的最大峰值和次峰值,当存在与目标频率接近的大单音时,最大峰值与次峰值频率区间不一定包含目标频率,造成单音检测错误,此外,使用基2fft得到信号的频域信息,需要存储所有的输入数据和旋转因子,数据的长度也要限制为2的整次幂,当数据量较大时,不利于在嵌入式系统上的实时检测。


技术实现要素:

4.本发明的目的是提供一种单音信号的检测方法,以解决目前单音信号检测过程存在的准确性低、实时性差的问题。
5.本发明为解决上述技术问题而提供一种单音信号的检测方法,该检测方法包括以下步骤:
6.1)按照采样频率对待测信号进行模数转换,按照采样点数对模数转换后的信号进行截断操作,得到采样值序列;
7.2)根据采样频率和采样点数确定频率分辨率,利用频率分辨率确定目标频率所在的最小频率区间,以此确定距离目标频点最近的左边频点和右边频点;
8.3)对采样值序列进行kaiser窗处理,对kaiser窗处理后的采样值序列通过goertzel算法计算出左边频点和右边频点的幅值;
9.4)利用左边频点和右边频点的幅值进行双谱线插值得到目标频率的频率和幅值修正系数,以此确定待测信号的频率和幅值。
10.本发明利用频率分辨率得到包含目标频率的最小频率区间,利用最小频率区间的左右边界的幅值进行插值计算,可降低频率接近的大单音存在的影响;本发明利用参数可调的kaiser窗函数,可自由选择主瓣宽度和旁瓣高度之间的比重,对信号加权更加灵活;本发明利用goertzel算法计算频点的幅值,不需要存储所有的输入数据,存储的系数为一个,对数据的长度没有限制,能够进行实时计算。
11.进一步地,所述距离目标频点最近的左边频点和右边频点分别为:
[0012][0013][0014]
其中,k1为左边频点,k2为右边频点,f0为目标频率,f
s
为采样频率,m为采样点数,floor(
·
)表示对结果下取整,round(
·
)表示四舍五入。
[0015]
进一步地,为准确计算两个频点处的幅值,左边频点和右边频点幅值的计算公式为:
[0016][0017][0018][0019][0020]
其中y1为左边频点k1的幅值,y2为右边频点k2的幅值,m为采样点数,x(n)为采样值序列,win(n)为kaiser窗函数。
[0021]
进一步地,为准确、快速地确定待测信号的幅值和频率,所述步骤4)中待测信号的频率和幅值的确定过程如下:
[0022]
a.对所述采样值序列进行加上kaiser窗,并进行傅里叶变换,得到加窗后的信号频谱x(k
·
δf):
[0023][0024]
其中,x(n)为采样值序列,win(n)为kaiser窗函数,为kaiser窗函数的傅立叶变换结果;
[0025]
b.根据左边频点和右边频点以及左边频点和右边频点的幅值建立第一辅助参数和第二辅助参数,其中第一辅助参数为α,第二辅助参数为beta,α=k0‑
k1‑
0.5,beta=(y2‑
y1)/(y2 y1);
[0026]
c.根据加窗后的信号频谱x(k
·
δf)确定左边频点和右边频点的幅值,确定第二辅助参数,建立第二辅助参数与第一辅助参数之间的函数关系,并求解出反函数;
[0027]
d.利用步骤3)得到左边频点和右边频点的幅值确定出第二辅助参数,将得到辅助参数带入到所述反函数中计算出第一辅助参数,根据得到的第一辅助参数确定待测信号的频率和幅值。
[0028]
进一步地,所述步骤c确定过程为:
[0029]
a.根据加窗后的信号频谱x(k
·
δf)确定左边频点和右边频点的幅值分别为:
[0030]
y1=|x(k1·
δf)|
[0031]
y2=|x(k2·
δf)|
[0032]
b.根据步骤a得到的幅值计算第二辅助参数beta:
[0033][0034]
根据第一辅助参数和目标频点、左边频点和右边频点之间的关系,将其中的频点用第一辅助参数表征,建立第二辅助参数与第一辅助参数之间的函数关系为:
[0035][0036]
c.将α在[

0.5,0.5]内以设定间隔进行取值,且α≠
±
0.5,β=πε,可得到一系列beta的值,将对应的α和beta调用matlab中polyfit(
·
)函数进行多项式拟合,可求出反函数α=f
‑1(beta)。
[0037]
进一步地,所述步骤d中得到的待测信号的频率为:
[0038]
f0=(α k2‑
0.5)*f
s
/m
[0039]
其中f0为待测信号的目标频率,f
s
为采样频率,α为第一辅助参数,k2为目标频率的右边频点,m为采样点数。
[0040]
进一步地,所述步骤d中得到的待测信号的幅值为:
[0041][0042]
其中a0为待测信号的幅值,a1和a2分别为左边频点信号的权重和右边频点信号的权重。
附图说明
[0043]
图1是本发明单音信号检测方法的流程图。
具体实施方式
[0044]
下面结合附图对本发明的具体实施方式作进一步地说明。
[0045]
本发明首先利用参数可调的kaiser窗函数,可自由选择主瓣宽度和旁瓣高度之间的比重,对信号加权更加灵活,可以满足不同的设计要求;同时利用频率分辨率得到包含目标频率的最小频率区间,利用最小频率区间的左右边界的幅值进行插值计算,可降低频率接近的大单音存在的影响。该方法的具体实现流程如图1所示,具体实现步骤如下。
[0046]
1.获取被测信号,并对被测信号进行模数转换,以得到m点采样值序列。
[0047]
本发明按照设定的采样频率对被测信号进行模数转换,并根据采样点数m对模数转换后的被测信号进行截断操作,得到了m点采样值序列,为确保后续信号检测的准确性,还需要通过低通滤波器对m点采样值序列进行高频噪声过滤,将过滤后的信号记为x(n)。
[0048]
2.根据采样频率和采样点数计算频率分辨率,利用频率分辨率确定包含目标频率的最小频率区间对应的频点。
[0049]
频率分辨率为采样频率和采样点数的比值,若采样频率为f
s
,采样点数为m,则频
率分辨率δf为:
[0050][0051]
目标频率f0=k0·
δf一般很难正好位于离散谱线频点上,即k0不是整数。但依据频率分辨率计可算出目标频率f0所在的最小频率区间为[f1,f2],假设频率f1对应的频点为k1,频率f2对应的频点为k2,频点k1和k2是距离目标频点k0最近的离散频点,0≤k0‑
k1≤1且0≤k2‑
k0≤1,k1≤k0≤k2,k1和k2的具体计算公式如下:
[0052][0053][0054]
其中floor(
·
)表示对结果下取整,round(
·
)表示四舍五入。
[0055]
3.利用goertzel算法计算出两个频点的幅值。
[0056]
本发明对m点采样值序列x(n)添加kaiser窗,将kaiser窗函数与m点输入数据进行一一对应相乘,kaiser窗函数的表达式如下:
[0057][0058]
式中,参数β用来调节窗函数的旁瓣衰减速度,β值越大,旁瓣衰减的速度越快,i0(β)是第一类变形零阶贝塞尔函数,表达式如下:
[0059][0060]
其中,k通常取15~25,为了后面方便进行公式推导,令β=πε,对kaiser窗函数win(n)进行dft,可得到对应的频谱函数:
[0061][0062]
加窗处理后计算频点k1和k2的幅值y1和y2:
[0063][0064][0065]
当n=1时,都为0,对上述公式循环计算m次,当得到时,输出该4个值,利用如下公式计算频点k1和k2的幅值y1和y2。
[0066][0067][0068]
4.根据得到的频点k1和k2的幅值对待测信号x(n)进行双谱线插值,以得到目标频
率f0的频率和幅值修正系数α。
[0069]
对离散信号x(n)加上kaiser窗,并进行傅里叶变换,得到加窗后的信号频谱x(k
·
δf):
[0070][0071]
式中:a为信号x(n)的幅值,θ代表初相位。
[0072]
频率f1的频点为k1,有f1=k1·
δf,频率f2的频点为k2,有f2=k2·
δf,满足k1≤k0≤k2=k1 1,引入辅助参数α,满足α=k0‑
k1‑
0.5,且α∈[

0.5,0.5]。依据频点k1和k2的幅值y1和y2,定义参数beta:beta=(y2‑
y1)/(y2 y1)。
[0073]
则频点k1和k2的幅值分别为y1=|x(k1·
δf)|和y2=|x(k2·
δf)|,可知参数beta满足如下表达式:
[0074][0075]
由α=k0‑
k1‑
0.5可知k1=k0‑
α

0.5且k2=k0‑
α 0.5,将窗函数的频谱函数代入上式中,可得到以α为自变量,以beta为因变量的函数关系beta=f(α):
[0076][0077]
将α在[

0.5,0.5]内以间隔0.0001进行取值,且α≠
±
0.5,β=πε=9.9,参数β可根据不同的使用情况进行调整,可得到一系列beta的值,将对应的α和beta调用matlab中的polyfit(beta,a,7)函数进行多项式拟合,可求出反函数α=f
‑1(beta),如下:
[0078]
α=1.690439365*beta 0.159751431*beta3 0.0647023583*beta5 0.0400429215*beta7[0079]
根据参数beta代入上式求得参数α:
[0080][0081]
依据求得参数α,代入如下公式可求得单音的真实频率f0和幅值a0:
[0082]
f0=(α k2‑
0.5)*f
s
/m
[0083][0084]
其中,a1和a2是权重因子,本发明中a1和a2取值为2,当n较大时,上式可进一步化简为:
[0085]
a0=m
‑1(y1 y2)v(α)
[0086][0087]
将α在[

0.5,0.5]内以间隔0.0001进行取值,且α≠
±
0.5,可得到一系列v(α)的值,将对应的α和v(α)调用matlab中的polyfit(α,v(α),7)函数进行多项式拟合,可求出反函数α=g(α)多项式函数,如下:
[0088]
g(α)=2.550719494 1.12315924*α2 0.274367669*α4 0.05362793*a6[0089]
修正的幅值a0如下:
[0090]
a0=m
‑1(y1 y2)g(α)
[0091]
通过上述过程,可以准确得到待测信号的幅值和频率,实现对单音信号的检测。
[0092]
本发明首先对待测信号加kaiser窗处理,根据待测信号的采样点数和采样频率找到待检测信号目标频点的左边和右边的频点,然后针对加kaiser窗处理后的待测信号利用goertzel算法计算左边和右边的频点的幅值,最后运用双谱线插值算法对左频点和右频点的幅值进行插值运算,得到目标频率的频率和幅值修正系数,进而得到正确的频率和幅值,实现对单音信号的检测。根据上述过程可知,本发明利用参数可调的kaiser窗函数,能够自由选择主瓣宽度和旁瓣高度之间的比重,对信号加权更加灵活,可以满足不同的设计要求;本发明采用的算法与现有插值fft算法相比,本发明不采用频段内的最大峰值和次峰值来对目标频率进行修正,而是利用频率分辨率得到包含目标频率的最小频率区间,利用最小频率区间的左右边界的幅值进行插值计算,可降低频率接近的大单音存在的影响;本发明利用goertzel算法计算频点的幅值,不需要存储所有的输入数据,存储的系数为一个,对数据的长度没有限制,能够进行实时计算。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文章

  • 日榜
  • 周榜
  • 月榜