语音信号的采集-滤波-回放
- 格式:doc
- 大小:291.00 KB
- 文档页数:11
语音信号采集的基本原理
语音信号采集的基本原理
语音信号采集的基本原理是将模拟语音信号转换为数字信号,以便于进行后续的数字信号处理。
在转换过程中,需要满足采样定理和量化定理。
采样定理指出,为了能够完整地表示一个模拟信号,采样频率必须大于等于信号最高频率的两倍。
否则,采样后的数字信号会出现混叠现象,导致信号的失真。
在满足采样定理的基础上,需要对采样值进行量化。
量化过程将连续的模拟信号转换为离散的数字信号,通过给定采样点一个特定的值来近似表示该点的信号值。
在量化过程中,需要选择合适的量化位数,以平衡精度和动态范围。
量化位数越多,精度越高,但同时也会增加数据的复杂度和计算量。
除了采样和量化之外,语音信号采集还需要考虑其他因素,例如声音信号的信噪比、抗干扰能力、灵敏度等。
为了提高采集质量和效果,需要采用一些降噪技术和滤波器设计,以及优化传感器和电路设计。
总之,语音信号采集的基本原理是通过对模拟信号进行采样和量化,将其转换为数字信号。
在具体应用中,需要考虑多种因素,包括噪声干扰、灵敏度等,并进行相应的优化和改进。
基于DSP的语音采集与FIR滤波器的设计与实现摘要: 介绍了一种基于TMS320C5402的语音采集与FIR数字滤波器的设计与实现, 采用TLC320AD50作为语音CODEC模块的核心器件, 简述了FIR数字滤波器的特点,以及其在DSP上实现的原理。
利用TMS320C5402对采集到的语音信号进行FIR滤波, 该系统具有较强的数据处理能力和灵活的接口电路,能够满足语音信号滤波的要求, 可以扩展为语音信号处理的通用平台.关键词: 语音采集; FIR滤波器; TMS320C5402数字信号处理是把数字或符号表示的序列, 通过计算机或专用处理设备, 用数字的方式去处理, 以达到更符合人们要求的信号形式。
而语音处理是数字信号处理最活跃的研究方向之一, 在IP电话和多媒体通信中得到广泛应用. 一个完备的语音信号处理系统不但要具有语音信号的采集和回放功能, 还要能够进行复杂的语音信号分析和处理。
通常这些信号处理算法的运算量很大, 而且又要满足实时的快速高效处理要求, 随着DSP技术的发展, 以DSP为内核的设备越来越多, 为语音信号的处理提供了优质可靠的平台. 软件编程的灵活性给很多设备增加不同的功能提供了方便, 利用软件在已有的硬件平台上实现不同的功能已成为一种趋势。
本文设计了一个语音处理系统, 采用定点DSP芯片TMS320C5402作为CPU, 完成对语音信号的采集和滤波处理.1 语音采集系统的设计1. 1 系统总体设计语音采集与处理系统主要包括3个主要部分: 以TMS320C5402 为核心的数据处理模块; 以TLC320AD50为核心的语音采集与编解码( CODEC)模块; 用户根据需要扩展的存储器模块. 系统硬件结构如图1所示.1. 1. 1 CODEC模块本设计选用TLC320AD50( 以下简称AD50) 完成语音信号的A/ D转换和D/ A转换. AD50是TI公司生产的一款集成有A/ D和D/ A的音频芯片, DSP与音频AD50连接后, 可使用一个缓冲串行口来同时实现语音信号的采集和输出, 从而可以节省DSP的硬件开销. AD50使用过采样技术提供从数字信号到模拟信号和模拟信号到数字信号的高分辨率低速信号转换. 该器件包括2个串行的同步转换通道, 分别用于各自的数据传输. 语音信号直接从AD50的模拟信号输入端输入, AD50对其进行采样, 并将采样后的数据传送至DSP. DSP应用相应的算法对数据进行处理, 并将处理后的数据传送到AD50的D/ A输入端. AD50再对DSP处理后的数据进行数模转换, 变为语音信号后输出到音响设备.本系统中TLC320AD50与TMS320C5402之间采用串行通信, 通过DSP芯片的MCBSP串口实现.接口电路如图2所示.1. 1. 2 MCBSP的工作原理TMS320C5402有2个McBSP 多通道缓存串行口. McBSP提供了全双工的通信机制, 以及双缓存的发送寄存器和三缓存的接收寄存器, 允许连续的数据流传输, 数据长度可以为8、12、16、20、24、32; 同时还提供了A律和L律压扩. 数据信号经DR和DX引脚与外设通讯, 控制信号则由CLKX、CLKR、FSX、FSR等4个引脚来实现[ 4]. CPU和DMA控制器可以读取DRR[ 1, 2] 的数据实现接收, 并且可以对DXR[ 1, 2] 写入数据实现发送. 串行口控制寄存器SPCR[ 1, 2] 和引脚控制寄存器PCR用来配置串行口; 接收控制寄存器RCR[ 1, 2] 和发送控制寄存器XCR[ 1, 2]用来设置接收通道和发送通道的参数; 采样率发生器寄存器SRGR[ 1, 2] 用来设置采样率. TMS320C5402芯片串口控制寄存器功能强大, 用户通过编程不但可以设置时钟信号的极性及输入输出方向, 还可以设置同步信号的极性及输入输出方向.1. 1. 3 AD50与DSP的同步通信在应用中, 将TLC320AD50C接至DSP的同步串口, 并将TLC320AD50设置在主动工作模式下, 即由TLC320AD50 提供帧同步信号和移位时钟,TMS320C5402的管脚电压为3. 3V, 可以与AD50直接相连. 串口的移位时钟SCLK由AD发出, 串行数据在SCLK的驱动下经DIN、DOUT 移进、移出, 在SCLK的下降沿采样DIN 数据, 在SCLK下降沿送出数据到DOUT. XF控制首次或二次通信, XF为低时是AD50的首次通信, 是正常的AD、DA的数据; XF为高时是AD50的二次通信, 这时可以读写AD50的4个寄存器. 进入二次通信有软件的方法, 即把AD50设为15+1位数据模式, 最后一位标记下一个数据是否为二次通信数据, 1表示是, 0表示否.一次通信格式的16位都用来传输数据. DAC的数据长度由寄存器1的D0位决定. 启动和复位时, 默认值为15+ 1模式, 最后一位要求二次通信. 如果工作在16位传输模式下, 则必须由FC产生二次通信请求. 二次通信格式则用来初始化和修改TLC320AD50C内部寄存器的值. 在二次通信中可通过向DIN写数据来完成初始化.二次通信格式如图3所示, D13= 1表示读DIN的数据, D13= 0表示向DIN 写数据.系统复位后, 必须通过DSP 的DX接口向TLC320AD50C的DIN 写数据, 因为采用一片TLC320AD50C, 只需初始化寄存器1、寄存器2、寄存器4. 由于通信数据长度为16位, 初始化是应通过RCR1和XCR1设置McBSP的传输数据长度为16.2 语音采集语音信号的采集, 是通过话筒经模拟放大输入到AD50, AD50作相应的低频滤波并进行A/ D转化, 再通过MCBSP通道输入DSP芯片. 语音信号采集程序包括以下几个部分:( 1) DSP初始化. 对DSP的寄存器以及缓冲串口进行初始化.( 2) AD50初始化. 通过DSP的缓冲串口和XF引脚对AD50进行初始化, 再设置AD50的4个控制寄存器; 确定AD50的4个控制寄存器设置正确后,AD50才能开始采集数据. 此时, 可以用示波器检测AD50的DOUT引脚, 能发现引脚是否有连续的信号输出.( 3) 设置DSP的中断, 从缓冲串口读取数据. 如果此时在缓冲串口连续读取数据, 就可以在仿真软件CCS中查看读取的数据是否正确.( 4) DSP存放数据. 可以将缓冲串口读取的数据存放到DSP的RAM单元, 连续存放, 可通过CCS的图形显示功能判断AD50采样的数据是否正确.3 语音滤波语音去噪在语音信号上应用较多, 在实质上和普通的数字信号去噪没有什么区别, 使用滤波器和各种算法均可以实现语音信号的去噪, 使得含有噪声的信号更加清晰. 但语音信号的去噪和一般的数字信号去噪又存在着很大的差别, 因为语音信号的频谱覆盖在100Hz~3. 4kHz, 较为丰富的信号主要集中在1kHz 附近, 所以一般的滤波去噪时必须考虑语音信号的自身特征.本系统中应用的AD50内置了低通滤波器, 可以通过设置来有效滤除信号中混杂的高频干扰信号, 而对于低于100Hz的干扰信号, 则无能为力. 因此, 要用DSP进行编程设计一个软件可实现高通滤波器, 由处理器来完成信号的去噪, 采用FIR滤波.3.1 FIR滤波器的基本结构及特点有限冲激响应( FIR)滤波器的基本结构是一个分节的延时线, 把每一节的输出加权累加, 得到滤波器的输出. 数学上表示为y(n) =EN-1n=0h(n)x(n-m), (0[ n[ N- 1) (1) 对(1)式进行Z变换, 整理后可得出FIR滤波器的传递函数为H(z) = EN-1n=0h(n)z-n, (0[ n[ N- 1) (2)由( 2)式可知FIR滤波器的一般结构如图1所示.图1 FIR数字滤波器直接实现形式3.2 FIR滤波器的DSP实现原理由( 1)式可知, FIR滤波器的冲激响应为h(0), h(1), ,, h(N- 1). x(n)表示滤波器在n时刻的输入, 则n时刻的输出为y(n) = h(0)x(n) +h(1)x(n- 1) + ,+ h(N- 1)x[ n- (N- 1) ],这是一个乘、加的过程, 可以使用DSP中的MAC 指令实现该运算. 图2说明了使用循环寻址实现FIR滤波器的方法. 为了能正确使用循环寻址, 必须先初始化BK, 块长为N. 同时, 数据缓冲区和冲激响应( FIR滤波器的系数)的开始地址必须是大于N的2的最小幂的倍数. 例如, 当N= 11时, 大于N的最小2的幂为16, 则数据缓冲区的第一位地址应该是16的倍数, 因此数据缓冲区起始地址的最低4位必须是0.在图2中, 滤波系数指针初始化时指向h(N- 1), 经过一次FIR滤波计算后, 在循环寻址的作用下,仍然指向h(N- 1). 而数据缓冲区指针指向的是需要更新的数据, 如x(n). 在写入新数据并完成FIR运算后, 该指针指向x(n- (N- 1)) , 所以, 使用循环寻址可以方便地完成滤波窗口数据的自动更新.4 FIR滤波器设计实例给定FIR数字带通滤波器的技术指标为: 2个通带截止频率分别为4kHz和6kHz, 2个阻带截止频率分别为3kHz和7kHz, 采样频率均为25kHz. 输入为一个混合信号f = [ cos(2000Pt) + cos(10000Pt) + cos(20000Pt)] /6,利用Matlab设计FIR带通滤波器的系数, 将得到的滤波器系数乘以32768(即215)后舍尾取整可得DSP中滤波器系数列表. 用. word汇编命令将各滤波器系数直接输入到DSP程序中; 模拟输入数据由C语言程序实现, 然后用. copy命令将C语言程序生成的数据文件firinput拷贝到DSP程序中. DSP程序实现读入数据、滤波、显示波形等方面的任务. 完成FIR滤波器的程序框图如图3所示, 可知FIR滤波器的DSP实现主要由以下4方面的内容组成.4.1 模拟输入数据的生成用C语言程序生成输入数据, 通过. copy汇编命令将生成的数据文件拷贝到汇编程序中, 作为FIR滤波器的输入数据. C语言程序运行后所生成的数据文件名为firinpu,t 生成firinput数据文件的C语言程序如下所示:#include"stdio. h"#include"math. h"main( ){int ;idouble f[ 256];FILE*fp;if( ( fp= fopen( "e: \ \ firinput", "wt") ) = =NULL){printf( "canct openfile! \n");}for( i=0; i< =255; i++ ){f[ i] =( cos( 2* 3. 14159265* *i 1000/25000) + cos( 2* 3. 14159265* *i 5000/25000) +cos( 2* 3. 14159265* *i 10000/25000) ) /6;fprintf( fp, " . word %ld\n", ( long) ( f[ i]* 32768) );}fclose( fp);}4.2 DSP初始化程序 DSP初始化程序包括了对堆栈指针( SP)、软件等待状态寄存器( SWWSR)、中断寄存器( IFR)、中断屏蔽寄存器( IMR)以及处理器工作状态寄存器( PMST)的初始化; 另外还对各变量赋值, 具体的程序如下: . def _c_int00. mmregsswcr . set 2bht_ar2 . set 066ht_ar3 . set 067hout_wave_buf . set 0d00hdata_in . set 0f00hN . set 51fir_coef_buf . set 100hfir_data . set 200h. textrs b_c_int00_c_int00:stm#2020h, pmstssbx intmssbx sxmssbx frctstm #10h, 26hstm #10h, 36hstm #0ffh, spld #0, dpstm #0ffffh, ifrstm #20h, imrstm #02492h, swwsrstm #0, swcr可看出, FIR滤波器的系数列表将存在100h开始的单元中, 输入数据将存在200h开始的单元中, 而输出数据将存在0d00h开始的单元中.4.3 滤波系数以及输入数据的调入由于滤波器系数一开始是存在程序存储器中, 输入数据则是存在程序外的文件中, 程序对这2组数据进行处理时, 需要把两者都调到数据存储器中, 具体实现程序如下:stm #fir_data, ar6rpt #255mvpd #inpu,t*ar6+stm #fir_coef_bu,f ar6rpt #N-1mvpdfir_coe,f*ar6+stm #fir_coef_bu,f t_ar2stm #fir_data, t_ar3这段程序实现的是把输入数据调到以200h开始的单元, 而把滤波系数调到从100h开始的单元.4.4 滤波子程序一次滤波的过程实质上就是对2组数进行有规律的乘加计算, 具体程序如下:fir:mvdm #t_ar2, ar2 ; 将起始滤波系数地址100h 赋给ar2mvdm #t_ar3, ar5 ; 将起始输入数据地址200h 赋给ar5stm #data_in, ar3 ; ar3=0f00hstm #255, brc ; 定义块循环次数rptbdloop-1 ; 定义块循环结束地址stm #N, bk ; 定义循环缓冲器大小ld *ar5+, a ; 将新数据读到累加器a中 stl a,*ar3+% ; 将新数据读入栈顶rptz a, #(N-1) ; 定义循环次数, 之前先将a累加器清0mac *ar2+0%,*ar3+0%, a ; a=ar2*ar3+a, 每完成一次计算ar2、ar3 ; 指针所对应地址+1sth a, * ar6+ ; 将计算结果保存输出loop这个程序段将重复执行256次, 从而实现对于数据的读入、处理、输出等功能.5 结语本文介绍了一个实时数据采集处理系统的设计和实现, 系统以DSP芯片和TLC320AD50芯片为核心,有很强的数据处理能力和灵活的外围接口电路, 实验证明, 可较好地实现语音的滤波. 该系统可扩展为3G手机语音识别系统, 也可以作为语音信号处理算法研究和实时实现的通用平台参考文献: :[ 1] 邹彦. DSP原理及应用[ M]. 北京:电子工业出版社, 2005.[2] 乔瑞萍, 崔涛,张芳娟. TMS320C54x原理及应用[M].西安: 西安电子科技大学出版社, 2005.[3] 黄海波, 蒋伟荣. 通用语音处理系统的DSP实现[ J] . 微计算机信息, 2006,22( 5) :173- 175.[4] 张勇, 曾炽祥,周好斌. TMS320C5000系列DSP汇编语言程序设计[M]. 西安:西安电子科技大学出版社, 2004.[ 5] 卢山, 田野,郭黎利. 利用DSP技术实现FIR滤波器[ J]. 应用科技, 2002, 29( 11): 19-21.[ 6] 张伟利, 朱煜. FIR滤波器在TMS320C5402中的实现[ J].微处理机, 2005( 2): 4- 6.。
课程设计设计题目设计切比雪夫I型低通滤波器课程名称数字信号处理课程设计姓名/班级学号0809121094________________________ 指导教师目录一、引言 (3)1.1 课程设计目的 (3)1.2 课程设计的要求 (3)二、设计原理 (4)2.1 IIR滤波器 (4)2.2 切比雪夫I型滤器 (5)2.2.1 切比雪夫滤波器简介 (5)2.2.2切比雪夫滤波器原理 (5)2.3 双线性变换法 (7)三、设计步骤 (8)3.1设计流程图 (8)3.2语言信号的采集 (9)3.3语音信号的频谱分析 (10)3.4滤波器设计 (12)3.5完整的滤波程序及滤波效果图 (14)3.6结果分析 (18)四、出现的问题及解决方法 (18)五、课程设计心得体会 (18)六、参考文献 (19)摘要随着信息和数字时代的到来,数字信号处理已成为当今一门极其重要的学科和技术领域。
在现代通信系统中,由于信号中经常混有各种复杂成分,因此很多信号的处理都是基于滤波器而进行的。
所以,数字滤波器在数字信号处理中起着举足轻重的作用。
而数字滤波器的设计都要以模拟滤波器为基础的,这是因为模拟滤波器的理论和设计方方法都已发展的相当成熟,且有典型的模拟滤波器供我们选择。
如切比雪夫滤波器。
本次课程设计将运用MATLAB设计一个基于切比雪夫低通滤波器,并出所设计滤波器的幅度及幅度衰减特性。
关键词:模拟低通滤波切比雪夫一、引言用麦克风采集一段8000Hz,8k的单声道语音信号,绘制波形并观察其频谱,给定通带截止频率为2000Hz,阻带截止频率为2100Hz,通带波纹为1dB,阻带波纹为60dB,用双线性变换法设计的一个满足上述指标的切比雪夫I型IIR滤波器,对该语音信号进行滤波去噪处理。
1.1 课程设计目的《数字信号处理》课程设计是在学生完成数字信号处理和MATLAB的结合后的基本实验以后开设的。
本课程设计的目的是为了让学生综合数字信号处理和MATLAB并实现一个较为完整的小型滤波系统。
精密制造与自动化2020年第2期48基于STM32的语音存储与回放系统郭树浩张亚峰(平顶山学院信息工程学院河南平顶山467000)摘要本文提出基于STM32F103C8T6单片机为控制核心,并结合ISD1280语音芯片的语音存储与回放系统。
该系统相比传统的系统,结构更为简单,处理速度也相对更快。
关键词单片机语音芯片系统语音存储回放系统的硬件构成主要有两种,一种是采用分立的器件来实现,另一种则是借助专用的语音芯片来构成。
第一种方式设计的系统结构复杂,体积庞大,可靠性低。
因此,在实际应用中多采用第二种方式。
1 系统构成系统通过麦克风将采集到的语音转换为电信号,接着此信号进入语音芯片,ISD1280可对语音信号进行前置放大、滤波,之后在单片机的控制下,语音芯片对数据进行采样存储。
回放时,单片机控制语音芯片提取数据,经过语音芯片对数据进行读取之后即可通过喇叭播放。
按键模块可以控制整个系统的工作状态。
ISD1820采用多电平直接模拟量存储技术,因此能够真实、自然地再现语音信号。
当系统处于录音和放音状态时,LCD液晶屏幕会显示相应的信息以协助判断。
系统框图如图1所示:图1 系统的组成框图2 硬件构成2.1 STM32单片机此系统采用STM32F103系列芯片,在系统中负责控制语音芯片录音、放音以及对数据的存储与读取。
STM32F103系列芯片是意法半导体公司出品的低功耗、高性能32位单片机,其内核是Cortex-M3。
本系统采用的芯片采用64kB的Flash只读程序存储器,工作电压在2V~3.6V,工作温度为-40℃~85℃。
此主控芯片的管脚图如图2所示。
图2 STM32F103芯片管脚图单片机工作所需的基本电路有电源电路、晶振以及复位电路。
在此设计中,电源电路采取AMS1117-3.3芯片,晶振采用8MHz主频+32.768kHz时钟频率,复位电路采用10 kΩ电阻、0.1μF电容以及六脚按钮组成。
原理图如3所示:(a)电源电路郭树浩 等 基于STM32的语音存储与回放系统49(b ) 晶振电路(c ) 复位电路 图3 电路原理图2.2 ISD1820ISD 语音芯片是ISD 公司生产的系列语音芯片,其以高品质的工作性能和语音音质深受设计人员和使用者的青睐。
图1 任务一程序流程图1、音频信号采集道,只取第一个声道进行处理,接着使用sound函数以fs频率进行音频回放。
2、音频信号频域分析以采样间隔T划分时域并绘制出signal信号的时域波形;调用fft函数,对signal 进行快速傅里叶变换,用abs函数取傅里叶变换后结果的幅值进行幅频分析,绘制出频谱图。
在绘制频谱图时由于考虑到快速傅里叶变换的对称性,只取序列的前半部分进行观察分析。
3、音频信号分解为了实现音频信号的分解及合成,先对原信号的频谱图进行观察分析,发现原信号的主要能量集中在三个主要频率上,于是考虑用这三频率的正弦信号合成原信号。
为了求得这三个频率,先调用findpeaks函数找到频谱图上的各个局部极大值peak及其对应的位置locs,然后用sort对峰值点进行排序,找到最大的三个值,接着用find 函数找到这三个最大值在locs中的位置,也就知道了对应的频率。
这里有一个问题就是最小的峰值频率并不是在sort排序后的第三位而是在第四位,需要有一个调整;确定了主要谱线后,使用text函数进行峰值标注;4、音频信号合成接着将这三个谱线还原回时域正弦信号,幅度的比例等于对应频率上的幅度比例然后然后叠加,得到合成后的信号,绘制出时域波形,与原信号波形进行比较,接着对两个正弦信号进行fft,绘制出他们的频谱,然后对合成的信号进行fft,做出频谱图和原信号的频谱图进行比较.5、音频信号回放用sound函数进行原信号和合成信号的回放,比较差异。
实验内容二:任意音频信号的时域和频域分析及数字滤波器设计通过对任务具体内容的分析,可以建立出任务二程序框图如下,之后将对编程思想及思路进行介绍:图2任务二程序流程图1、音频信号采样自己录音频并另存为”ding.wav”后,先用audioread函数读取音频信号得到采样序列signal及对应采样频率fs,由于获取的音频信号是双声道,只取第一个声道进行处理。
2、时域采样使用audioread函数得到的采样序列signal及采样频率fs为过采样状态,此时我们对signal再进行等间隔采样,达到减少采样点数和降低采样频率的效果,进而实现合理采样状态signal2、fs2和欠采样状态signal1、fs1;使用sound函数分别对这两种采样状态进行回放。
这是我刚做的双线性变换法低通滤波器,运行是正确的!ly是语音信号的名字,别的自己改改就行!原语音信号程序figure(1);[y,fs,nbits]=wavread ('ly');sound(y,fs,nbits); %回放语音信号n = length (y) ; %求出语音信号的长度Y=fft(y,n); %傅里叶变换subplot(2,1,1);plot(y);title('原始信号波形');subplot(2,1,2);plot(abs(Y));title('原始信号频谱')加噪语音信号程序figure(2);[y,fs,nbits]=wavread ('ly');n = length (y) ; %求出语音信号的长度t=[0:1/8000:2 zeros(1,23520-1)]';noise=0.04*sin(10000*pi*t);%sin函数产生噪声s=y+noise; %语音信号加入噪声sound(s);subplot(2,1,1);plot(s);title('加噪语音信号的时域波形');S=fft(s); %傅里叶变换subplot(2,1,2);plot(abs(S));title('加噪语音信号的频域波形')滤波后的信号程序Ft=8000;Fp=1000;Fs=1200;wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft;fp=2*Ft*tan(wp/2);fs=2*Fs*tan(wp/2);[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换[y,fs,nbits]=wavread ('ly');n = length (y) ; %求出语音信号的长度t=[0:1/8000:2 zeros(1,23520-1)]';noise=0.04*sin(10000*pi*t);%sin函数产生噪声s=y+noise; %语音信号加入噪声z11=filter(num11,den11,s);sound(z11);m11=fft(z11); %求滤波后的信号figure(3);subplot(2,1,1);plot(z11);title('滤波后的信号波形');subplot(2,1,2);plot(abs(m11),'r');title('滤波后信号的频谱');数字滤波器设计研究型实验探讨建锋,游开明,陈列尊范学院湖南衡阳421008)在学习该课程时,普遍感到概念抽象,公式繁多。
语音芯片工作原理语音芯片是一种集成电路,用于处理声音信号并将其转化为数字信号。
它是语音识别和合成的关键组件,广泛应用于语音识别、语音合成、智能家居、语音导航等领域。
下面将详细介绍语音芯片的工作原理。
语音芯片的工作原理可以分为两个主要部分:语音信号的采集与处理。
1. 语音信号的采集:语音芯片通过麦克风或音频输入设备来采集外界的声音信号。
采集的声音信号首先经过预处理模块,包括音频放大和滤波等,将其转化为适合后续处理的电信号。
预处理模块能够有效地将声音信号中的噪音和杂音去除,提高语音信号的质量。
2. 语音信号的处理:采集到的声音信号经过预处理后,进入到语音处理模块。
语音处理模块包括特征提取、语音识别和语音合成等功能。
- 特征提取:特征提取是语音识别的关键步骤。
语音信号经过一系列算法处理,提取出其中的特征参数。
常见的特征参数包括梅尔频率倒谱系数(MFCC)、线性预测编码(LPC)等。
这些特征参数可以有效地表示语音信号的频谱特性,为后续的语音识别提供有用的信息。
- 语音识别:语音识别是通过对特征参数进行模式匹配,将语音信号转化为文字或命令的过程。
语音芯片中的语音识别模块通常使用了一种被称为隐马尔可夫模型(Hidden Markov Model,HMM)的方法。
HMM模型通过对声音信号的统计分析,找到最可能的文字或命令。
- 语音合成:语音合成是将文字或命令转化为声音信号的过程。
语音合成模块将输入的文字或命令经过文本处理和声学建模等步骤,生成对应的语音信号。
常见的语音合成技术包括拼接合成、参数合成和混合合成等。
当语音信号经过上述处理后,可以输出为数字信号或模拟信号。
数字信号可以直接输入到计算机或其他设备进行处理,模拟信号可以通过DAC(数模转换器)转化为模拟电压信号,并输出到扬声器等设备中产生声音。
总体来说,语音芯片的工作原理是将声音信号采集、预处理、特征提取、语音识别和语音合成等功能集成于一个芯片中,通过一系列的算法处理和模式匹配,实现语音信号的分析、识别和合成。
实验二语音信号处理班级:08电子C班姓名:苏清法学号:0815241036(1)语音信号的采集:利用Windows下的录音机,录制一段话音。
然后在Matla软件平台下,利用函数wavread对语音信号进行采样,播放语音信号,并绘制原始语音信号;wavread函数调用格式:y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(Hz),nbits表示采样位数。
y=wavread(file,N),读取前N点的采样值放在向量y中。
y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y中。
降采样:利用windows下的录音机录制的音频采样率是固定的fs(=22050),可以选择以下函数实现对语音信号的降采样。
y=x((1:N:length(x))); %对原始信号每隔N个点取一位,即采样率变为原来的1/Ny=resample(yn,L,M); %采样率变为原来的L/M倍y=downsample(yn,N); %%采样率变为原来的1/N倍改变采样率为原来的1/2倍,1/4倍,1/20倍,1/50倍,1/100倍等,分别画出降样前后的信号波形和频谱图,分析采样前后信号的变化Matlab程序如下:(2)重构原信号:降采样后,信号的采样率和采样点数同时变化。
如采样率变为原来的1/2,即对原始信号每隔一个点采样。
如果要恢复原始信号,即信号长度和采样率须变为原来同样大小。
所以,必须对降采样后信号进行插值重构。
对采样后的真实语音信号进行插值重构,滤波,恢复原始信号。
画出插值前后信号的波形以及频谱图,并将重构后信号与原始信号进行比较。
如,对采样率降为原来1/4的降采样后信号插值重构。
Matlab程序如下:(3)对原始信号加入噪声:对原始语音信号加入s=sin(2*pi*f*Ts*n)的噪声,采样后可知Fs = 16000,选择f = 2500,播放加入噪声信号的语音信号,并绘制噪声信号和含噪语音信号;设计频率已知的噪声信号或者用自然噪声信号加在原始语音信号上,构建带噪声信号。
语音信号的采集-滤波-回放数字滤波器是一种用来过滤时间离散信号的数字系统,它是通过对抽样数据进行数学处理来达到频域滤波的目的。
随着现代通信的数字化,数字滤波器变得更加重要。
数字滤波器的种类很多,但总的来说可以分成两大类,一类是经典滤波器,另一类可称为现代滤波器。
从滤波特性方面考虑,数字滤波器可分成数字高通、数字低通、数字带通和数字带阻等滤波器。
从实现方法上考虑,将滤波器分成两种,一种称为无限脉冲响应滤波器,简称IIR(Infinite Impulse Response)滤波器,另一种称为FIR(Finite Impulse Response)滤波器[1]。
设计FIR数字滤波器的方法有窗函数法、频率采样法和等波纹最佳逼近法等。
实验原理FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
有限长单位冲激响应(FIR)滤波器有以下特点:(1) 系统的单位冲激响应h(n)在有限个n值处不为零;(2) 系统函数H(z)在|z|>0处收敛,极点全部在z=0处(因果系统);(3) 结构上主要是非递归结构,没有输出到输入的反馈,但有些结构中(例如频率抽样结构)也包含有反馈的递归部分。
FIR滤波器的系统函数用下式表示:。
H(n)就是FIR滤波器的单位脉冲响应。
FIR滤波器最重要的优点就是由于不存在系统极点,FIR滤波器是绝对稳定的系统。
相较于IIR滤波器,FIR滤波器有以下的优点:(1)可以很容易地设计线性相位的滤波器。
线性相位滤波器延时输入信号,却并不扭曲其相位。
(2)实现简单。
在大多数DSP处理器,只需要对一个指令积习循环就可以完成FIR计算。
(3)适合于多采样率转换,它包括抽取(降低采样率),插值(增加采样率)操作。
无论是抽取或者插值,运用FIR滤波器可以省去一些计算,提高计算效率。
相反,如果使用IIR滤波器,每个输出都要逐一计算,不能省略,即使输出要丢弃。
(4)具有理想的数字特性。
在实际中,所有的DSP滤波器必须用有限精度(有限bit数目)实现,而在IIR滤波器中使用有限精度会产生很大的问题,由于采用的是反馈电路,因此IIR通常用非常少的bit实现,设计者就能解决更少的与非理想算术有关的问题。
(5)可以用小数实现。
不像IIR滤波器,FIR滤波器通常可能用小于1的系数来实现。
(如果需要,FIR滤波器的总的增益可以在输出调整)。
当使用定点DSP的时候,这也是一个考虑因素,它能使得实现更加地简单。
FIR滤波器的缺点在于它的性能不如同样阶数的IIR滤波器,不过由于数字计算硬件的飞速发展,这一点已经不成为问题。
再加上引入计算机辅助设计,FIR滤波器的设计也得到极大的简化。
基于上述原因,FIR滤波器比IIR滤波器的应用更广。
窗函数设计法的基本思想是用FIRDF逼近洗完的滤波特性。
设希望逼近的滤波器的频率响应函数为,其单位脉冲响应为表示。
为了设计简单方便,通常选择为具有片段常数特性的理想滤波器。
因此是无限长非因果序列,不能直接作为FIRDF的单位脉冲响应。
窗函数设计法就是截取为有限长的一段因果序列,并用合适的窗函数进行加权作为FIRDF的单位脉冲响应h(n)。
用窗函数法设计FIRDF的具体设计步骤如下:(1)构造希望逼近的频率响应函数。
(2)求出。
(3)加窗得到FIRDF的单位脉冲响应h(n)。
h(n)=w(n)。
式中,w(n)称为窗函数,其长度为N。
如果要求设计第一类线性相位FIRDF,则要求h(n)关于(N-1)/2点偶对称。
而关于n=t点偶对称,所以要求t=(N-1)/2。
同时要求w(n)关于(N-1)/2点偶对称。
用窗函数法设计第一类线性相位FIRDF的步骤:(1)选择窗函数类型和长度,写出才窗函数的表达式。
根据阻带最小衰减选择窗函数的的类型,再根据过渡带宽度确定所选窗函数的长度N。
用窗函数法设计的FIRDF通带波纹幅度近似等于阻带波纹幅度。
一般阻带最小衰减达到40dB以上,则通带最大衰减就小于0.1dB。
所以用窗函数法设计FIRDF时,通常只考虑阻带最小衰减就可以了。
(2)构造希望逼近的频率响应函数。
根据设计需要,一般选择线性相位理想滤波器(理想低通、理想高通、理想带通、理近似为最终设计的FIRDF的过渡带中心频率,幅度函想带阻)。
理想滤波器的截止频率c数衰减一半(约-6dB)。
所以一般取,和分别为通带边界频率和阻带边界频率。
(3)计算。
(4)加窗得到设计结果:h(n)=w(n)。
采集录制一段录音,然后将其变为WA V格式,将其属性设置为4.410kHz,8位,单声道,128KB/秒,然后点击确定。
然后再点击文件/另存为,即可将该语音文件存在MATLAB文件下的work文件夹里。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
通过wavread函数的使用,让我们很快理解了采样频率、采样位数等概念。
采集完成后在信号中加入一个单频噪声。
对应程序如下:[x,fs,bits]=wavread(‘***.wav’); % 输入参数为文件的全路径和文件名(因为语音文件直接放在Matlab下的work文件夹里,所以直接使用文件名即可),输出的第一个参数是每个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
sound(x,fs,bits); % 按指定的采样率和每样本编码位数回放所录语音文件N=length(x); % 计算信号x的长度fn=1900; % 单频噪声频率,此参数可自己设计t=0:1/fs:(N-1)/fs; % 计算时间范围,样本数除以采样频率x=x’; %将其转置y=x+sin(fn*2*pi*t); %在原信号上添加噪声sound(y,fs,bits); % 应该可以明显听出有尖锐的单频啸叫声滤波器设计在该滤波器的设计中,我们给出该滤波器的性能指标如下:fpd=1800; fsd=1850; fsu=1950; fpu=2000;Rp=1; As=40;截止频率也可以任意自选,在单频噪声干扰附近即可。
在这里,很重要的是通带截止db 值的设置。
这个值一定要根据我们使用的设计滤波器的方法来设定。
因为我使用的是NUTTALLWIN 窗法,NUTTALLWIN 窗函数中,滤波器的过渡带宽为15.4M / ,最小阻带衰减为108db 。
所以,一定要将通带截止db 值设置的小于108,所以,我将其设置为100db 。
在这里我是使用窗函数法设计上面要求的FIR 滤波器。
在Matlab 中,利用NUTTALLWIN 窗设计FIR 滤波器,利用Matlab 中的函数freqz 画出该滤波器的频率响应。
首先,我们利用数字信号处理里面学过的知识,根据自己选定的参数,用指定的方法设计FIR 滤波器,得到FIR 滤波器的阶数M 。
随后调用nuttallwin (M)函数产生M 阶的NUTTALLWIN 窗。
然后,调用自编ideal_lp 函数计算理想带阻滤波器的脉冲响应。
最后,再调用自编freqz_m(h_bs,1)函数即可计算得到该滤波器的频率特性。
我设计滤波器过程对应的程序如下:fpd=1800;fsd=1850;fsu=1950;fpu=2000;Rp=1;As=40; % 带阻滤波器设计指标 fcd=(fpd+fsd)/2;fcu=(fpu+fsu)/2;df=min((fsd-fpd),(fpu-fsu));% 计算上下边带中心频率,和频率间隔wcd=fcd/fs*2*pi;wcu=fcu/fs*2*pi;dw=df/fs*2*pi;% 将Hz 为单位的模拟频率换算为rad 为单位的数字频率wsd=fsd/fs*2*pi;wsu=fsu/fs*2*pi;M=ceil(6.6*pi/dw)+1; % 计算NUTTALLWIN 窗设计该滤波器时需要的阶数n=0:M-1; % 定义时间范围w_ham= nuttallwin (M); % 产生M 阶的NUTTALLWIN 窗hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M);% 调用自编函数计算理想带阻滤波器的脉冲响应h_bs=w_ham'.*hd_bs; % 用窗口法计算实际滤波器脉冲响应[db,mag,pha,grd,w]=freqz_m(h_bs,1); % 调用自编函数计算滤波器的频率特性在将滤波器设计好,频率特性求出来之后,我编写如下程序,来画出该带阻滤波器的特性图。
程序如下:subplot(2,2,1);plot(w,db); grid on;xlabel('频率');ylabel('db');subplot(2,2,2);plot(w,mag); grid on;xlabel('频率');ylabel('幅度');subplot(2,2,3);plot(w,pha); grid on;xlabel('频率');ylabel('相位');subplot(2,2,4);plot(h_bs);grid on;xlabel('频率');ylabel('滤波器脉冲响应'); 通过该程序得到的图如下图信号滤波处理在将滤波器设计好后,我们用自己设计的带阻滤波器对采集的语音信号进行滤波。
在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波。
我对信号进行滤波处理对应的程序如下:y_fil=fftfilt(h_bs,1,y); % 用设计好的滤波器对加噪信号y进行滤波Y_fil=fft(y_fil);Y_fil=Y_fil(1:length(Y_fil)/2); % 计算频谱取前一半结果分析在将加噪信号滤波之后,我们将滤波前后语音信号的波形及频谱图相互比较。
在同一张大图里分别绘制原始信号x,加噪信号y,滤波去噪信号y_fil的时域波形和频谱,以便比较和分析。
画这三个信号的比较图的对应的程序如下:subplot(3,2,1);plot(t,x);grid on; xlabel('时间');ylabel('原始信号');subplot(3,2,2);plot(f,X);grid on; xlabel('时间');ylabel('加入的噪声信号');subplot(3,2,3);plot(t,y);grid on; xlabel('频率');ylabel('原始信号频谱');subplot(3,2,4);plot(f,Y);grid on; xlabel('频率');ylabel('加入的噪声信号频谱');subplot(3,2,5);plot(t,y_fil);grid on; xlabel('时间');ylabel('滤波之后的信号');subplot(3,2,6);plot(f,Y_fil);grid on; xlabel('频率');ylabel('滤波之后的信号频谱');经过这段程序画出来的三个信号的时域波形和频谱图如下图从图中我们可以看出,原信号与滤波去噪信号的时域图基本相似,只有边缘部分有点差异;原信号与滤波去噪信号的频谱图波形也大致相似。