HI,欢迎来到起点商标网!
24小时服务QQ:2880605093

一种语音分帧处理电路的制作方法

2021-01-28 15:01:47|244|起点商标网
一种语音分帧处理电路的制作方法

本实用新型涉及数字电路技术领域,具体涉及一种语音分帧处理电路。



背景技术:

语音端点检测(voiceactivedetect)是语音信号处理过程中非常重要的一步,它的准确性直接影响到语音信号处理的速度和结果。而语音端点检测的处理过程包括预加重、分帧、加窗、特征值提取等流程,其中分帧模块是端点检测的必备模块,分帧处理准确性将直接影响后面一系列处理,且直接影响语音检测结果的准确性。现有技术中关于分帧的数字电路设计方法,基本只有同步fifo分帧、异步fifo分帧、ram存储数据等实现方法,而对于fifo也至少需要使用分帧帧长(如256)深度的2块fifo进行分时复用实现分帧,对于ram也是占用的存储空间较多,地址控制信号等更多,如果涉及到异步设计则会使电路设计更加复杂。



技术实现要素:

为解决上述问题,本实用新型提供了一种语音分帧处理电路,可以减少电路设计复杂度,简化电路结构,降低成本,处理方法简单高效。本实用新型的具体技术方案如下:

一种语音分帧处理电路,包括:数据缓冲器,包括数据输入端、输入信号控制端、写地址信号端、读地址信号端和数据输出端;所述输入信号控制端用于接收外部的输入控制信号,所述数据输入端用于在所述数据缓冲器接收到输入控制信号后,接收外部的待分帧数据,所述数据缓冲器在所述写地址信号端接收到写地址控制信号后,给接收到的待分帧数据分配存储地址,并在所述读地址信号端接收到读地址控制信号后,读取相应存储地址中的待分帧数据作为分帧后的数据输出;写地址控制模块,连接至所述数据缓冲器的写地址信号端,用于输出写地址控制信号至所述数据缓冲器;读地址控制模块,连接至所述数据缓冲器的读地址信号端,用于输出读地址控制信号至所述数据缓冲器;所述数据缓冲器、写地址控制模块和读地址控制模块基于同步时钟进行工作。

进一步地,所述写地址控制模块包括:第一计数器,所述第一计数器用于在接收到外部的输入控制信号,并在时钟边沿到来时进行计数,在计数的同时向所述数据缓冲器输出写地址控制信号,并在计数达到预设数值时,输出第一信号至所述读地址控制模块。

进一步地,所述读地址控制模块包括:第二计数器,与所述第一计数器连接,用于接收所述第一计数器输出的第一信号,并在接收到所述输入控制信号的高电平后在时钟边沿到来时,对所述第一信号进行计数,并将计数值作为第二信号输出;第三计数器,与所述第一计数器和第二计数器连接,用于在所接收的第一信号和第二信号满足预设条件时,间隔一个时钟信号计数一次,并将计数值作为第三信号输出;第四计数器,与所述第三计数器连接,用于对所述第三计数器的数据进行倒序处理,并输出第四信号;数据选择器,所述数据选择器的输入端分别与第三计数器和第四计数器连接,用于接收所述第三信号和第四信号,所述数据选择器的选择端与所述第二计数器连接,用于接收所述第二信号,所述数据选择器根据所述第二信号选择第三信号或第四信号作为输出连接至数据缓冲器的读地址信号端。

进一步地,所述第一计数器最多能够进行n个数值计数,当第一计数器接收到所述输入控制信号为高电平时,则进行一次加1计数,计数达到n个数值后又重新由0开始计数;所述n为大于1的自然数。

进一步地,所述第三计数器在所接收的第一信号和第二信号满足预设条件时,间隔一个时钟信号计数一次,并将计数值作为第三信号输出,具体包括:当所述第三计数器第二次接收到第二信号,且同时接收到第一信号的高电平时,间隔一个时钟信号计数一次,计数达到n时输出第三信号;当所述第三计数器第三次和第三次以后,每次接收到第二信号,且同时接收到第一信号的高电平时,间隔一个时钟信号计数一次,计数达到n/2时输出第三信号;所述n为大于1的偶数。

进一步地,所述第四计数器对所述第三计数器的数据进行倒序处理,具体包括:所述第四计数器将第三计数器中的低n/2位数据作为高n/2位数据,将第三计数器中的高n/2位数据作为低n/2位数据,形成倒序后的n位数据。

进一步地,所述数据选择器根据所述第二信号选择第三信号或第四信号作为输出连接至数据缓冲器的读地址信号端,具体包括:所述数据选择器判断所接收的第二信号是除1以外的奇数,则选择第四信号作为输出连接至数据缓冲器的读地址信号端;所述数据选择器判断所接收的第二信号是除0以外的偶数,则选择第三信号作为输出连接至数据缓冲器的读地址信号端。

所述语音分帧处理电路,通过写地址控制模块控制数据缓冲器给接收到的待分帧数据分配存储地址,再通过读地址控制模块控制数据缓冲器读取相应存储地址中的待分帧数据作为分帧后的数据输出,只需要一个写地址控制模块和一个读地址控制模块,基于同步时钟配合数据缓冲器在时钟边沿到来时进行数据存取,就可以简单快速地实现语音数据的分帧处理,所采用的电路设计简单,硬件成本低,相应的处理方法简单高效,适于普遍推广应用。

附图说明

图1为本实用新型实施例所述语音分帧处理电路的电路示意框图;

图2为本实用新型实施例所述语音分帧处理电路的电路原理示意图。

图3为本实用新型实施例所述语音分帧处理方法的流程示意图。

图4为本实用新型实施例所述待分帧数据的数据结构示意图。

具体实施方式

下面将结合本实用新型实施例中的附图,对本实用新型实施例中的技术方案进行详细描述。应当理解,下面所描述的具体实施例仅用于解释本实用新型,并不用于限定本实用新型。

在下面的描述中,给出具体细节以提供对实施例的透彻理解。然而,本领域的普通技术人员将理解,可以在没有某些具体细节的情况下实现相关实施例。例如,为了避免混淆实施例,可以不详细描述公知的电路、结构和方法的具体内容。

以下各实施例所述的外部,是指连接于所述语音分帧处理电路的前端的数字adc模块。本语音分帧处理电路接收来自adc模块的时钟和数据等信号。

如图1所示,一种语音分帧处理电路,包括基于同步时钟进行工作的数据缓冲器buffer、写地址控制模块和读地址控制模块。该电路可以应用于机器人的语音识别和控制,也可以应用于智能手机、平板电脑、智能音箱等智能终端设备,还可以应用于人机对话、早教等需要用到语音识别和控制的其它不同领域。所述电路涉及语音端点检测应用中基于buffer的分帧模块的数字电路硬件实现。所述基于同步时钟进行工作指的是相关电路工作均在同一个工作时钟边沿下进行。

所述数据缓冲器buffer指的是buffer缓冲器,其包括数据输入端data_in、输入信号控制端data_ct、写地址信号端waddr、读地址信号端raddr和数据输出端data_out。所述输入信号控制端data_ct用于接收外部的输入控制信号data_flag。所述数据输入端data_in用于在所述数据缓冲器buffer接收到输入控制信号data_flag后,接收外部的待分帧数据。所述数据缓冲器buffer在所述写地址信号端waddr接收到写地址控制信号后,给接收到的待分帧数据分配存储地址,并在所述读地址信号端raddr接收到读地址控制信号后,读取相应存储地址中的待分帧数据作为分帧后的数据输出。所述写地址控制模块连接至所述数据缓冲器buffer的写地址信号端waddr,用于输出写地址控制信号至所述数据缓冲器buffer。所述读地址控制模块连接至所述数据缓冲器buffer的读地址信号端raddr,用于输出读地址控制信号至所述数据缓冲器buffer。

本实施例所述语音分帧处理电路,通过写地址控制模块控制数据缓冲器buffer给接收到的待分帧数据分配存储地址,再通过读地址控制模块控制数据缓冲器buffer读取相应存储地址中的待分帧数据作为分帧后的数据输出,只需要一个写地址控制模块和一个读地址控制模块,基于同步时钟配合数据缓冲器buffer在时钟边沿到来时进行数据存取,就可以简单快速地实现语音数据的分帧处理,所采用的电路设计简单,硬件成本低,适于普遍推广应用。

作为其中一种实施方式,如图2所示,所述写地址控制模块包括第一计数器fs_cnt。所述第一计数器fs_cnt用于在接收到外部的输入控制信号data_flag,并在时钟边沿到来时进行计数,在计数的同时向所述数据缓冲器buffer输出写地址控制信号,并在计数达到预设数值时,输出第一信号data128_end至所述读地址控制模块。所述预设数值可以根据不同的设计需求进行相应设置,可以设置为64、128、256或者512等数值。

优选的,所述第一计数器fs_cnt最多能够进行n个数值计数,当第一计数器fs_cnt接收到所述输入控制信号data_flag为高电平时,则进行一次加1计数,计数达到n个数值后又重新由0开始计数。所述n为大于1的自然数,具体数值可以根据不同的设计需求进行相应设置,一般可以设置为128、256或者512。

作为其中一种实施方式,如图2所示,所述读地址控制模块包括第二计数器frame_cnt、第三计数器cnt256、第四计数器cnt256_inv和数据选择器mux。所述第二计数器frame_cnt与所述第一计数器fs_cnt连接,用于接收所述第一计数器fs_cnt输出的第一信号data128_end,并在接收到所述输入控制信号data_flag的高电平后在时钟边沿到来时,对所述第一信号data128_end进行计数,并将计数值作为第二信号frame输出。所述第三计数器cnt256分别与所述第一计数器fs_cnt和第二计数器frame_cnt连接,用于在所接收的第一信号data128_end和第二信号frame满足预设条件时,间隔一个时钟信号sys_clk计数一次,并将计数值作为第三信号输出。所述第四计数器cnt256_inv与所述第三计数器cnt256连接,用于对所述第三计数器cnt256的数据进行倒序处理,并输出第四信号。所述倒序处理是指将数据的高位和低位进行对调,比如一共有8个数据,分别为1、2、3、4、5、6、7和8,低四位为1、2、3和4,高四位为5、6、7和8,将这8个数据进行倒序处理后,输出的数据则为5、6、7、8、1、2、3和4。所述数据选择器mux的输入端分别与第三计数器cnt256和第四计数器cnt256_inv连接,用于接收所述第三信号和第四信号,所述数据选择器mux的选择端与所述第二计数器frame_cnt连接,用于接收所述第二信号frame,所述数据选择器mux根据所述第二信号frame选择第三信号或第四信号作为输出连接至数据缓冲器buffer的读地址信号端raddr。

优选的,所述第三计数器cnt256在所接收的第一信号data128_end和第二信号frame满足预设条件时,间隔一个时钟信号sys_clk计数一次,并将计数值作为第三信号输出,具体包括:当所述第三计数器cnt256第二次接收到第二信号frame,且同时接收到第一信号data128_end的高电平时,间隔一个时钟信号sys_clk计数一次,计数达到n时输出第三信号;当所述第三计数器cnt256第三次和第三次以后,每次接收到第二信号frame,且同时接收到第一信号data128_end的高电平时,间隔一个时钟信号sys_clk计数一次,计数达到n/2时输出第三信号。所述n为大于1的偶数。本实施例通过接收第二信号frame的不同情况,对第三信号的输出进行不同的控制,可以保证每次输出的数据都是准确有效的数据,从而提高电路处理数据的高效性和准确性。

优选的,所述第四计数器cnt256_inv对所述第三计数器cnt256的数据进行倒序处理,具体包括:所述第四计数器cnt256_inv将第三计数器cnt256中的低n/2位数据作为高n/2位数据,将第三计数器cnt256中的高n/2位数据作为低n/2位数据,形成倒序后的n位数据。比如n为512时,低n/2位数据是1至256,高n/2位数据是257至512;倒序之后形成的数据为257至512和1至256。

优选的,所述数据选择器mux根据所述第二信号frame选择第三信号或第四信号作为输出连接至数据缓冲器buffer的读地址信号端raddr,具体包括:所述数据选择器mux判断所接收的第二信号frame是除1以外的奇数,则选择第四信号作为输出连接至数据缓冲器buffer的读地址信号端raddr;所述数据选择器mux判断所接收的第二信号frame是除0以外的偶数,则选择第三信号作为输出连接至数据缓冲器buffer的读地址信号端raddr。

如图3所示,一种基于上述各实施例所述电路实现的语音分帧处理方法,包括步骤s1至s3。所述步骤s1中,数据缓冲器buffer根据外部的输入控制信号data_flag,接收待分帧数据。所述步骤s2中,写地址控制模块根据同时接收到的输入控制信号data_flag,输出写地址控制信号至所述数据缓冲器buffer,使数据缓冲器buffer给接收到的待分帧数据分配存储地址。所述步骤s3中,读地址控制模块输出读地址控制信号至所述数据缓冲器buffer,使读取相应存储地址中的待分帧数据作为分帧后的数据输出。本实施例所述语音分帧处理方法,通过写地址控制模块控制数据缓冲器buffer给接收到的待分帧数据分配存储地址,再通过读地址控制模块控制数据缓冲器buffer读取相应存储地址中的待分帧数据作为分帧后的数据输出,从而简单快速地实现语音数据的分帧处理,该处理方法简单高效,所需电路也比较简单,适于普遍推广应用。

作为其中一种实施方式,所述步骤s2具体包括如下步骤s21至s24。所述步骤s21中,第一计数器fs_cnt作为写地址控制模块,在接收到外部的输入控制信号data_flag后进行计数。所述步骤s22中,所述第一计数器fs_cnt在计数的同时向所述数据缓冲器buffer输出写地址控制信号。所述步骤s23中,所述数据缓冲器buffer接收到写地址控制信号的同时,给接收到的待分帧数据分配存储地址。所述步骤s24中,所述第一计数器fs_cnt在计数达到预设数值时,输出第一信号data128_end至所述读地址控制模块。所述预设数值可以根据不同的设计需求进行相应设置,可以设置为64、128、256或者512等数值。

作为其中一种实施方式,所述步骤s3具体包括如下步骤s31至s34。所述步骤s31中,所述读地址控制模块中的第二计数器frame_cnt,接收所述第一计数器fs_cnt输出的第一信号data128_end,并在接收到所述输入控制信号data_flag的高电平时,对所述第一信号data128_end进行计数,并将计数值作为第二信号frame输出。所述步骤s32中,所述读地址控制模块中的第三计数器cnt256,在所接收的第一信号data128_end和第二信号frame满足预设条件时,间隔一个时钟信号sys_clk计数一次,并将计数值作为第三信号输出;同时,所述读地址控制模块中的第四计数器cnt256_inv,对所述第三计数器cnt256的数据进行倒序处理,并输出第四信号。所述步骤s33中,所述读地址控制模块中的数据选择器mux,根据所接收的第二信号frame选择第三信号或第四信号输出至数据缓冲器buffer。所述步骤s34中,所述数据缓冲器buffer读取与第三信号或者第四信号相应的存储地址中的待分帧数据作为分帧后的数据输出。

优选的,步骤s32中所述读地址控制模块中的第三计数器cnt256,在所接收的第一信号data128_end和第二信号frame满足预设条件时,间隔一个时钟信号sys_clk计数一次,并将计数值作为第三信号输出,具体包括如下步骤:当所述第三计数器cnt256第二次接收到第二信号frame,且同时接收到第一信号data128_end的高电平时,间隔一个时钟信号sys_clk计数一次,计数达到n时输出第三信号;当所述第三计数器cnt256第三次和第三次以后,每次接收到第二信号frame,且同时接收到第一信号data128_end的高电平时,间隔一个时钟信号sys_clk计数一次,计数达到n/2时输出第三信号。本实施例通过接收第二信号frame的不同情况,对第三信号的输出进行不同的控制,可以保证每次输出的数据都是准确有效的数据,从而提高电路处理数据的高效性和准确性。

优选的,所述步骤s33具体包括如下步骤:所述数据选择器mux判断所接收的第二信号frame是除1以外的奇数,则选择第四信号作为输出连接至数据缓冲器buffer的读地址信号端raddr;所述数据选择器mux判断所接收的第二信号frame是除0以外的偶数,则选择第三信号作为输出连接至数据缓冲器buffer的读地址信号端raddr。

具体的,以帧长256,帧移128输入数据位宽为16bit为例,对输入数据进行分帧。待分帧数据在audio应用中来自前端模块sigma-deltaadc的输出,参考大部分sigma-deltaadc内部设计,其工作时钟基本是采样率的整数倍,如256或384等倍数关系,只要adc的时钟大于等于256*fs,则均适用,fs为采样率。如图4所示,输入data编号为0,1,2,3…,则data0~data255为第1帧待分帧数据,data128~data383为第2帧待分帧数据,第一帧待分帧数据和第2帧待分帧数据之前有128个帧移的数据重复,后面每帧特点均是如此。

如图1所示,第一计数器fs_cnt用于接收输入控制信号data_flag,并计数数据输入端data_in输入的待分帧数据,如每256个数连续不断的存入数据缓冲器buffer,则数据缓冲器buffer深度是256,宽度是16bit。数据输出端data_out为数据缓冲器buffer输出的分帧后的数据,所述数据输出端data_out是每隔128个数据输入端data_in输入的数据,输出一次256个数据,由于时钟周期是256倍数据速率,因此在128个输入数据缓存后,第129个数据和第130个数据之间的时钟周期必然为256个,可以用来读出数据缓冲器buffer写进去的256个数据值,且不影响下一轮256个数据写入数据缓冲器buffer的操作。第二计数器frame_cnt实质上是对帧的计数,当帧数为第一帧时,数据缓冲器buffer刚好写完128个地址,但是由于编号为128至255的数据还没被写进数据缓冲器buffer,此时数据缓冲器buffer输出的后128个数值为默认值0;当帧数为第二帧时,数据缓冲器buffer刚好被写完256个数据,此时数据缓冲器buffer输出的为输入的全部数据data1-data256。当帧数为第三帧时,数据缓冲器buffer重新写地址0-127,而地址128-255还没被写,此时输出的数据的前128个值为本次数据缓冲器buffer新写入的值data257-data384,但是后128个地址由于没有新写进入的值,如果直接读取该值,将会得到颠倒的数据是data257-data384,data128-data256。所以,当第二信号frame为非1奇数时,需要对输入的数据进行倒序处理,当第二信号frame为非0偶数时,则不需要进行倒序处理。

由于第一帧数据与理论分帧数据并不相同,因此需要对第一帧数据特殊处理。在处理第1帧时,全部输入完256个数据时再读数据缓冲器buffer的值,从第2帧之后,则是每输入128个数据读一次数据缓冲器buffer的值,即可实现图4所示有序的数据输出。

图2所示是以数字电路方式实现的电路结构框图,整个电路使用1个时钟clk=256*fs,输入数据来自sigma-deltaadc,数据进入触发器后产生信号data_flag,data_flag=1表示当前有1个有效数据,且对应一个时钟周期。第一计数器fs_cnt是对data_flag的计数,表示共有多少个有效数据,也是数据缓冲器buffer的写地址,范围为0至255,共256个地址,可写256个数据到数据缓冲器buffer中。第一计数器fs_cnt另外输出data128_end信号,用于对第一帧的特殊处理用,当为第一帧时,需要第一计数器fs_cnt计数到256,data128_end为1,当不为第1帧,需要第一计数器fs_cnt计数到128时,data128_end就为1。第二计数器frame_cnt相当于帧数计数器,当fs_cnt为127或255表示一帧数据结束,第二计数器frame_cnt加1。第三计数器cnt256用于数据缓冲器buffer的读地址,通过计数data128_end的个数,即每隔128个或256个输入数据,读出一次256个数据缓冲器buffer的值。第四计数器cnt256_inv通过对第三计数器cnt256的数据进行倒序处理,实现对数据缓冲器buffer中的数据的颠倒处理,目的是得到正确有序的分帧数据。经过数据选择器mux选择输出的数据则是数据缓冲器buffer最终的读地址,以上所有控制信号经过一个256*16bit的数据缓冲器buffer即可输出正确的分帧数据data_out。

如上各实施例所述的电路,可以通过硬件描述语言hdl(hardwaredescriptionlanguage)来实现,也可以采用其它方式实现。

显然,上述的实施例仅仅是本实用新型一部分实施例,而不是全部的实施例,各个实施例之间的技术方案可以相互结合。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。这些程序可以存储于计算机可读取存储介质(比如rom、ram、磁碟或者光盘等各种可以存储程序代码的介质)中。该程序在执行时,执行包括上述各方法实施例的步骤。

最后应说明的是:以上各实施例仅用以说明本实用新型的技术方案,而非对其限制;尽管参照前述各实施例对本实用新型进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本实用新型各实施例技术方案的范围。

起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。

此文章来源于网络,如有侵权,请联系删除

相关标签: 数据选择器缓冲器
tips