基于声卡的音频信号采集系统

基于声卡的音频信号采集系统[20191214193309]
摘 要
随着科学技术的发展和移动电话的普及,音频信号采集系统在日常生活中的应用也越来越普遍。本文针对这一需求,设计并实现了一款基于声卡的音频信号采集系统。
本系统主要分为三大模块:一是基本模块,可以对音频信号进行打开、播放、暂停和停止等操作;二是音频信号采集模块,系统通过驱动声卡,采集来自收录机的音频信号,压缩后以WAV文件的格式存放在计算机系统的硬盘中;三是音频信号处理模块,可以对音频信号进行短时傅里叶变换并能够提取其频域特征,该模块采用VC++与Matlab混合编程实现的。基于声卡的音频信号采集系统操作简单、实用性强、人机交互界面友好。
本系统在Microsoft Visual 2010上进行开发,使用C++语言编写代码,并配合Matlab程序实现,这三者的结合使系统在Windows环境下能够稳定运行。
 查看完整论文请+Q: 351916072 
关键字:音频信号;采集;VC++;傅里叶变换
目 录
摘 要 I
ABSTRACT II
目 录 III
第1章 绪论 1
1.1 软件工程的发展历程与现状 1
1.2 语音信号处理的发展历程与现状 2
1.3 课题目标 3
1.4 论文结构安排 3
第2章 系统整体方案设计 4
2.1 开发环境与语言 4
2.2语音信号处理理论基础 6
2.2.1 数字信号处理基本概念 6
2.2.2数字信号处理的优点 8
2.3 系统整体结构 9
2.4 WAV文件结构 12
第3章 系统模块设计 15
3.1 声卡基本原理 15
3.2 基本功能模块设计 15
3.3 语音信号采集模块设计 18
3.3.1 声音录制模块设计 18
3.3.2硬盘存储模块设计 20
3.4 语音信号处理模块设计 22
3.4.1 绘制时域波形模块设计 22
3.4.2 绘制频域波形模块设计 31
3.5 系统测试 32
第4章 总结与展望 35
4.1 总结 35
4.2 前景展望 35
参考文献 36
致 谢 38
附 录 39
1.英文原文 39
2.中文翻译 43
3.部分源代码 47
第1章 绪论
1.1 软件工程的发展历程与现状
20世纪30年代计算机兴起后,发达国家在探索计算机软件的过程中一直经受着困扰:人们开发软件的能力远远落后于计算机硬件更新换代的能力和社会对计算机软件不断改变的需求,这种情况一直阻碍着软件发展的脚步,为了摆脱这种困扰,一门新的学科诞生并发展起来——软件工程。
20世纪60年代以来,伴随着计算机应用范围的扩大,社会对软件系统的要求和复杂度急速上升,开发人员们急需一种新的开发方法来适应这种变化,这种方法主要需要解决两个方面的问题:一、如何开发软件,以满足不断增长、日趋复杂的需求;二、如何维护数量不断膨胀的软件产品[1]。
1968年NATO会议上首次提出“软件工程(Software Engineering)”的概念,其基本思想是应用计算机科学理论和技术以及工程管理原则和方法,按照预算的进度,实现满足用户需求的软件产品的定义、开发、发布和维护的工程[2]。
传统的软件工程的发展主要沿着两个方向:管理与设计方法。软件的管理就是把软件开发的过程作为一种实际的工程来看待,就像建造房屋一样。“瀑布式”的软件开发周期模型就是从这里诞生的。软件设计方法的研究也一直在更新换代。主要有20世纪70年代很流行的PO(Process-Oriented 面向过程的开发方式),当前仍有很多人在使用这种方法进行开发,比如C和Pascal语言,都是采用这种开发方式进行开发的。
现代的软件工程中,面向对象的理念已经被提出并且迅速流行起来了,它的设计思想是把软件中所有的事物都看作是对象,针对这些进行开发,并且随之而来的有很多的新测试方法,还有建模语言UML,代码复用的模块化设计理念,组建开发集成的新的领域。
当前的软件正在向着更加简洁,高效,快速,更加自动化的方向发展,也有了很多的研究成果,比如自动生成代码,系统重用,语言优化等等。
软件工程界的研究者们为了达成目标,仍然在积极研究着理论方法,提出语言与工具供开发人员们使用。软件的发展是一个逐步积累的过程,相信未来的软件工程可以成为一门更好地开发与维护计算机软件的学科[3]。
1.2 语音信号处理的发展历程与现状
人类在对于自然界的认识和改造的过程中,都离不开对自然界中的信息的获取。所谓信息,是指客观存在的、无法改变的一种事物形象;而所谓信号,则是指携带一定信息量的物理量,比如光信号、电信号和声音信号。语言信号处理(Speech Signal Processing)就是对声音信号进行专门研究的一门技术,是数字信号处理的分支技术。
1876年贝尔研发出世界上第一部电话,实现了声音信号与电信号之间的相互转换,使得声音传播打破距离的限制[4]。这可以看作是对声音信号进行的最早的研究和应用。由于电话中的声信号是模拟信号,而不是今天所说的数字信号,所以不能归为语音信号处理的范畴
在语音信号处理领域具有划时代意义的发明,是1939年由Homer Dudley提出概念并成功研发的“语言合成器”,也就是今天普遍意义上的声码器[5]。这个电子器件可以实现对语音信号的分析和合成,打破了模拟信号的局限性,提出了一种全新的语音通信技术,即提取参数加以传输,在接收端重新合成语音。其后,在此基础上产生了“语音参数模型”的思想。
20世纪60年代以后,语音信号处理技术获得了突破性进展。其中,对语音信号产生机理的研究是语音信号数字模型的重要基础,为人们研究语音信号提供了新的思路[6]。其后随着计算机技术的发展,数字信号处理技术(DSP: Digital Signal Processor)取得了长足的进步,倒谱分析技术和线性预测技术的成功应用,微电子学、微处理机芯片和专用信号处理芯片的不断问世,都使语音信号处理技术迈入了新的时代。
现代的语音信号处理技术,主要的研究分为两大方向:一是以语音为研究对象的语音识别技术,二是语音合成,两者都以编码技术为核心[7]。语音识别是一门边缘技术,涉及到计算机科学、微电子学、数字信号处理、生理学、生物学、心理学、语言学以及体态语言学等多门学科,其最终要实现的是机器对人类语言的无障碍理解。语音合成技术较为复杂,不同的语言都有各自的文字和语法,因此目前合成的语音在音色和自然度方面,还有待提高。
随着计算机技术的不断革新和社会节奏的不断加快,语音信号处理技术在未来的应用前景必定广泛。
1.3 课题目标
本课题涉及到声学、数字信号处理、信息与信号处理等学科领域,需要使用VC等软件开发工具。
本次毕业设计拟在PC机上进行软件开发,通过声卡实现对外部输入声信号的采集、处理、显示、存储等功能。具体的,对输入信号的要求根据所使用声卡的采样频率而定;对采集到的信号,进行短时傅立叶变换,提取信号的频域特征;编写显示界面,实时显示所输入信号的时域波形以及频谱结构;同时实现所采集信号的硬盘保存。
1.4 论文结构安排
本论文的结构安排如下:
第一章,绪论。本章介绍了软件工程的发展历程和现代软件工程,语音信号处理技术的发展史以及现状,本课题的主要目标。
第二章,基于声卡的音频信号采集系统的整体方案设计。本章首先介绍了该系统使用的开发环境和开发语言,对声卡的工作原理进行了相关阐述,又对语音信号处理进行了理论说明,最后从整体的角度阐述了基于声卡的音频信号采集系统的系统结构和数据结构。
第三章,基于声卡的音频信号采集系统的模块设计。本章从内部剖析了基于声卡的音频信号采集系统中各个模块的主要作用、界面、设计实现手段,以及各模块之间的关系。
第四章,总结与展望。本章对基于声卡的音频信号采集系统进行了测试,得到结论;在调试过程中从中发现系统存在的问题,并提出解决方案。
第2章 系统整体方案设计
2.1 开发环境与语言
本系统所采用的开发环境是Microsoft公司推出的VS2010(Microsoft Visual Studio 2010)。VS是目前最流行的Windows平台应用程序开发环境。从传统的Windows API编程到MFC编程,再到基于组件的编程,VS都为之提供了强大而方便的设计工具[8]。与其它编程环境相比,VS几乎能够完成Windows各个方面的应用:可以创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。而VS2010更是在Visual Studio前几个版本的基础上获得了突破性的进展,它注重于开发的高效,拥有许多很好的开发工具,能够非常便捷地让一个好的想法变成现实。VS2010 强大的团队开发可以使用Team Foundation Server进行企业级的应用开发,并有效的提高了开发效率,而且使得团队更好的进行协同工作,大大缩短了开发周期、提高了项目管理周期。 VS2010中引入的 CODE MATRIX,在软件的开发过程中可以测量代码的复杂度,对代码的性能进行定量分析,从而使得代码中的"坏味道"无处藏身。利用VS2010进行系统开发可以大大缩短开发时间,提高开发速度与效率。可以说VS2010适用于每一位希望升级或创建精彩应用程序的组织、团体和个人开发人员。VS2010开发界面如图2.1所示:
图2.1 VS2010开发界面图
C++语言是Bjarne Stroustrup 在上个世纪80年代早期开发的,是一种基于C的面向对象语言。顾名思义,C++表示C的累加。由于C++基于C,所以这两种语言有许多共同的语法和功能,C中所有低级编程的功能都在C++中保留下来[9]。但是,C++比其前身丰富得多,用途也广泛得多。C++对内存管理功能进行了非常大的改进,C++还具有面向对象的功能,所以C在功能上只是C++的一个很小的子集。C++在适用范围、性能和功能上也是无可匹敌的。因此,目前大多数高性能的应用程序和系统仍使用C++编写。
面向对象=对象+类+继承+通信。一个面向对象的程序的每一成分应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。如果一个软件系统是以上四个概念设计和实现的,则可以认为这个软件系统是面向对象的。
面向对象技术包括面向对象分析(OOA),面向对象设计(OOD),面向对象程序设计(OOP)三部分内容:
1、面向对象分析:
指软件需求分析的一种带有约束性的方法,用于软件开发过程中的问题定义阶段。其主要活动是对问题进行抽象建模(包括使用实例建模、类和对象建模、组件建模和分布建模等),产生一种描述系统功能和问题论域基本特征的综合文档。
2、面向对象设计:
指将面向对象分析所创建的分析模型转变为作为软件构造蓝图的设计模型。面向对象设计的独特性,在于其具有基于抽象、信息隐蔽、功能独立性和模块性建造系统等四个重要软件设计概念的能力。
3、面向对象程序设计:
指使用类和对象以及面向对象特有的概念进行编程,在结构化程序设计基础上,20世纪80年代涌现出来一种程序设计方法。
随着Internet和计算机应用不断地发展,面向对象技术的研究和应用也不断地向深度和广度方面扩展。在深度方面,分布对象技术,软件Agent技术、构建技术和模式与框架技术为我们的技术发展带来了良好的发展机遇。在广度方面,面向对象技术与电子商务、面向对象与UML:和面向对象技术与嵌入式系统等为我们发展新的应用提供了舞台。
C++在几乎所有的计算环境中都非常普及:个人电脑、Unix工作站和大型计算机。如果考察一下新编程语言的发展史,就可以看出C++的这种普及率是非常高的[10]。用以前的语言编写的程序量非常大,这无疑会降低对新语言的接受程度。除此之外,大多数专业程序员总是愿意使用他们已熟知的、使用起来得心应手的语言,而不是转而使用新的、不熟悉的语言,花大量的时间来研究其特性。当然,C++是建立在C的基础之上(在C++出现之前,许多环境都使用C语言),这对于C++的普及有很大的帮助,但是C++的流行远不只这一个原因。C++有许多优点:
l C++适用的应用程序范围极广。C++可以用于几乎所有的应用程序,从字处理应用程序到科学应用程序,从操作系统组件到计算机游戏等。
l C++可以用于硬件级别的编程,例如实现设备驱动程序
l C++从C中继承了过程化编程的高效性,并集成了面向对象编程方式的功能。

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/dzxx/dzkxyjs/2491.html

好棒文