基于L1最小化的稀疏matlab fir低通滤波器器中L1代表什么 稀疏代表什么

后使用快捷导航没有帐号?
查看: 8459|回复: 30
利用浮点库实现两路FIR滤波(F28335)
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
& && & 此文素材来源于在项目中增加两路FIR滤波算法进行过程中而遇到的问题以及探索出的解决方法。以controlSUITE上的一个demo——2833x_FIR为基,一步步展示遇到的问题与解决方案。文章中涉及到的软、硬件信息:XP or Win7系统&&CCSV5.2&&TMS320F28335本文主要分三个部分,1、建立自己的工程基石,后续项目开发工程以此为奠基,并能传承给下一位开发者或维护者&&2、修改demo,展示两种错误,并解决,实现两路FIR滤波&&3、解决Release版本中的问题
& && & P.S.已经了解怎么打造自己的工程可以直接跳过第一部分。第一部分因为dontium版主已经做过详细的介绍,因此第一部分写的相对简洁。初学者或有意详细了解的,可查看该主题《打造自己的C2000 LaunchPad项目》
& && & 篇幅比较长,请耐心,附上工程和pdf(各收取1芯片作为劳务费啊)。原pdf图片与文字不匹配,现已更正。
[ 本帖最后由 newofcortexm3 于
22:24 编辑 ]
22:24 上传
点击文件名下载附件
309.88 KB, 下载次数: 144
售价: 1 枚芯币 &[]
22:24 上传
点击文件名下载附件
1.31 MB, 下载次数: 206
售价: 1 枚芯币 &[]
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
第三部分:在Release模式下解决编译不通过的问题。
& && &Release模式会对程序进行优化,常常以这个模式下生成的代码作为发布的版本。Release模式与Debug模式相比,编译选项不同,因此对某些库链接时会发生编译错误。
在将可发布的版本固化在flash过程中,在Release模式下遇到的编译问题如图16所示,其中错误的描述见Console,如图17,指工程链接的库与ISA版本不合适。关于这个问题的解决方法的描述的官方链接如下,但是没法解决实际遇到的问题。
图16.jpg (58.21 KB, 下载次数: 0)
21:58 上传
图 16:编译遇到的问题与警告
图17.jpg (48.97 KB, 下载次数: 1)
21:58 上传
图 17:编译错误的具体描述首先解决错误,与第一部分中Include库文件类似,在Properties-&C2000 Linker-&Include library file or command file as input (--library,-l)中添加“libc.a”库,如图18所示,即可解决错误问题。libc.a是标准C语言库,一般情况下自动被gcc链接,这个库提供了通常与C语言相关的函数。关于libc.a的介绍可以查看链接
图18.jpg (95.28 KB, 下载次数: 0)
21:58 上传
图 18:添加libc.a库警告的解决与第二部分中修改cmd文件类似,但稍稍有些不同。具体的修改是在F28335.cmd文件末尾添加下文的代码。此时一个可发布的实现两路FIR滤波程序就大功告成了。Please Enjoy!!
& &firldb& &align(0x400) & FLASHH& &PAGE = 0
& &firldb_c& &align(0x400) & FLASHH& &PAGE = 0
& &firfilt& && &align(0x400) & RAML1& &PAGE = 0
& &firfilt_c&&align(0x400) & RAML1& &PAGE = 0
& &coefffilt&&align(0x800)& RAML2& &PAGE = 0
在线时间2292 小时
威望6349分
芯币10566枚
E金币249枚
TA的帖子TA的资源
五彩晶圆(高级), 积分 6349, 距离下一级还需 3651 积分
五彩晶圆(高级), 积分 6349, 距离下一级还需 3651 积分
这一类东西应用性很强,而且论坛这一方面的东西偏少,必须赞啊。
能为网友提供可参考意见是我的荣幸啊!以后还请斑竹多多指教!:tongue:&
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
& && &&&第一部分:如何将demo打造成自己的工程,并能实现移植(拷贝到其他人的电脑上能直接build、Debug)。demo路径:C:\ti\controlSUITE\libs\dsp\FPU\v131\examples\2833x_FIR& && && &如何导入工程并拷贝到自己的workspace就不再累述。重点是如何添加所需的文件。在此demo中,主程序文件在source目录下,其他的外设配置程序和cmd文件都是链接(link)过去的。& && && &1.拷贝外设配置的头文件和用到的浮点库文件到工程目录中,并对这些文件添加到工程中作include配置。头文件路径:
C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_common\include& &
此目录里的文件主要是对外设的一些宏定义(跟手册中一致)和对中断处理程序作了定义与声明。& &
C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_headers\include& && &
此目录中的文件就是外设寄存器的结构体定义与基本配置的一些函数。& && &&&将这些文件拷贝到工程目录下的include(新创建)文件夹中。拷贝库文件C28x_FPU_Lib.lib和FPU.h文件到工程目录的lib文件夹下,C28x_FPU_Lib.lib和FPU.h分别在目录:C:\ti\controlSUITE\libs\dsp\FPU\v131\lib&&C:\ti\controlSUITE\libs\dsp\FPU\v131\include& && & (1).Include头文件的配置:右击工程,点击Properties(Project-&Properties亦可),在CCS的Properties-&C2000 Compiler-&Include Options的Add dir to #include search path中删除 &${INSTALLROOT_TO_FPU_V131}/include&(FPU.h的路径)、&${INSTALLROOT_2833X_V133}/DSP2833x_common/include&、&${INSTALLROOT_2833X_V133}/DSP2833x_headers/include&添加 &${PROJECT_ROOT}/include&和&${PROJECT_ROOT}/lib/include&,如图1所示。& && && &INSTALLROOT_2833X_V133和INSTALLROOT_TO_FPU_V131具体代表什么意思,可在Properties-&Resource-&Linked Resource的Path Variables中查看,如图2所示。
& && &&&(2).Include库文件的配置:右击工程,点击Properties(Project-&Properties亦可),在Properties-&C2000 Linker-& File Search Path删除&${INSTALLROOT_TO_FPU_V131}/lib&,增加 &${PROJECT_ROOT}/lib&,如图3所示。
图1.jpg (84.05 KB, 下载次数: 2)
21:37 上传
图 1:Include Options
图2.jpg (136.59 KB, 下载次数: 1)
21:37 上传
图 2:Linked Resource
图3.jpg (98.84 KB, 下载次数: 1)
21:37 上传
图 3:File Search Path& && &&&2.拷贝外设配置文件到工程目录的src文件夹下(CCS会自动把文件更新到Project Explorer窗口),外设配置文件的路径:
C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_common\source
这个路径可通过右击链接的文件,点击Properties,在Properties-&Resource中查看到,如图4。当然这些文件中有些是不常用的,在编译时可以不用build,能加快编译的速度,并且杜绝某些错误。
& && &&&如何不需要的文件跳过编译?选中不需要编译的文件右击,选择Resource Configurations-&Exclude from build,在弹出的窗口中点击Select All。下次需要编译时选择Deselect All即可,当然Debug和Release是可选的,如图5。通用的外设配置文件见图6黑色部分,图6中灰色部分是demo中不需要用到的外设,以后可根据项目的需要添加外设,而把这些配置程序包含进工程。
图4.jpg (78.47 KB, 下载次数: 1)
21:37 上传
图 4:文件Resource
图5.jpg (24.81 KB, 下载次数: 1)
21:37 上传
图 5:Exclude from build
图6.jpg (28.87 KB, 下载次数: 3)
21:37 上传
图 6:Files Include or Exclude from build& && & 3.拷贝cmd文件到工程目录下。C2000的cmd文件主要有两类,第一类与BIOS系统有关,以用到的TMS320F28335为例,其与系统相关的cmd文件有DSP2833x_Headers_nonBIOS.cmd与DSP2833x_Headers_BIOS.cmd;第二类与可执行文件(CCS生成的.out文件)存储的介质有关,例如28335_RAM_lnk.cmd与F28335.cmd。在用于C2000微处理器的资料与工具集软件controlSUITE中,DSP2833x_Headers_nonBIOS.cmd与DSP2833x_Headers_BIOS.cmd的路径:
C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_headers\cmd
28335_RAM_lnk.cmd与F28335.cmd的路径:
C:\ti\controlSUITE\device_support\f2833x\v133\DSP2833x_common\cmd
& && & 上述目录中28335_RAM_lnk.cmd与F28335.cmd是TI官方提供的,未根据特殊的实例作优化。在本demo中,已经针对FIR滤波算法对28335_RAM_lnk.cmd做过修改,该文件已重命名为28335_FIR_RAM_lnk.cmd,其目录:
C:\ti\controlSUITE\libs\dsp\FPU\v131\cmd\28335_FIR_RAM_lnk.cmd
& && & 4.将链接(linked)的文件(带有小箭头的文件)全部删除,把不需要编译的文件Exclude from build,可执行文件是在Ram或Flash中运行可通过Exclude from build选择,具体操作见2。此时你自己的工程就打造完毕了。
[ 本帖最后由 newofcortexm3 于
21:37 编辑 ]
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
第二部分第一个错误
第二部分:实现两路FIR滤波过程中遇到的问题与解决方法。
第一个错误:
主要部分的代码:
#define FIR_ORDER& &63& &&&/* ORDER = NUM_TAPS - 1 */&&
#define SIGNAL_LENGTH (FIR_ORDER+1)* 4&&
#pragma DATA_SECTION(firFP, &firfilt&);
FIR_FP&&firFP = FIR_FP_DEFAULTS;
#pragma DATA_SECTION(dbuffer, &firldb&)
float dbuffer[FIR_ORDER+1];
//#pragma DATA_SECTION(sigIn, &sigIn&);
//#pragma DATA_SECTION(sigOut, &sigOut&);
float sigIn[SIGNAL_LENGTH];
float sigOut[SIGNAL_LENGTH];
float sigIn_c[SIGNAL_LENGTH];
float sigOut_c[SIGNAL_LENGTH];
#pragma DATA_SECTION(coeff, &coefffilt&);
float const coeff[FIR_ORDER+1]= FIR_FP_LPF64;
float xn,xn_c,yn,yn_c;
float Fir_filter(float intput);
void main( )
& && && & ……
& && &&&firFP.order=FIR_ORDER;
& && &&&firFP.dbuffer_ptr=
& && &&&firFP.coeff_ptr=(float *)
& && &&&firFP.init(&firFP);
& && & for(i=0; i & SIGNAL_LENGTH; i++)
& && && &//xn=0.5*sin(Rad) + 0.5*sin(Rad2); //Q15
& && && && &&&xn=0.5;
& && && && &&&sigIn=
& && && && &&&yn = Fir_filter(xn);
& && && && &&&sigOut=
& && && && &&&xn_c=0.6;
& && && && &&&sigIn_c=xn_c;
& && && && &&&yn_c= Fir_filter(xn_c);
& && && && &&&sigOut_c=yn_c;
& && && & Rad = Rad + RadS
& && && &Rad2 = Rad2 + RadStep2;
float Fir_filter(float intput)
& && &&&firFP.input=
& && &&&firFP.calc(&firFP);
& && &&&output = firFP.
& && &&&return output;
& && &程序Debug时的结果如图7、8、9所示,从图7中可以很明显的看到,yn与yn_c的值均受到了影响。图8、图9分别是数组sigOut和sigOut_c存储的对0.5和0.6滤波的结果,这两组数据均是有偏移的。(0.5的滤波结果是0.481887,0.6的滤波结果是0.5782644,这两个值均是通过单路滤波得到)。
result_problem_fun.jpg (57.46 KB, 下载次数: 0)
21:44 上传
图 7:滤波函数输出的结果
result_problem_fun11.jpg (82.7 KB, 下载次数: 0)
21:44 上传
图 8:第一个错误下数组sigOut存储的滤波结果
result_problem_fun12.jpg (83.59 KB, 下载次数: 0)
21:44 上传
图 9:第一个错误下数组sigOut_c存储的滤波结果
[ 本帖最后由 newofcortexm3 于
21:44 编辑 ]
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
第二部分第二个错误
& &&&第二个错误:
还是先看代码:
#define FIR_ORDER& && &63& &&&/* ORDER = NUM_TAPS - 1 */& &&&
#define SIGNAL_LENGTH (FIR_ORDER+1)* 4
& && && && && && && && && && && && &
#pragma DATA_SECTION(firFP, &firfilt&)
#pragma DATA_SECTION(firFP_c, &firfilt_c&)
FIR_FP&&firFP = FIR_FP_DEFAULTS;
FIR_FP&&firFP_c = FIR_FP_DEFAULTS;
& && && && && && && && && && && && && && &&&
#pragma DATA_SECTION(dbuffer, &firldb&)
float dbuffer[FIR_ORDER+1];
//#pragma DATA_SECTION(sigIn, &sigIn&);
//#pragma DATA_SECTION(sigOut, &sigOut&);
float sigIn[SIGNAL_LENGTH];
float sigIn_c[SIGNAL_LENGTH];
float sigOut[SIGNAL_LENGTH];
float sigOut_c[SIGNAL_LENGTH];
#pragma DATA_SECTION(coeff, &coefffilt&);
float const coeff[FIR_ORDER+1]= FIR_FP_LPF64;
float xn,xn_c,yn,yn_c;
void main()
& && && &……
& && && &firFP.order=FIR_ORDER;
& && && &firFP.dbuffer_ptr=
& && && &firFP.coeff_ptr=(float *)
& && && &firFP.init(&firFP);
& && && &firFP_c.order=FIR_ORDER;
& && && &firFP_c.dbuffer_ptr=
& && && &firFP_c.coeff_ptr=(float *)
& && && &firFP_c.init(&firFP_c);
& &&&for(i=0; i & SIGNAL_LENGTH; i++)
& && && &//xn=0.5*sin(Rad) + 0.5*sin(Rad2); //Q15
& && &&&xn = 0.5;
& && &&&sigIn=
& && &&&firFP.input=
& && &&&firFP.calc(&firFP);
& && &&&yn = firFP.
& && &&&sigOut=
& && &&&xn_c=0.6;
& && &&&sigIn_c=xn_c;
& && &&&firFP_c.input = xn_c;
& && &&&firFP_c.calc(&firFP_c);
& && &&&yn_c = firFP_c.
& && &&&sigOut_c=
& && &&&Rad = Rad + RadS
& && &&&Rad2 = Rad2 + RadStep2;
程序在Debug模式下在线仿真的结如图10、11、12所示,从图10中可以很明显的看到,yn的值收到yn_c的影响。图11、图12分别是数组sigOut和sigOut_c存储的对0.5和0.6滤波的结果,图12存储的滤波结果是正确的,而图11的滤波结果受到了影响。
result_problem2.jpg (63.24 KB, 下载次数: 0)
21:54 上传
图 10:滤波结果
result_problem21.jpg (81.88 KB, 下载次数: 0)
21:54 上传
图 11:第二个错误下数组sigOut存储的滤波结果
result_problem22.jpg (85.53 KB, 下载次数: 0)
21:54 上传
图 12:第二个错误下数组sigOut_c存储的滤波结果
[ 本帖最后由 newofcortexm3 于
21:54 编辑 ]
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
第二部分实现两路FIR滤波
以上两个错误的原因是没有清醒的认识FIR_FP这个结构体,其定义如下:
typedef struct {float *coeff_float *dbuffer_void (*init)(void*);void (*calc)(void*);}FIR_FP;其中,*coeff_ptr,*dbuffer_ptr都是指针,即每定义一个FIR_FP结构体,必须给这两个指针指定指向的地址空间。以上的两个错误都是符合理论的,但是执行的过程中出现了错误,是因为执行FIR滤波时两个input都会存放在同一个dbuffer中。以下是两路的FIR滤波是实现的部分程序:……#define FIR_ORDER& && &63& && && &#define SIGNAL_LENGTH (FIR_ORDER+1)* 4 & && && && && && && && && && && && && && && && && && && && && && && && && &&&#pragma DATA_SECTION(firFP, &firfilt&)#pragma DATA_SECTION(firFP_c, &firfilt_c&)FIR_FP&&firFP = FIR_FP_DEFAULTS;FIR_FP&&firFP_c = FIR_FP_DEFAULTS;& && && && && && && && && && && && && && &&&#pragma DATA_SECTION(dbuffer, &firldb&)#pragma DATA_SECTION(dbuffer_c, &firldb_c&)float dbuffer[FIR_ORDER+1];float dbuffer_c[FIR_ORDER+1];
//#pragma DATA_SECTION(sigIn, &sigIn&);//#pragma DATA_SECTION(sigOut, &sigOut&);float sigIn[SIGNAL_LENGTH];float sigIn_c[SIGNAL_LENGTH];float sigOut[SIGNAL_LENGTH];float sigOut_c[SIGNAL_LENGTH];& && && &#pragma DATA_SECTION(coeff, &coefffilt&);float const coeff[FIR_ORDER+1]= FIR_FP_LPF64;float xn,xn_c,yn,yn_c;……void main()
& && && &……
& && && &firFP.order=FIR_ORDER; & && && &firFP.dbuffer_ptr=& && && &firFP.coeff_ptr=(float *) & && && &firFP.init(&firFP);& && && && && && &firFP_c.order=FIR_ORDER;& && && &firFP_c.dbuffer_ptr=dbuffer_c;& && && &firFP_c.coeff_ptr=(float *)& && && &firFP_c.init(&firFP_c);
& && & for(i=0; i & SIGNAL_LENGTH; i++)& && & {& && && & xn=0.5*sin(Rad) + 0.5*sin(Rad2); //Q15& && && &&&//xn = 0.5;& && && &sigIn=& && &&&firFP.input=& && &&&firFP.calc(&firFP);& && &&&yn = firFP.& && &&&sigOut=
& && &&&xn_c=sin(Rad) + sin(Rad2); //Q15& && &&&sigIn_c=xn_c;& && &&&firFP_c.input = xn_c;& && &&&firFP_c.calc(&firFP_c);& && &&&yn_c = firFP_c.& && &&&sigOut_c=yn_c;
& && &&&Rad = Rad + RadS& && &&&Rad2 = Rad2 + RadStep2;& &&&}…… }& && && &主程序是没问题了,但编译还会出现警告(与图16中显示的基本一致),此时我们需要对28335_FIR_RAM_lnk.cmd做些修改。将原来firldb& &align(0x800) & RAML0& &PAGE = 0& &firfilt& && & align(0x800) & RAML1& &PAGE = 0&&& &coefffilt&&align(0x800)& RAML2& &PAGE = 0& &sigIn align(0x800) & RAML6& &PAGE = 1&&& &sigOut& &&&align(0x800) & RAML7& &PAGE = 1修改为:firldb& &align(0x400) & RAML0& &PAGE = 0& &firldb_c& &align(0x400) & RAML0& &PAGE = 0& &firfilt& && && &align(0x400) & RAML1& &PAGE = 0& &firfilt_c& &align(0x400) & RAML1& &PAGE = 0& &coefffilt align(0x800)& RAML2& &PAGE = 0cmd文件的配置格式和具体存储区的划分方式可参考文档TMS320C28x Assembly Language Tools User's Guide v6.1.pdf,编号spru513E。在此处描述为什么align(0x400)(指定0x400字空间)。在文档C28-FPU-LIB-UG.pdf(C:\ti\controlSUITE\libs\dsp\FPU\v131\doc)3.16节中指出缓冲区的最小值必须是2*(order+1)字。在工程链接文件中,firdb指定的空间大于或等于最小需求。在本例中,最小的空间为2*(63+1)=128words,而align(0x400)的空间为4*162=1024words,已经满足要求。修改完之后编译,Debug,程序执行结果如图13、14、15所示。从图13中可知xn_c是xn的2倍,符合程序,滤波的结果yn_c亦是yn的2倍,证明两路FIR滤波已经实现。图14、15分别存储了正弦函数不同幅值下滤波的结果,对比两图发现,数组sigOut_c中的元素是数组sigOut中相同下标元素的2倍。
结果1.jpg (63.87 KB, 下载次数: 0)
21:53 上传
图 13:两路FIR滤波实现结果
结果21.jpg (71.76 KB, 下载次数: 0)
21:53 上传
图 14:xn=0.5*sin(Rad) + 0.5*sin(Rad2)的滤波结果
结果22.jpg (72.88 KB, 下载次数: 0)
21:53 上传
图 15:xn_c=sin(Rad) + sin(Rad2)的滤波结果& && &此时在Debug模式下,两路FIR滤波算法已经实现,在下一部分将介绍在Release模式下实现两路FIR滤波。
[ 本帖最后由 newofcortexm3 于
21:53 编辑 ]
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
发现一个问题,一旦文字多的时候,字体和大小就不可控了,编辑变得非常困难。
花了两天时间重跑程序、截图、整理文字,现在终于休息下了。
在线时间1928 小时
威望3821分
芯币7250枚
E金币461枚
TA的帖子TA的资源
五彩晶圆(中级), 积分 3821, 距离下一级还需 2179 积分
五彩晶圆(中级), 积分 3821, 距离下一级还需 2179 积分
果断收藏备用
在线时间223 小时
威望1226分
芯币3231枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
纯净的硅(高级), 积分 1226, 距离下一级还需 774 积分
回复 9楼ltbytyn 的帖子
能为网友提供可参考意见是我的荣幸啊!以后还请斑竹多多指教!
在线时间7589 小时
威望10467分
芯币10571枚
TA的帖子TA的资源
裸片初长成(初级), 积分 10467, 距离下一级还需 9533 积分
裸片初长成(初级), 积分 10467, 距离下一级还需 9533 积分
精华呀,谢谢分享!
在线时间16 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
一粒金砂(中级), 积分 10, 距离下一级还需 190 积分
在线时间3616 小时
威望31866分
芯币59558枚
TA的帖子TA的资源
好文章 !!!
楼主也学会使用&${PROJECT_ROOT}&了啊
[ 本帖最后由 dontium 于
22:00 编辑 ]
在线时间6 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
3q楼主啊,正在搞dft的移植,很有帮助
在线时间18 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 12, 距离下一级还需 188 积分
一粒金砂(中级), 积分 12, 距离下一级还需 188 积分
我还没有看完,就决定必须要给楼主一个赞了!我觉得之前在网上找的资料根本没有这样手把手教的,都是千篇一律的告诉大家导入工程,根本没什么用,先谢谢楼主了!
在线时间132 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 100, 距离下一级还需 100 积分
一粒金砂(中级), 积分 100, 距离下一级还需 100 积分
现在还没用到这些,先收藏了,谢谢楼主慷慨分享。
每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。
在线时间8 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
不错的资料
在线时间9 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
学习学习& && && && && && && && &&&
在线时间35 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
在线时间4 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
感谢分享,很好啊
荣誉会员勋章
曾经的版主且威望大于2000,或对EEWORLD论坛有突出贡献的坛友
论坛测评队员
EEWORLD 官方微信
Powered by基于卡尔曼滤波的语音增强算法研究
&&&&中国科学技术大学 硕士学位论文 基于卡尔曼滤波的语音增强算法研究 姓名:章旭景 申请学位级别:硕士 专业:电路与系统 指导教师:李辉
摘要摘要在噪声环境下,许多语音处理系统的性能急剧下降,语音增强作为解决噪声污染的一种有效处理技术,一直是语音信号处理领域中的研究热点。语音增强的 &&&&目的就是从带噪语音信号中尽可能提取出干净语音信号,提高信噪比,改善语音质量。 卡尔曼滤波器是均方误差最小意义下的最优线性估计器,在非平稳条件下也可以保证最小均方误差滤波。基于卡尔曼滤波的语音增强算法结合了语音的生成 模型,并且适合于非平稳噪声干扰。卜.的语音增强。本文对基于卡尔曼滤波的语音增强方法进行了深入研究,主要做了以下工作: 1.研究了卡尔曼滤波理论中的预测器,滤波器和平滑器。研究了其在语音增强中的应用,实现了基于卡尔曼滤波的语音增强系统。2.针对传统的卡尔曼滤波语音增强后语音存在较多残留噪声问题,给出了一种 基于语音谱似然比的噪声功率谱整形方法。最小统计值跟踪方法是常见的噪声功率谱估计方法之一,其估计值往往偏低,因此本文通过基于语音谱似然 比的加权系数来修正其估计的噪声功率谱,在语音谱成分较弱的地方,增加噪声功率谱的估计,使得卡尔曼滤波后的语音中残留噪声减少,并且听觉上 更加清晰自然。3.结合子带分解技术,本文研究了。‘种基于子带卡尔曼滤波的语音增强方法。实验结果表明,在提高语音质量的同时,子带分解降低了卡尔曼滤波的模型阶数,大大地减少了语音增强系统的计算量,更容易实时实现。 关键词: 语音增强卡尔曼滤波子带分解噪声功率谱整形 abstractabstractin the noiseenviroment,athe perf.onnance of most speech processing systemsandeteriorates sha巾ly.assolution to noise pollution,speech enhancement isefi.ective teclmology,and has been being the researchfbcus of the speech signalprocessing all the time.the pu巾ose of speech enhancement is to extract clean speech signal from the noisy speech and speech quality. kalman nlter isaul asf打as possible,to improve signal to noiseratio(snr)optimallinear estimator in the minimum mean square e玎orcriterion,with non—stationa巧signal processing capacity.speech enhancement based0nkalman filtering,integrating with speech generation model,can be applied inthis thesis, speechnonstationary noise environnlent. inenhancemembasedonkalman filtering is in-depth studied and the f.ouowing work has been done: 1. predictor,filter and smoother in kalamn filtering theory and their application in speech enhancement technology is studied.a speech enhancement system basedonkalman filtering is realised.on2.there is much much residual noise in the enhanced speech basedkalmanfiltering,the thesis introducesamethod to reshape noise power spectmm throughaspeech spectrallikelihood ratio.minimum statisticaltracking iscommon noisepower spectmm estimation method,but the estimated value is oren low.so the thesisimroducesametllod to reshape noise power spectrum th.ough speechspectral likelihood ratio.it increases the estimation of noise power spectmm in the f-requency components where speech is weal(.combined with this method,the speech enhancement basedonkalman6lteringcanreduceresidualnoisesignificailtly,and make enhanced speech clearei‘and more natural. 3. by using the subband decomposition techniques,we propose enhancement method basedon asubband speechkalman行lter.experiments results show that thismethod improves the quality of the enhanced speech and also largely reduces the computation conlplexity due to the low orders of models in subbands,and thus itcanbe easily realized reaitime.key words:speech enhancement,kalmajl nltering,subband decomposion,reshaping of noise sdectral 中国科学技术大学学位论文原创性声明本人声明所呈交的学位论文,是本人在导师指导下进行研究工作所取得的 成果。除已特别加以标注和致谢的地方外,论文中不包含任何他人已经发表或 撰写过的研究成果。与我一同工作的同志对本研究所做的贡献均己在论文中作 了明确的说明。…名:缸丑磐嗍:产中国科学技术大学学位论文授权使用声明作为申请学位的条件之一,学位论文著作权拥有者授权中国科学技术大学 拥有学位论文的部分使用权,即:学校有权按有关规定向国家有关部门或机构 送交论文的复印件和lu子版,允许论文被查阅和借阅,可以将学位论文编入有 关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论 文。本人提交的电子文档的内容和纸质论文的内容相一致。 保密的学位论文在解密后也遵守此规定。口公开口保密(——年)作者签名:签字日期:扯 班导师签名:签字日期: 第一章绪论第一章绪论1.1研究背景随着信息技术的快速发展,语音已成为信息时代最重要的信息交流工具之 一,但在实际环境中,语音总会不同程度地受到噪声干扰,这些噪声包括从周 围环境、传输媒质中引入的噪声、电气设备的噪声以及其他说话人的干扰等 等。在严重情况下,语音将会完全淹没到噪声中,无法辨别原始语义。语音质量 的下降会使许多语音处理系统的性能急剧恶化。比如,安装在汽车、飞机、坦 克和舰船上的电话,街道、机场上的公用电话,战场上的电台等常常受到很强 的背景噪声干扰,严重影响了通话质量;语音识别系统在实验室环境中可取得 相当好的效果,但在噪声环境中,尤其是在强噪声环境中使用时,系统的识别 率将受到严重的影响;低速语音编码同样也会受到噪声的影响,由于语音生成 模型是低速率语音编码的基础,当语音受到严重干扰时,提取的模型参数将很 不准确,重建的语音质量急剧恶化。此时采用适当的语音增强技术进行预处 理,将能有效地改善系统性能。因此,语音增强技术在高速发展的信息时代有 重要价值。多年以来,它一直是国内外许多大学和研究机构的一个研究热点。目前,语音增强已在语音处理系统、广播通信、多媒体技术、智能家电,安全监听等领域内得到了越来越广泛的应用。一般情况下,语音信号和外界环境噪声信号都是随机信号,要完全消除噪声是不现实的,那么语音增强目的就是从含有背景噪声的语音中尽可能地提取 出干净语音。1.2语音增强基础知识语音增强是语音信号处理的重要方向之一,它涉及到很多学科,不仅与语音信号数字处理理论有关,而且还可能涉及到数理统计、神经生理学和语音学等学科。此外,语音增强所要面临的噪声来源众多,常见的如汽车、街道、机场、工厂车间、人声嘈杂的公共场合等。因此要有效地增强语音,必须对语音的产生,语音信号的特征,噪声的特性、人耳的感知特性以及语音信号处理的一些基本方法有所了解。1.2.1语音信号的数字模型 只有建立了语音信号的数字模型,才能有效地利用计算机定量地对语音信号 进行模拟和分析处理。所以语音信号的数字模型是语音信号处理的基础。所谓建 第一章绪论立数字模型就是要寻求一种可以表达一定物理状态下量与量之间的数学表示。它 的基础是人的发音器官的特点和语音产生的机理。 语音产生的机理如图1.1所示,发声器官分为三部分:肺、喉和声道。在发 声机制中,肺的作用相当于一个动力源,将气流输送至喉部。喉将来自肺部的 气流调制为周期脉冲或类似随机噪声的激励声源,并送入声道。声道包括口 腔、鼻腔和咽腔,它们对声源的频谱进行整形而产生不同音色的声音。声源还 可能由声道的收缩和内壁产生,这一作用发生在声道内部,在图1.1中没有表 示,这样,除随机噪声和周期性声源之外还产生一个冲击声源。我们在此对激 励源做了理想化处理,从语音产生机理的解剖学和生理学意义上来说,不会产 生出完美的周期性、冲击性或噪声般的声源。声源经声道润色频谱后,在嘴唇处的气压变化就形成了可传播的声波,被人感知为语剖¨。声迮喉近怫畦图1.1语音产生机理的简化图解肺人们在深入研究人发音器官的特点和语音产生机理的基础上,建立了一种离散时域的语音信号生成模型【2】(图1.2)。在这种模型中,语音信号被看成是线性时变系统在随机噪声或准周期脉冲序列激励下的输出。在图1.2中,完整的语音信号的数学模型可以用三个子模型:激励模型、声道模型和辐射模型的串联来表示。激励模型:激励模型可分为清音激励和浊音激励,按照浊音/清音开关所处 的位置来决定产生的语音是浊音还是清音。在浊音情况下,激励信号由一个周期 脉冲发生器产生。在清音情况下,激励信号由一个随机噪声发生器产生。这种简单的把激励分为浊音和清音两种情况是不全面的。但该方法由于其简单并且性能优越而被广泛地采用。声道模型:目前经常用到的声道模型是共振峰模型。一般人的声道长度约为 17cm,可以计算出在500hz、1500hz、2500hz、3500hz、4500hz附近有5个共 振峰‘21。每个共振峰对于系统函数的一个极点,其系统函数矿(z)可用下面的表达:y(z)=—i万一l一乙矧嚷z“21(1.1) 第一章绪论辐射模型:声道的终端为口和唇,从声道输出的是速度波,而语音信号是 声压波,二者的比称为辐射阻抗。即:尺(z)=r(1一l儿)。 在这个模型中,激励源参数和声道模型参数都是随时间变化的。由于发声器 官的惯性使这些参数的变化速度受到限制。对于声道参数,在10~30ms的时间 间隔内,可以认为它们近似保持不变。对于激励源参数,大部分情况下这一结论 也是『f确的。这种离散时问模型有时也称为“激励源/滤波器”模型。即在短时 时阳j内,语音信号是由激励信号和传输函数h(z)线性系统而产生输出的。ⅳ(z)是由激励模型、基音 频率 语音波形 信号纠n}图1.2语音信号产生的离散时域模型1.2.2语音和噪声特性 这里简单地介绍一下在语音增强处理时涉及到的一些语音和噪声的特性: 1.语音特性 上述的发声系统在发不同声音时的生理机构不同,决定了语音信号的非平稳 性,并且是一种随机信号。但由于其生理器官变化的缓慢性,在一段很短的时『白j 内(10~30ms)内,可以假设其声道及其输入是平稳的。这意味着在这段时间内语 音信号的短时谱的相对稳定性。利用这种特性,应用平稳的随机过程来分析和处 理语音信号,构成了语音信号分析处理的基础。 在上述数学模型中,根据激励源可以简单地把语音分为浊音和清音两类。这 两类在激励上的明显差异,导致在语音信号特性上也有明显区别。浊音在时域上 呈现出明显的周期性,在频域上有共振峰结构,而且能量大部分集中在较低频段 内。清音则完全不同,它没有明显的时域和频域特征,类似于白噪声。在语音增 强中,可以利用浊音的周期性特性,提取语音分量或者抑制非语音信号。 同时,作为一个随机过程,语音信号也可以利用许多统计分析特征进行分析。 但由于语音信号非平稳、非遍历,因此长时间时域统计特性对语音增强算法的意 义不大。语音的短时谱幅度统计特征是时变的,只有当分析帧长趋于无穷大时, 第一章绪论才近似具有高斯分布。在高斯模型的假设中,认为傅旱叶展丌系数是独立的高斯随机变量,均值为零,而方差是时变的。在有限帧长时这种高斯模型只是一种近似的描述,可以在宽带噪声污染的语音增强中应用【3】。 2.噪声特性 噪声通常可以定义为通信、测量以及其他信号处理过程中的无用信号成分。 由于环境的复杂性,噪声可以分为加性噪声和非加性噪声(如传输系统的电路噪 声)。考虑到加性噪声更普遍且易于分析问题,并且对于某些非加性噪声,可以 通过变换转变为加性噪声。因此,为简化讨论,本文主要分析加性噪声的干扰。 由于噪声来源众多,随应用场合而异,特性也各不相同,根据噪声的时域或频域 特性,可以将噪声大致归为如下几类i列: (1)周期性噪声 其特点是频谱上有许多离散的线谱,主要来源于发动机等周期运转的机械设 备。显然这种噪声可以用梳状滤波器予以抑制,但实际信号受多种因素的影响,线谱分量通常转变为窄带谱结构,且这些窄带谱往往是时变的,位置也不固定。必须采用自适应滤波的方法才有可能区分这些噪声分量。 (2)脉冲噪声脉冲噪声表现为时域波形中突然出现的窄脉冲,主要来源于爆炸、撞击、放电及突发性干扰。消除脉冲噪声通常在时域内进行,其过程如下:根据带噪语音 信号幅度的平均值确定阈值,当信号幅度超过这一阈值时判为脉冲噪声,然后对 信号进行适当的衰减,就可消除噪声分量。 (3)宽带噪声 宽带噪声的来源很多,热噪声、气流噪声及各种随机噪声源,量化噪声都可 视为宽带噪声。宽带噪声与语音信号在时域和频域上完全重叠,只有在无声期间,噪声分量才单独存在。因而消除这种噪声比较困难。对于平稳的高斯噪声,通常可以认为是高斯白噪声。而不具有白色频谱的噪声,可以进行白化处理或者采取特殊的处理方法,如本文后面介绍的建模的方法。(4)同声道语音干扰 在实际生活中经常会遇到多人同时说话的情况,此时不需要的语音就形成了 同声道干扰。区别干扰噪声和有用语音的基本方法是利用它们的基音差别。考虑到一般情况下两种语音的基音不同也不成整数倍,这样可以用梳状滤波器提取基 音的各次谐波,再恢复出有用信号。 1.2.3人耳的听觉感知特性 语音感知对语音增强研究有重要作用。这是因为语音增强效果的最终度量是人的主观感受。语音感知问题涉及到生理学、心理学、声学和语音学等诸多领域,4 第一章绪论这是一个复杂的问题,有待进一步研究。尽管如此,目前已有一些有用的结论可以应用于语音增强: (1)人耳对语音的感知是通过语音信号中各频谱分量幅度获取的,对各分量的相 位则不敏感。 (2)入耳对频谱分量强度的感受是频率与能量谱的二元函数,响度与频谱幅度的 对数成证比。 (3)人耳对频率高低的感受近似与该频率的对数值成j下比。 (4)人耳有掩蔽效应即强信号对弱信号有掩盖的抑制作用。掩蔽的程度是声音强 度与频率的二元函数。对频率临近分量的掩蔽要比频差大的分量有效得多。 (5)短时谱中的共振峰对语音的感知十分重要,特别是第二共振峰比第一共振峰 更为重要,因此对语音信号进行一定程度的高通滤波不会对可懂度造成影 响。 (6)人耳在两人以上的讲话环境中有能力分辨出需要聆听的声音。这种分辨能力 来源于人的双耳输入效应,称为“鸡尾酒会效应”。1。3语音增强的历史和发展现状在实际需求的推动下,早在20世纪60年代,语音增强这个课题就己经引起了 人们的注意。到了20世纪70年代,随着数字信号处理理论的不断发展,人们对语 音增强技术的研究形成了一个高潮,取得了一些基础性成果,这使语音增强发展成为语音信号数字处理的一个重要分支。经典的谱相减法和维纳滤波方法就是在这一时期提出来的。但由于各种算法计算量问题,导致它们的实用性受到影响。进入80年代后,vlsl技术的发展为语音增强的实时处理提供了可能,同时也涌现了大量新的算法,在语音识别中使用的概念和方法又被借鉴到语音增强算法中。90年代后,移动通信的飞速发展为语音增强研究提供了现实的动力,由于对 之d订的增强效果仍然不够满意,又进行了新的尝试。比如将小波变换用于语音增强中,利用神经网络(ann.arificial neuralnet、vorks)进行语音增强,基于麦克风阵列的语音增强等。一直以来,针对不同的背景噪声或者某个特殊的应用要求, 人们提出了各种新的语音增强算法。尽管这些算法在理论上还没有完全解决语音 增强问题,但有些方法已经证明是有效的,并在实际的应用中被采用。 语音增强算法可从信号输入的通道数上分为单通道的语音增强算法与多通 道的语音增强算法。单通道语音系统在实际应用中较为常见,如电话,手机等。 这种情况下语音与噪声同时存在一个通道中,语音信息与噪声信息必须从同一个 信号中得出。一般这种语音系统要求噪声比较平稳,以便在非语音段对噪声进行估计,再依据估计出来的噪声对带噪的语音段进行处理。如果系统是一个多通道 第一章绪论的语音系统,各个通道之阳j存在着某些相关的特性,这些相关特性对语音增强的处理十分有利。 单通道语音增强是语音增强的基础,本文将重点研究和实现基于卡尔曼滤波 的单通道语音增强方法。 早在上个世纪60年代,匈牙利数学家rudolfemil kalman就提出了卡尔曼滤波器14i,并用于控制领域。而到1987年,首次由k.k.paliwal将卡尔曼滤波应用 到语音增强【5j,但是仅限于加性白噪声环境下语音增强。1989年,美国的j.d.gibson等又将卡尔曼滤波的语音增强扩展到处理有色噪声环境【61。1999年, 新加坡zenton goh等人提出了改进的卡尔曼滤波语音增强算法【。71,利用了语音的清浊音模型。2001年加拿大的m.gabrea提出了自适应的卡尔曼滤波语音增强算 法18j。2003年加拿大的n.ma等人将人耳听觉特性的感知滤波器结合到卡尔曼滤 波语音增强【91。近年来,更是提出了很多有关卡尔曼滤波语音增强算法【10钔】。相比于维纳滤波方法il 41,卡尔曼滤波具有处理非平稳信号的能力,更符合语音的特 性,并且结合了语音的生成模型,利用语音的线性预测系数构成状态转移矩阵,增强后语音中残留的音乐噪声较少,语音自然度更高。1.4语音增强的质量评价语音增强算法的主要目的就是尽可能地消除噪声,因此信噪比snr(signalnoiseratio)的提高自然而然地成为筏量语音增强性能的重要准则。但是,语音最终接受者是人,是人的听觉系统最后来处理语音信号,因此信噪比不是唯一的最合适的准则。语音质量的衡量包括两方面内容:清晰度和可懂度。前者是衡量语音中字、 单词和句子的清晰程度。而后者则是对讲话人的辨识水平。语音质量评价不但与 语音学、语言学和信号处理等学科有关,而且还与心理学、生理学等有着密切的 联系,因此语音质量评价是一个极其复杂的问题。对此多年来人们不断地努力, 提出了许多语音质量评价的方法,总体上看可以将语音质量评价可分为两大类: 主观评价和客观评价。 1.4.1主观评价 主观评价以人为主体来评价语音的质量,它是在一组评听者对原始语音和失 真语音进行对比测听的基础上,根据某种事先约定的尺度对失真语音来划分质量 等级,它反映了测听者对语音质量好坏程度的一种主观印象。主观评定方法符合 人类听话时对语音质量的感觉,目前得到了广泛的应用。常用的方法有平均意见得分(meanopinionscore,简称mos得分),判断韵字测试(diagnosticrhyme6 第一章绪论test,简称drt得分),判断满意度测量(diagnosticacceptabilitymeasure,简称dam得分)等。主观评价的优点是符合人对语音质量的感觉,缺点是费时费力费钱,且灵活性不够,重复性和稳定性较差,受人的主观影响较大等。(1)mos得分法【15jmos得分法从绝对等级评价法acr(absolutecategoryrating)发展而来,用于对语音整体满意度或语音通信系统质量的评价。acr是用于针对电话通信的总体质量评价,mos和acr都采用5级评分标准,评听者在听完受测语音后, 从5个等级中选择其中一级作为他对受测语音质量的评价。全体评听者的加权平均分就是受测语音质量的mos分,即对各种投票意见按规定数值进行加权,之 后再平均得到意见分。加权平均统计得分公式如下:'.m∞:二y’.形m(1.2)其中ⅳ是总票数,ⅳ是得某种分的票数,彬即将重建语音质量分为优(5分)、良(4分)、中(3分)、差(2分)及坏(1分)共5个等级测验,如表1.1所示。在数字语音通信中,mos得分在4.o~4.5分为高质量数字化语音,达到长途电话 网的质量要求,接近于透明信道编码,也称之为网络质量或长途质量,这时重建语音和原始语音只有很少的细节差异,且若不进行对照听比就觉察不出这种差异。mos分在3.5分左右称作通信质量,这时感到重建语音质量下降,但语音自 然度和清晰度仍很好,且听起来没有疲劳感,但不妨碍正常通话。mos分在3.0分以下称为合成语音质量,一般指低比特率声码器合成的语音所能达到的质量。mos分在2.0分以下重建语音有较强的畸变或失真,听起来已有疲劳感,甚至听觉上无法忍受。表1.1 mos评分等级表mos判分5 4质量级别(肜)优 良由失真级别 不察觉 刚有察觉32 l有察觉稍觉可厌 明显察觉,町厌仍r日,忍受 不口j.忍受差 坏(2)判断韵字测试 判断韵字测试是反映语音清晰度或可懂度的一种测试方法。这种测试方法提 供了相当数量的一对对的样本字,每一对的样本字只有丌头的辅音是不同的,它 们分别用来侧试发音的一系列不同特性,如浊音/清音/鼻音/齿擦音/连读等等。7 第一章绪论被测者需要指出在测试字对中,他们听到的是哪一个单词。总的判断韵字测试得 分是由以下公式得出:drt:旦坐业凸鱼业×100%n测试宁数量(1.3)通常认为drt为95%以上时清晰度为优,85‰94%为良,75%~84%为中,65‰75%为差而65%以下为不可接受。1,4.2客观评价语音质量客观评价是以语音系统的输入信号和输出信号之间的误差大小来判别语音质量的好坏。是一种误差度量。目前,常用的客观评价方法有时域失真测度:信噪比(snr)、分段信噪比(segmental snr,segsnr)【16】; 频域失真测度:likelihood如对数谱测度(log—spectral distortion,lsd)、对数似然比测度(logratio,llr)㈣等:感知域失真测度:如语音感知质量评价算法(perceptualevaluation of speechquality pesq)【1 7】等。(1)信噪比snr和分段信噪比segsnr snr是衡量针对宽带噪声失真的语音增强算的常规方法。假设y(门)表示带 噪信号,x(刀)表示其中的纯净语音信号,至(疗)表示相对应的增强信号,经典形式 的信噪比定义为:洲。1∑x2(,)010910瓦茅丽在上式中可以看出,要计算信噪比必需知道纯净语音信号,但在实际应用中这是不可能的。因此,上述方法主要用于纯净语音信号和噪声信号都是己知的算 法的仿真中。经典信噪比只能给出一个大致的信噪比。由于语音信号是一种缓慢变化的短 时平稳信号,因而在不同时间段上的信噪比也应不一样。为了改善上面的问题,可以采用分段信噪比。它的定义如下:f,一i一=罟》。。8∑x2(朋上+,),=0 ^一l[拈】(1.5)∑【x(,竹三+f)一圣(,力三+,)】2其中,肘表示语音帧数,£是语音帧长度,所£表示语音帧的开始点。为了 克服计算出来的信噪比过高或者过低,对于每帧计算出来的信噪比设定高低门 第一章绪论限,分别为35db和0db。分段信噪比segsnr是时域测度方法中最常用的评价 方法,与主观评价的相关度有所提高。(2)对数谱测度lsd频域失真测度也叫谱失真测度,这些测度与时域测度相比性能更可靠,对信 号时间同步要求也不高。若测度计算的结果值越小,则说明失真语音和原始语音 越接近,即语音质量越好。其中最常用的方法为对数谱失真测度lsd。lsd计算如下:三肋=击篓{丽嘉笔[%g¨,i x(列卅0.o钆i j(纠)i]2}2m为帧数。一般lsd值越小,其对数谱的失真度越小。(3)语音感知质量评价pesqn 6,其中x(七,,)和j(七,,)分别为干净语音和增强语音的短时傅立叶变换,ⅳ为帧长,语音感知质量评价pesq是国际电信联盟itu.t的p.862建议的算法,它是最新评价主观语音质量的客观工具。该算法将话音的频率、响度等物理特性与人 类心理上的感知特性的对应关系用数学模型来表示,即用客观数学模型的评价来 模拟主观的评价。该算法(图1.3)采用时频映射、频率弯折和响度弯折等方法,尽可能将语音中可以感知的特性在数学上完美的表达。在pesq模型中,提取出的语音特征都是与主观感觉直接相关的,输入语音 和通过设备、网络或系统后的输出语音的任何“非感觉”的差别都不会对语音质 量评价产生影响。所以pesq是一种主客观相关性较高的音质客观评价方法。 pesq采用线性评分制度,以_o.5~4.5之间的数值表示被测语音与参考语音相比 语音质量的高低。输出语音质量越接近输入语音,则分数越接近4.5,否则评分 越低。基于该模型的评分结果与mos主观评分的相关度高达o.935,而且两者近 似成线性关系,误差方向一致,可比性非常强。通常认为,4.o分的mos分数与 3.7.3.9的pesq分数的语音质量相当。’0驽辅^.一-圈一 ….,圈时间调整 和经准 处理;僻编出蕊 一l1园蛩恒重衔调整失真闻隅d竺!兰兰i语罾mc6图1.3 pesq结构框图9 第一章绪论1.5论文的研究内容与结构安排本文主要研究基于卡尔曼滤波的语音增强算法。立足于跟踪国内外的新技 术,设计实时实用的增强方法。增强过程不以单纯提高信噪比为目标,同时提高 语音的可懂度、舒适度,保证语音失真小和无“音乐噪声”。主要研究工作如下: (1)广泛地参阅了国内外相关文献,了解语音增强技术背景与常用方法。 (2)研究了卡尔曼滤波理论中的预测器,滤波器和平滑器。研究了其在语音 增强中的应用,实现了基于卡尔曼滤波的语音增强系统。 (3)针对语音增强系统中必不可少的噪声估计问题,分析了基于语音活动检测(vad)和最小值统计跟踪两种噪声谱估计方法。针对卡尔曼滤波的语音增强,研究了一种基于语音谱似然比的噪声功率谱整形方法,并通 过实验仿真比较。 (4)考虑到卡尔曼滤波算法的计算量问题,研究了一种基于子带卡尔曼滤波 的语音增强方法,通过对带噪信号的子带分解,降低了语音及噪声的模 型阶数,在减少其计算量的同时,语音质量也有所提高。 本文的组织如下:第一章绪论介绍语音增强的课题背景及其相关概念。第二章介绍卡尔曼滤波理论,第三章介绍基于卡尔曼滤波的语音增强及模型参数估计方法。第四章介绍了噪声谱的估计方法及一种噪声谱的整形方法,并结合卡尔曼 滤波,比较了语音增强的效果。第血章介绍了基于子带卡尔曼滤波的语音增强, 第六章为总结与展望1.6小结本章简单地阐述了语音增强的研究意义和应用、发展现状以及基本原理,然后提出本论文的主要工作和结构安排。lo 第二章}尔曼滤波的基本理论第二章卡尔曼滤波的基本理论维纳滤波和卡尔曼滤波都是最小均方误差意义下的最优估计。维纳滤波虽然 是最小均方误差意义下的最优估计,但只能在平稳条件的约束下。卡尔曼滤波突破了经典维纳滤波方法的局限性,在非平稳状态下也可以保证最小均方误差估 计。在卡尔曼滤波中,引入了系统状态变量和状态空间概念。从状态空间的观点 看,状态比信号更广泛、更灵活,非常适合处理信号估值问题,信号可视为状态或状态分量,因而非常适合处理多变量系统。卡尔曼滤波器给出了一套在计算机 上容易实时实现的最优递推滤波算法,适合处理多变量系统、时变系统和非平稳 随机过程,获得了广泛的实际应用,其应用领域包括机器人导航,控制,传感器数据融合甚至包括军事方面的雷达系统以及导弹追踪等等。2.1维纳滤波20世纪40年代,winere和kolmogorov彼此独立地创立了经典维纳滤波理论 【’8,19】,维纳滤波是对随机系统的一种最优滤波或最优估计。对离散随机系统模型 y(门)=x(门)+v(门),其中v(门)表示加性噪声,工(胛)表示系统真实值。维纳滤波方 法就是按最小均方误差准则对x(刀)进行估计,即设计一个线性滤波器办(刀)来估计目标信号值曼(胛)=办(丹),.c y(门),使均方误差s(疗)=e{[曼(甩)一x(刀)】2)最小。 在x(力)及v(,7)不相关且均为平稳信号的假设6仃提下,对于随机优化问题的频 域解可用滤波器表示:日(w):—2业、7(2.1)s,(w)+&(w)s。(w),s,(w)分别表示x(刀),’,(玎)的功率谱密度。这就是维纳滤波器。 维纳滤波只有在平稳条件下才能保证最小均方误差意义下的最优估计。而语 音是非平稳的,只是在短时间内(10~30ms内)近似平稳,实际环境中,噪声也常 常是非平稳的。这是维纳滤波的缺陷所在。2.2卡尔曼滤波器20世纪60年代,随空间技术和电子技术的发展及高速电子计算机的出现,要 求处理复杂的多变量系统、时变系统等非平稳随机过程,因此需要实时、快速计 算的最优滤波器。在这种应用背景下,kalman突破了经典wiener滤波理论和方 法的局限性,提出了时域上状态空间滤波方’法【引。 第二章}尔曼滤波的基本理论一个动态系统的状态由于受到外部的干扰时,可以分为两个组成部分:一部 分是由己知的运动方程正确地预测出来,另一部分可以看作是随机分量。对于线 性离散时l、日j系统也可以分为两个部分,即使用行维状态方程和研维测量方程描 述: x(,)=爿z(,一1)+b蹦(,一1)+w(,一1) 少(,)=cx(,)+v(f)(2.2) (2.3)其中x(f)∈尺”是雅维状念矢量,y(f)∈舻是聊维输出矢量,”(f)∈只’维控制矢量,w(f)和v(f)分别是过程噪声(process noise)和观测噪声(measurementnoise),矩阵以。。,b。,,g。,在这旱被假定为己知的和时不变的。且控制矢 量甜(,),输出矢量y(f)是可观测的。由于受到噪声的干扰,无法从观测的输出矢量获得状态矢量的精确估计,而只能在一定统计意义下对状态矢量做出最优估 计,卡尔曼滤波就是在最小均方误差统计下,对状态矢量x(,)的最优估计。为了推导卡尔曼滤波算法,先对(2.2)、(2.3)描述的线性离散时间系统做如下一些假设【‘8l:假设1过程噪声w(,)和观测噪声v(,)是零均值、方差分别为髭和配,且互不相关的白噪声,即它们满足如下的对称『f定协方差阵:c。v[翟]-e{[翟].[嚣丌=瞄三]£㈤w∽)=悸葛 e{v(七)v(/)}={髻 主二‘假设2初始状态x(0)不相关于w(,)和v(,),且:&(o)=‰,ei(x(o)一心)(工(o)一岛)7‘i=尸(o)假设3“(f)是已知确定性(非随机)控制量。(2.4)在已知的观测值序列d7={“(1),材(2)…“(f)y(1),夕(2)…夕(f)}下, 把估计量记作豆(/i f),卡尔曼滤波就是在最小化均方误差阵:ei(z(/)一j(/i,))(石(/)一j(/l,))7 i的意义下,对状念矢量的估计。按照l和j的不同关系,分别把: ,=,时,称为卡尔曼滤波器 ,<,时,称为卡尔曼平滑器(2.5) 第一二章}尔曼滤波的基本理论,>,时,称为卡尔曼预测器 首先,定义两种误差协方差矩阵: 定义:先验估计舅(,l f—1)是用f时刻以前的所有数据得到的x(,)的最佳估计 值, 即d卜1={“(1),“(2),...,“o—1),y(1),y(2),...,y(卜一1)}。先验估计误差p一(,)=x(,)一曼(,i f—1),先验误差协方差阵记p一(,)或者尸一(,i f一1)或尸(f l,一1):p一(,)=ep(f)p卅(,)}定义:(2.6)后验估计王(f 1 f)是在先验估计的基础之上,再利用当前f时刻的观测数据束得到状态矢量的最佳估计。后验估计误差p+(f)=x(f)一舅(f l f)。后验误差协 方差阵记p+(,)或者尸+(,l,)或p(f l f):p+(f)=£p(f)p+”’(,)}下面进行卡尔曼滤波递推公式的直观推导:(2.7)设如果在时刻f时,在f一1时刻的后验误差协方差阵尸+0—1l卜1)和i(f—l lf一1)是已知的。那么根据状态方程(2.2)来预测时刻,的状态值,一个简单而直观的想法是,因为w(f)的零均值,时刻f时的合理预测值为: 曼o l f—1)=4贾o一1lf一1)+b“(f)(2.8)而考虑到v(r)也是零均值,因而量测的期望值为c勇(,i,一1)也是合理的。考 虑到上述两点后,估计得到时刻,时状态矢量的后验估计为预测值,即先验估计 和测量值与预测值之差的线性加权: 曼(,i f)=j(f i,一1)+ko)(y(,)一c舅(,i f~1))(2.9)这罩k(f)是待定的卡尔曼增益,确定卡尔曼增益的准则是使后验误差协方差阵极小。将式(2.9)式代入到(2.7)中,并考虑到假设l的条件:p+(f)=(,一k(,)c)尸一(f)(,一ko)c)7+k(f)兄k0)7(2.10)求得后验误差协方差阵的递推公式后,使用配方法,即将(2.10)右端展丌后, 加减同一项,p一(,)c…(c…p一(,)c…+尺)。1c。尸一(,),再把有关k(f)的项归并在平方 项罩,即: 尸+(f)=尸一(f)一p一(f)c7(cp~o)c7+尺).1 cp—o) +【ko)一尸~(f)cr(c尸一o)c7‘+r)一1】(c尸一(f)c +天)【k(f)一尸一(f)c 7(cp一(f)c7+尺)-i】(2,11)在式(2.11)中,前两项不包含k(f)因子,故要使尸+(r)极小,只要选择尺(r)=尸一(f)c7’(c尸一(f)c7,+尺).’ 而这时估计误差协方差阵为:13(2.12) 第二章}尔曼滤波的基本理论而这时估计误差协方差阵为: p+(f)=(,一k(f)c)p一(f) 尸一(r)=彳p+(,一1)彳7+q(2.13) (2.14)式(2.8)利用了,时刻以前的观测值来估计状念值,称为卡尔曼预测器,而式 (2.9)利用了当前时刻的观测值,称为卡尔曼滤波器。在式(2.9)右侧,可分为两个部分:曼(,i,一1)和e(,)=y(f)一既(f l f一1)。其中曼(f i卜1)完全由过去的观测值夕(1),y(2),...,y(卜1)确定,成为预测部分。p(f)称前向为预测误差。p(,)可看做滤 波器输入时l’白j序列为.y(1)’.y(2),...,y(卜1)时,一1阶前向预测误差滤波器的输出。根 据正交性原理,前向预测误差p(,)应与过去所有观测值y(1),y(2),...,y(f—1)正交,故可看作是f时刻观测值.y(,)中所含新信息的一个度量。p(,)又称之为“新息”。 下面给出了随机观测系统和卡尔曼滤波结构图。幽2.1随机观测系统和譬尔曼滤波结构如图2.1所示,卡尔曼滤波器作为一个递归最小均方误差估计器,其基本滤波思路可分为预测和校正,这罩可以分成两个部分:时问更新和测量更新。式(2.8),(2.14)构成时间更新,它们是为了从当自{f状态预测下一状态舅(,i,一1),并估计先验误差协方差矩阵尸一(,)为下一状态的估计做准备。式(2.9),(2.12),(2.13) 构成测量更新,利用f时刻的观测值.y(f)计算新息和卡尔曼增益,修正圣(,l,一1)得 到与随机变量的观测值线性相关的最小均方误差估计i(,l,),同时计算后验误差协方差矩阵尸+(,)为下一循环的预测做准备。时间更新和预测更新过程如图2.2所示。14 第二章}尔曼滤波的基本理论幽2.2膏尔曼滤波的预测和校正方程关系图2.3卡尔曼平滑器在2.2节中介绍了基于过去数据集合以及当前观测数据的卡尔曼最佳估计。 在一些实时性要求并不十分严格的应用中,如在语音增强中,可以允许一定量的 延时。这样可以利用将来的数据进一步地改善己得到的估计值,这是就在前面所 介绍的卡尔曼平滑器。为了简单起见,只考虑不带控制输入(ⅳ(f)=0)的系统, 在假设1、2下,基于观测数据dr={y(1),y(2),...,j,(r)}对状态x(/)的线性最小方差估值器舅(/i吼/<f),即最优平滑器可分为三类【18】:(1)i(f r),,=1,2,...,丁,丁固定,叫做固定区间平滑器; (2)i(,l/),/=f+1,,+2,...,r固定,叫做固定点平滑器,根据平滑阶数可称 为单步平滑、双步平滑和丁步平滑: (3)曼(f f+丁),f=1,2,...,丁,丁固定,叫做固定滞后平滑器。 许多实际应用问题涉及到平滑问题,例如发射人造地球卫星时,卫星入轨初 速度估值问题可归结为固定点平滑问题,而卫星轨道重构问题可归结为固定区间 平滑问题。对于带观测滞后n的系统,采用固定滞后平滑器量(,ff+ⅳ)可改进卡 尔曼滤波器对曼(f if)估计的精度。分帧处理是语音信号处理中常用的处理方法。 因此对一帧内的数据估值问题可归结为固定区间平滑问题,下面我们将介绍固定 区间平滑器。2.3.1固定区间平滑器从上面的介绍可以看到固定区间平滑器的观测数据集是固定的,因此,可以 参考卡尔曼滤波器和预测器来得到平滑器的计算过程。在卡尔曼滤波器的基础上 得到固定区问平滑器为: i(,i r)=哥(,i f)+f(,)(曼(f+l r)一i(,+l f))(2.15) 第二章譬尔曼滤波的基本理论p(flr)=p+ol,)一f(f)(p一(,+li,)一po+1i 71))fro) f(f)=p+(f f)爿7(尸一(r+1 f))一(2.16) (2.17)其中索引71表示基于所有的数据集合,初值为i(丁fr),计算是反向进行的,即f是递减变化的,仁ⅳ一1’...1。在平滑过程中,先执行卡尔曼滤波器作为前向处理(fonvard run),然后执行固定区间平滑器作为后向处理(backward run)。2.3.2快速平滑器上述的固定区|’白j平滑器中,式(2.17)需要在每一步迭代中执行矩阵p o+l i,) 的求逆运算,在维数较高时,计算量较大。为了避免计算量问题,引入辅助变量 a(,),定义五(,): 五o)=(尸一(,+1 l,))-1(i(,+1 l丁)一i(f+1 i f)) 五(,)的迭代方程如下:(2.18)旯(卜1)=∥川+(cr∥似(f)+川)…、.、(219)(p(f)一ck(f)po)一cp+o f)彳7旯(f))。。l其中£(,)=c(cjp(r i,一1)c 7‘+r)~,方程(2.19)中的尸(f}f),三(f)和k(f)可以在执行前向处理的过程中保存其相应的值,初始值设置为a(丁)=0。状态的平滑估计通过递归地执行式(2.19)和式(2.20)得到: i(f r)=曼(,f f)+p+(f f r)彳7五(,)(2.20)式(2.20)中王(,l 7’)为平滑后状态矢量的估计值,其中舅(,f,)是2.2节中前向卡 尔曼滤波的后验估计值。 相对于标2.3.1节中的固定区间平滑器,本节中引入了辅助变量旯(f),整个平 滑过程不需要对矩阵尸求逆,计算量大大减少,且执行速度快。但是,由于数值误差的积累也会导致其缺乏数值稳定性,因此有必要监视算法可能出现的发散情况,如果有需要,在发散时,采取精度更高或稳定性更好的算法。2.4平方根协方差卡尔曼滤波2.4.1滤波发散 在上述的卡尔曼滤波算法中,由于数学模型不能『f确反映实际物理过程,对模型噪声和量测噪声的统计特性了解不够,使得两者方差取值不一定合适,加上计算机有限字长使得计算过程中的舍人误差积累过大,有可能导致计算出来的协 方差矩阵不正定,甚至不对称,最后伎滤波出现反常现象,即尽管协方差矩阵的16 第二章}尔曼滤波的基本理论计算值看上去不断变小,但状态估计值的实际误差却不断增加,以致得到完全不 符合实际的结果,这种现象称为滤波发散【20】。 对于模型误差导致的发散现象,可以通过改善系统模型来控制。当系统模型确定的情况下,仅讨论由于计算机存在舍入误差导致的发散。其中一种解决办法的基本思想是限制增益的减小,通过人为地增加测量噪声方差尺和限制误差协方 差阵尸出现几乎为零的极小值或非『f定,来限制增益减小,以避免滤波脱离观测 序列。但此种方法必须依靠实验确定修正量,很不精确。为了保证误差协方差阵尸的正定,下面介绍一种平方根协方差滤波算法。2.4.2平方根协方差滤波 平方根卡尔曼滤波的主要思想就是用矩阵分解的形式来存储协方差矩阵尸, 这样一方面提高了算法的精度,另一方面使得算法更加稳定。在卡尔曼滤波中的 误差协方差矩阵尸是由矩阵减法得到,由于计算机的有限字长原因,有可能导致 计算结果出现负定现象,使卡尔曼滤波器发散。而采用矩阵的cholesky分解形式来存储协方差阵尸:尸=删7’(2.21)其中,m是一个下三角矩阵。在平方根卡尔曼滤波中递归中使用的是choleskv因子m,误差协方差矩阵p由m及其转置的乘积获得,这样保证了矩阵尸的非负定性,避免卡尔曼滤波器发散。相应的时间更新如下: 舅(,+l f)=彳i(f f)+b材(,)[mr‘苫1|f’]:。。。=r[m rg,,i三’彳r]:。。。p:p172p7’72,2。,2。=丁丁7’。2.22,其中,m(f+1l,)和∥陀分别是协方差矩阵p(h l l,)和状态噪声方差矩阵q的cholesky因子。q 7’门可以通过cholesky分解被预先计算,实际中当9是对角阵时,q…佗可以通过计算矩阵q各个对角元素的平方根来得到。对于于正交矩阵 丁.我们所要做就是找到一个正交变换,将一般的矩阵x变换成一个上三角矩阵y。例如】,:ⅸ,它可以通过gram.schmidt方法,householder变换或者givensrotations变换实现。从而得到x=丁7 j,,进而有】,7】,=x x,x当已知时,可以通过cholesky分解求取j,。 相应的测量更新如下:7 第二章膏尔曼滤波的基本理论歹(≠i f一1)=c舅(,i≠一1)+d掰(≠) p(,)=y(f)一夕(,l,一1) 曼(,i,)=王(,l,一1)+上(f)p(f) £(f)=l(f)缈。1(f)(2.23)p m黝=“。篇∥. 7’(,j州 ”lmi.om7(小一1)c’m/-、0叫, 一 ●l 、,1● ●lj月十 口x仃 +胛rⅲ。m=尺1 72r772乇。m㈨)=z互7如前所述,月是测量噪声方差矩阵,r…心也可以通过cholesky分解被预先 计算,正交三角化因子正求解同时i’日j更新,矩阵形由下面式子计算: ∥(,)∥7’(r)=cp(,l,一1)c71+r(2.24)2.5小结本章介绍了两种最小均方误差准则下的滤波算法,维纳滤波和卡尔曼滤波。 首先简单介绍了维纳滤波,然后重点分析了卡尔曼滤波器和卡尔曼平滑器,对卡 尔曼滤波器结构进行了分析,针对由于数值误差导致的卡尔曼滤波器发散情况, 介绍了平方根协方差卡尔曼滤波。 第三章基于r尔曼滤波的语音增强第三章基于卡尔曼滤波的语音增强传统的语音增强算法有谱减法,维纳滤波法等。对带噪语音运用谱减法就是 从输入信号的谱中减去估计的噪声谱,谱减法算法简单,较容易实现,但谱减法会产生“音乐噪声”,影响了人的听觉感受。维纳滤波虽然是最小均方误差意义下的最优估计,但只能在平稳条件的约束下,实际中,语音和噪声都是非平稳的。 卡尔曼滤波突破了经典维纳滤波方法的局限性,在非平稳状态下也可以保证最小均方误差估计。在绪论中,我们讨论了语音信号产生的基本数字模型,它利用数学模型清晰 地表述了语音信号产生的机理,并且可以定量分析语音信号。但常常在实际应用 中,采取的是这个模型的一种特殊形式:全极点模型,它不仅模型形式简单,效 果较好,而且应用灵活,计算效率高。卡尔曼滤波就是利用了语音信号的全极点模型,建立了状念方程和测量方程,实现语音信号的滤波,对有色噪声也利用全 极点模型建模,使得卡尔曼滤波扩展到有色噪声环境的语音增强中。在卡尔曼滤波语音增强方法中,需要提取语音信号的模型参数。因此,在实际噪声条件下对 语音信号全极点模型参数的有效估计是卡尔曼滤波算法中的一个关键问题。本章将分别介绍上述几个问题。3.1语音信号的全极点模型图3.1语晋全极点模型图3.1是语音信号的全极点模型,其中w(,,)是激励原,g为增益因子,日(z)为全极点滤波器:何(z):—_l一(3.1)1一∑qzl其中p为阶数,托}为线性预测系数(lpc)。该模型生成的语音信号为:19 第二章基丁.}尔曼滤波的语音增强x(刀):兰叩("一f)+gw(")(3.2)其中,x(,7)为清音时,w(疗)为宽带噪声;当x(胛)为浊音时,w(刀)为间隔为基音周期,的脉冲串。通常上述的模型又叫p阶的自回归模型(autoregressivemodel,ar模型)。3.2基于卡尔曼滤波的语音增强这罩假设考虑的噪声都是加性噪声,那么对带噪语音信号建立数学模型可表示如下: y(,7)=z(门)+v(门) 其中,’,(用)是与语音信号不相关的背景噪声。(3.3)从自订一章的叙述中,可知卡尔曼滤波的基本特征之一是利用状态方程和测量 方程来描述随机系统。结合上述的语音生成模型,可以把语音模型转化成状态空i训的形式:x(胛)=彳x(九一1)+gw(刀) y(刀)=^ⅸ(肘)+v(刀) (3.4) (3.5)其中x(刀)=[x(力一p+1),z(月一p+2),…x(,7)r,日=g7=【o,o….o,1】。。。o o 彳= 0 0……l oo 1… …0 0… …口(p)口(p一1)口(1)l 、’jpp引式(3.4),(3.5)中,x(刀)是疗时刻的系统状态(即语音信号的真实值),彳为 lpc系数构成的状态转移矩阵。),(刀)是门时刻的测量值,日是测量系统的参数。似刀)和v(刀)分别表示过程噪声和测量噪声。式(3.4),(3.5)与上章中卡尔曼滤波中的随机系统不同在于:没有系统的输入 控制向量甜(刀)。同时利用卡尔曼滤波对带噪语音信号增强时,必须满足第二章的 所有的假设条件,所以在这旱对语音信号做一些假设:语音信号z(刀)在短时窗内 (20~30ms)假定是短时平稳的,这使得在短时窗内,其彳参数保持不变。“疗)、v(”)始终是均值为o、方差为祥和拜的不相关白噪声,并且在短时窗内其方差不变。随机系统初始状念x(0)与w(疗)、y(门)不相关。 w(玎)、v(刀)是相互独立的高斯白噪声,其概率分布具有如下统计特性:p(w)~ⅳ(o,q)20 第二章基于}尔曼滤波的语音增强pll,,~』v lu,代jq和尺分别是以疗)、v(玎)的协方差矩阵(q=e(w(门)w(甩)7),尺=e(v(,2)v(聆)7’))£㈤w∽}=悸妻彭 哪)v(川=恬曷这样,基于语音生成模型的卡尔曼状态空间方程建立以后,依据基本的卡尔 寻滤潴笪渎可得m卡尔导滤浦和予币涮方程x(刀1斤一1)=彳x(刀一1i刀一1)p一(,,)=爿尸+(刀一1)彳…+《gg7 k(行)=p一(刀)日…(厶r尸一(刀)h7+£)-1(3.6) (3.7) (3.8) (3.9) (3.10)x(门l玎)=x(玎k一1)+k(门)(少(胛)一hx(疗k一1))p+(胛)=【,一k(玎).v1p一(刀)初始化令x(oio)=o,尸+(o)=o。其中k(刀)是卡尔曼增益。x(刀l疗一1)表示在行一1时刻对门时刻状态的预测值,x(门i聆)是滤波器在n时刻结合观测值对真实状态的 估计,y(行)是门时刻的观测值,尸一(”)和p+(胛)分别表示预测和滤波估计的误差协方差矩阵,最终由(3.9)式得到滤波器的输出x(”l刀),将x(玎i力)乘以ⅳ即可得到增强的语音。卡尔曼滤波是基于状态空i’白j的时域滤波方法,它引入了系统状念变量和状态 空间的概念,非常适合处理多变量系统和信号估值问题,在卡尔曼滤波中信号可 视为状态或状态分量。因此,可以将语音信号和噪声信号同时作为系统的两个状 态变量,并对语音和噪声分别建立ar模型,这样可以将卡尔曼滤波的语音增强 方法扩展到有色噪声的环境下。当测量噪声v(打)是有色噪声时,不满足高斯白噪 声的假设,但可以假设它是广义平稳的,并用一个g阶的ar模型来描述【2l】:口v(玎)=∑6fv(刀一f)+d(玎)百(3.11)其中,d(,)是白色高斯过程e{d(,7)}=o,e{d(门)d(聊))=刃,把式(3.1 1)写成状态方程的形式: y(以)=a,矿(胛一1)+hdd(门)(3.12)v(旧)=h:y(")其中,y(门)=【v(疗一q+1),v(刀一q+2),…,v(门)】r。 第三章基丁.膏尔曼滤波的语音增强0 0 a。= 1 0;0i0乞 6(『一-o●;o%a,为状态转移矩阵,h。=【o o…1】7为gx 1维的的观测矩阵。将式(3.12)与(3.4)和(3.5)合并可写成:y(门)=h。ⅳ(刀) 其中,x(甩)2竺甩一1)+hu(船)(3.13)聃黝属咖嘲五=kh叫‰㈣通过上述推导可以看到在知道噪声的统计特性之后,对于有色噪声也可以用卡尔曼滤波的方法来得到纯净语音的估计值。 基于卡尔曼滤波的语音增强,结合了语音的生成模型,利用观测值不断修正 和调整预测值,通过引入新息,将要解决的滤波与预测的混合问题转化为纯滤波 和纯预测两个独立的问题。其实就是一个在估计值和测量值之间做一个最优的平 滑也就是说在估计值和测量值之|’日j做一个平滑滤波。如果测量值比较准确,滤波 后的最优值就会接近这个测量值;如果估计值比较准确,滤波后的最优值就越接 近估计值;如果两个值都不准确,那么就取他们的一个折中。 3.2.1基本框架图3.2膏尔曼滤波语音增强结构图及其参数估计 第三章基丁.}尔曼滤波的语音增强图3.2左边是基于卡尔曼滤波的语音增强基本框架。语音信号首先经过采样 分帧加窗,经过参数估计得到语音和噪声的模型参数,并同时把语音模型和噪声 模型转化为状态空间形式,然后通过卡尔曼滤波得到增强后的语音。图3.2右边是参数估计部分。 这罩对语音分帧采用滑动窗: w(,7)=l~cos(2厅(门+1)/(jv+1))这样既保证证语音的短时平稳性,又避免了语音被生硬地中断以及频谱上的失 真,有利于后续估计参数的准确性。研究表明,窗帧叠因子的最佳值是2或4,即 帧移为1/2或1/4帧。一般语音窗长为20~35ms之间。在对每帧的语音增强过程中, 其语音和噪声的模型参数都是常数,最后实际输出的语音信号曼(")是m个相邻的 卡尔曼滤波输出语音帧叠(”,,)同步叠加而成:首先将帧内估计;(力,,)经过加窗w(刀)处理 s。(玎,f)=w(")s(门,f)”=o,…,ⅳ一l再将各个经过加窗处理的帧加起来得到增强的语音信号:㈧■割掣弘∽)0,o,…}3.2.2卡尔曼滤波 卡尔曼滤波是语音增强系统的实际去噪算法,本文采取了将卡尔曼滤波理论 中的滤波器和平滑器相结合的方法,达到语音增强的目的。其滤波的基本框架结 构如图3-3所示,首先把预处理得到的语音信号及噪声信号的模型参数以、配和 分帧后带噪语音输入到卡尔曼滤波器中,经过卡尔曼滤波后输入固定区间卡尔曼 平滑器得到平滑后的语音估计曼(刀,,),为了防止由于模型误差,数值误差等造成 的滤波发散,在平滑输出自订,进行一个滤波发散的判决,判决准则是将增强后的 语音曼(”,,)与原始带噪语音y(珂,,)比较,如果增强后语音的最大值大于带噪语音 的最大值的1.1倍,则判断滤波发散,在滤波发散时,利用平方根协方差卡尔曼 滤波器重新估计陔帧语音,最后将估计的语音曼(,7,,)组帧得到增强的语音信号。 第二章基丁.}尔曼滤波的语音增强图3.3}尔曼滤波框架图3.3参数估计基于卡尔曼滤波的语音增强中,需要语音的ar模型参数来建立状态方程和 测量方程,因此在卡尔曼滤波之前必须估计出ar模型的参数。本节将介绍其模型参数的提取方法。在语音增强时,实际上我们只有带噪的语音,没有干净的语音,因此如何从 带噪的语音中估计出语音和噪声模型参数是一个急需解决的问题,而且卡尔曼滤 波中,模型的参数直接影响其语音增强的效果。传统的方法中,通常利用最大期 望(expectation.maximization,em)【22】方法迭代估计语音信号的ar模型参数, 但该方法具有很高的计算复杂度。为了简化计算,我们可以先估计噪声功率谱, 然后在频域中进行功率谱相减,从带噪语音信号中初步估计出相对干净的语音信 号功率谱,再估计语音的模型参数。同理,在本文的基于单通道的语音增强方法 中,噪声源是不可接近的,背景噪声的特性只能从带噪语音中获得。ar模型参数估计方法如下:在3.2节的基本假设条件下,基于白噪声驱动的单输入单输出ar模型如下:,,x(,7)=∑口,x(刀一f)+gw(”),=l其中,w(")是单位方差,零均值的白噪声,g是幅度,该系统的参数集合可表示为或=[q,…,口,,g】『。其中[q,…,口,,】又称为线性预测系数,其求解方法有很多【23】,有自相关法,协方差法,….。这里只介绍最常见的一种方法一自相关法。语音信号x(门)的自相关序列表示如下:e(七)=e{x(门)工(门+七)},即{e(七))::t+.=cd,(x(门))搿24 第二章基于}尔曼滤波的语音增强式中cor(.)表示求信号的自相关序列。由wiener_khintchine定理知道,信号的功率谱序列和自相关序列成傅立叶变换关系,即可以通过对功率谱进行傅罩叶 变换得到自相关序列:陋蝼胁妊肛。h一№㈤)=|2)=糊脚㈤)=|2)相对于直接进行相关运算,该方法在不仅在计算效率高(d(丁logr)相对于d(丁2)),并且他们的结果几乎相同。得到自相关序列后,根据levinson.durbin算法可以由自相关序列计算得到ar模型的线性预测系数{q}。线性预测增益g也有几种方法求解: 方法1直接令g等于ar模型的预测残差的功率,即:g2=e(o)+∑■e(i)这种方法最为简单,但是估计效果并不理想。 方法2根据yule—walker方程,x(刀)的自相关序列满足:e(七)=g2万(七)+∑口,e(七一f)其中万(七)表示单位冲击函数,x(")离散功率谱墨(七)可由自相关序列进行傅 立叶反变换得到,同时利用上述功率谱计算的能量应等于从时域计算的信号能量,即:∑o∽=∑≈f)s(啦毒气i∑口,缈叫跗卜南溉㈣}:》il一∑叩睹i由上述两式可计算得到预测增益g。卜.,一%…,鸣,掣)3.3.1功率谱相减 功率谱相减法是处理宽带噪声较为传统和有效的方法,其基本思想是在假定 加性噪声与短时平稳的语音信号相互独立的条件下,从带噪语音的功率谱中减去 噪声的功率谱,从而得到较为纯净的语音频谱。依据人耳对相位变化不敏感这一 特点,可用原带噪语音信号的相位谱来代替功率谱减之后的语音信号的相位谱,并结合上述的谱减后的语音功率谱来恢复降噪后的语音时域信号,这就是经典的谱减法语音增强。 第二章基丁.譬尔曼滤波的语音增强带噪语音信号模型: 少(,7)=x(门)+v(玎) 由于假定语音信号和加性噪声是相互独立的,因此有:(3.15)只(w)=只(w)+只(w) 其中只(w),只(w),只(w)分别表示y(,7),x(”),v(丹)的功率谱,由于平稳噪声 的功率谱在发声自订和发声期i’日j可近似认为基本没有变化,这样可通过发声前的所谓“非语音段”来估计噪声的功率谱,从而有:只(w)=只(w)一丑(川其中,^(w)为无语音时只(w)的统计平均值,丘(w)为估计的语音信号功率谱,这就是谱减法的基本原理。 基本谱减法中,一方面语音能量往往集中在某些频段内,通常是在低频段,在这些频段内的语音幅度相对较高,尤其是共振峰处的幅度一般远大于噪声。另 一方面由于随机噪声,如随机白噪声,它的能量统计分布服从正态分布,因此实 际的噪声帧功率谱也会随机变化,其在频域中的最大、最小值之比往往达到几个 数量级,而最大值与均值之比高达6.8倍【21。因此,在减去噪声谱后仍然会有较多 的残留噪声,这些残留噪声在频域上表现为随机出现的尖峰,相应地在时域上就 呈现出一些类正弦信号的叠加,具有一定音乐特性。此类残留噪声具有一定的节 奏性起伏感,常被称为“音乐噪声”。 所以针对不同的频段分别乘以估计噪声过减因子,这样不仅可以降低语音失真,而且可以部分抑制音乐噪声和残留噪声。 本文采用的功率谱相减方法如下:1只(七)12=屈(i其中,ir(尼)12一q¨2 i¨(尼)12)r(七)i,i¨(七)i是带噪语音,背景噪声的幅度谱,1只(七)i是谱减后的干净语音幅度谱。g为第f个频带的噪声过减因子。q是第f个频带信噪比船僻的函数,可以表示为:5 snr.<一s口24—0.15牛.51胀.1一5≤洲.≤20sⅳ尺:>20其中第,个频带信噪比肌憾,由下式计算得到:26 第三章基丁.譬尔曼滤波的语音增强pi∑l y(w趴幄(扣)=10loglo!三生q∑i v(w^=^匆,p,分别表示频带的丌始和结束频点。屈是各个频带噪声抑制的另一个控制因子,它的取值反映了语音信号能量分布的特点,屈的取值根据实验表明,有效 }

我要回帖

更多关于 窗函数fir低通滤波器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信