首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于FPGA的语音控制选频滤波器设计与实现(3)

基于FPGA的语音控制选频滤波器设计与实现(3)

求取MFcc参数的大致过程如下:
        (l)预加重Pre一emphasis,加强语音中的高频部分。
        (2)加窗Windowing,使语音平滑过渡,保持自相关性。
        (3)对加汉明窗后的语音帧作快速傅立叶变换  (FastFourierTransformation,FFT),将时域信号转化为频域 (FrequencyDomain)信号。
        (4)从FFT输出的数据取模的平方后,得到其离散功率谱,并通过一组三角带通滤波器 (TriangularFihers)。

       

        其中,Xk为功率谱上第k个点的值,mi为第i个滤波器的输出,Ti为第i个滤波器的中心频率。

        (5)将三角滤波器组的输出取自然对数,用离散余弦变换 (DisereteCosine升即sformation,DCT)将滤波器输出变换到倒谱域,即可得到MFCC。

       

        其中,P为MFCC参数的阶数。Mk为MFCC参数。

        MFCC特征提取的硬件设计流程如图:

       



        由于在端点检测的时候已经进行了预加重和加窗处理,所以直接从FFT部分开始计算,FFT模块的输入除了加窗后的语音还有一帧语音的开始和结束(就是端点检测模块的输出win_data、sop和eop)。因为语音数据都是实数,所以本文在FFT运算上提出了一点改进,可以加速FFT运算速度。FIFO缓冲的读写速度是不一样的。如果前一帧的MFCC参数计算已经完成,并且FIFO中的数据个数大于128(FFT变换后取前面128个值),帧RAM就读128个数据(即一帧)到帧RAM中,并发出信号表示新的一帧计算开始,在该帧没有计算完成之前是不能有新的数据进入帧RAM的。为了加快MFCC参数计算速度,本文将三角滤波器组、对数运算和DCT三个串行的模块,设计成三级流水处理。

        本实验中FFT的设计是在ISE10.1软件平台下完成的,在软件平台上,选用V6的板,直接条件FFT的IP核,对I/O数据流结构选项包括:流、缓冲突发和突发(Burst)进行处理,对参数进行设定

       



        dsta_imag_in:输入数据的虚部。
        dsta_real_in:输入数据的实部。
        Inv_i:为1表示做IF可变换,为O做FFr变换。
        master_sink_dsv:置位表示数据源准备好。
        master_sink_sop:置位表示输入模块的开始。必须和输入模块的第一个样点同步,并维
        持一个时钟周期。
        master_source_dav:置位表示设备接受器可以接受输出数据模块。
        reset:置位表示同步复位。
        exponent_out:表示FFr输出数据的指数。
        fft_imag_out:输出数据的虚部。
        fft_real_out:输出数据的实部。
        master_sink_ena:FFT核函数准备好,可以将输入模块写入其输入缓冲。
        master_source:FFT输出数据准备好,可以送到数据接受器。
        master_source_eop:输出模块数据包的终点。
        master_source_sop:输出模块数据包的起点。
继承事业,薪火相传
返回列表