数字变声器

合集下载

变声器使用技巧

变声器使用技巧

变声器使用技巧
变声器是一种能够改变人声音的设备,广泛应用于歌唱、配音、录音等领域。

下面是一些变声器使用的技巧。

首先,了解不同类型的变声器。

市面上常见的变声器有很多种,比如调音板、数字处理器、K歌设备等。

不同类型的变声器有不同的功能和调音效果,需要根据自己的需求选择合适的设备。

其次,调整变声器的参数。

不同的歌曲、角色需要不同的声音效果,可以通过调整变声器的参数来达到想要的效果。

常见的参数有音调、音量、声道、混响等,要根据实际情况进行合理调整。

然后,注意音质的控制。

使用变声器时,要注意保持良好的音质。

可以选择高质量的麦克风、音响设备来配合使用,确保声音的清晰度和纯净度。

另外,要进行实时监控。

在使用变声器的过程中,最好能够实时监控自己的声音效果,通过耳机或者音箱等设备将自己的声音反馈给自己,可以及时调整参数,保持良好的表演效果。

此外,要熟悉不同场景下的变声技巧。

在不同的场景下,比如演唱会、录音室、直播等,对于变声技巧的要求也不同。

要灵活运用各种技巧,让自己的声音更加变化多样。

最后,要不断练习和创新。

变声器只是一个工具,只有通过不断练习和创新才能真正发挥其作用。

可以尝试不同的音调、音
色,尝试模仿不同的歌手或者角色的声音,不断提高自己的技术和变化能力。

总之,使用变声器是一门技术活,需要不断学习和实践。

通过合理调整参数、控制音质、实时监控、灵活运用技巧,并进行持续练习和创新,才能发挥出变声器的最佳效果。

ai变声器原理

ai变声器原理

ai变声器原理AI变声器原理随着人工智能技术的不断发展和应用,AI变声器已经成为一种热门的技术和应用领域。

AI变声器是一种利用人工智能技术实现声音变化的工具,它可以将一种声音转换成另一种声音,实现人声的变化和模仿。

那么,AI变声器是如何实现的呢?AI变声器的原理主要基于深度学习和语音合成技术。

首先,需要大量的训练数据来训练AI模型,这些训练数据包括各种不同的声音样本和其对应的标签。

通过分析这些声音样本和标签,AI模型可以学习到不同声音之间的关系和特征。

在训练完成后,AI变声器可以通过输入一个原始声音样本,然后使用训练好的模型进行预测和转换。

AI模型会对输入的声音样本进行特征提取和分析,然后根据这些特征来生成新的声音样本。

这个过程类似于将输入的声音样本映射到一个声音空间中,然后在这个声音空间中进行变换和模仿。

AI变声器的关键技术是语音合成技术。

通过语音合成技术,AI模型可以将输入的声音样本转换成目标声音样本。

语音合成技术主要包括声码器和声音合成算法。

声码器是一种将语音信号转换成数字信号的设备或算法,它可以将声音的频率、幅度和时域特征进行分析和转换。

声音合成算法则是根据声码器分析得到的参数,生成新的声音样本。

在AI变声器中,还有一个重要的技术是声音转换算法。

声音转换算法主要用于将输入声音样本的特征转换成目标声音样本的特征。

这个过程涉及到声音的频率、幅度和时域特征的变换和调整。

声音转换算法可以根据输入声音样本和目标声音样本之间的特征差异,来调整声音样本的频率和幅度,实现声音样本的变换和模仿。

除了语音合成技术和声音转换算法,AI变声器还可以结合其他技术和算法来实现更加复杂的声音变化。

例如,可以使用声音增强算法来改善输入声音样本的质量和清晰度。

可以使用语音识别技术来识别和分析输入声音样本的语义和情感。

可以使用自然语言处理技术来处理输入声音样本的文本信息。

总结一下,AI变声器是一种利用人工智能技术实现声音变化的工具。

变声器的使用方法

变声器的使用方法

变声器的使用方法变声器是一种声音技术设备,它可以通过改变声波的频率、幅度和波长来改变音调、音色和音质。

它广泛应用于音乐、广播、电影制作、游戏和语音识别等领域。

以下是关于如何使用变声器的详细解释。

使用变声器需要了解以下事项:1.选择变声器变声器有许多种类,包括软件和硬件变声器,以及分别用于移动设备和计算机的变声器。

考虑您的使用场景和设备类型,来选择最适合您的变声器。

2.音效设置在使用变声器之前,您需要先设置音效。

这个过程包括调整音调、音量和其他参数,以达到您需要的效果。

不同的变声器具有不同的音效设置方法,您可以查看说明书或使用在线教程网站来帮助您完成设置。

3.调整音质音质是指音频信号的清晰度和音色。

使用变声器可能会影响音质,因此您需要根据需要调整音质参数。

值得注意的是,您选择的音质设置可能会影响变声器的效果,因此您需要谨慎选择。

4.录制和编辑当您完成变声器设置后,可以开始录制音频。

您可以使用录音软件或麦克风来录制音频。

录制完成后,您可以使用音频编辑软件来剪辑、混音和增强音频。

变声器的使用流程:1.选择变声器首先,您需要选择适合您的变声器。

您可以选择在线翻倍器、软件翻倍器或外接硬件翻倍器。

2.安装和设置变声器安装和设置变声器需要仔细阅读说明书。

安装变声器后,您需要调整音效设置、音质和其他参数。

您可以参考变声器说明书或在线教程来完成设置。

3.选择音频源在使用变声器录制音频之前,您需要选择音频源。

这是指您要使用哪种设备进行录制。

您可以使用内置麦克风或外接麦克风。

4.开始录制录制音频前,您需要调整想要的音效和音质设置。

完成调整后,请确认您使用的录制设备能够正确捕捉音频。

当您准备好之后,您可以点按录制按钮,然后开始录制音频。

5.调整变声器设置完成录制后,您可以使用变声器来调整音调、音量和其他参数,以获得您需要的效果。

如果您使用的是在线翻倍器,您可以选择在线编辑音频。

如果您使用的是软件翻倍器,则需要使用音频编辑软件来剪辑、混音和增强音频;如果您使用的是硬件变声器,则需要调整硬件设置来获得所需结果。

变声器的原理

变声器的原理

变声器的原理变声器是一种可以改变声音音调和音色的设备,它在音乐、语音合成和通信领域都有着广泛的应用。

那么,变声器的原理是什么呢?在本文中,我们将深入探讨变声器的工作原理及其应用。

首先,我们来了解一下变声器的基本原理。

变声器通过改变声音的频率、振幅和相位来实现声音的变化。

它可以将输入的声音信号进行处理,然后输出一个经过改变的声音信号。

这种处理可以通过数字信号处理(DSP)或模拟电路来实现。

在数字信号处理中,声音信号会被采样并转换为数字信号,然后经过算法处理后再转换回模拟信号输出。

而模拟电路则通过电子元件的组合来实现声音信号的处理和变换。

其次,我们来探讨一下变声器的工作原理。

变声器主要通过改变声音的频率来实现音调的变化。

它可以将声音信号的频率进行提高或降低,从而改变声音的音调。

此外,变声器还可以通过改变声音信号的振幅来实现音量的调节,以及通过改变声音信号的相位来实现音色的变化。

这些处理都是通过对声音信号进行加工和调整来实现的。

除此之外,变声器还可以实现声音的合成和模拟。

它可以通过合成多个声音信号来产生新的声音,从而实现声音的合成。

同时,变声器还可以模拟不同的声音效果,如合唱、合成器、卡拉OK效果等。

这些功能都是通过对声音信号进行处理和控制来实现的。

最后,我们来谈一下变声器的应用。

变声器在音乐制作、语音合成和通信领域都有着广泛的应用。

在音乐制作中,变声器可以用来实现声音的变化和合成,从而创造出多样的音乐效果。

在语音合成中,变声器可以用来实现不同的语音效果和人声合成。

在通信领域,变声器可以用来实现语音通话的加密和保护,从而保护用户的隐私和安全。

总的来说,变声器是一种可以改变声音音调和音色的设备,它通过改变声音信号的频率、振幅和相位来实现声音的变化。

它在音乐、语音合成和通信领域都有着广泛的应用,为人们的生活和工作带来了便利和乐趣。

希望通过本文的介绍,可以让大家对变声器的原理有更深入的了解。

你家的变声器是什么原理

你家的变声器是什么原理

你家的变声器是什么原理变声器是一种能够改变人声音高、音低或者音色的设备。

它主要通过改变声音的频率、振幅和谐波来实现变声效果。

变声器的原理可以分为以下几个方面进行解析。

首先,变声器利用声波的频率来改变声音的音高。

声波是由空气分子的振动形成的,而频率则决定了声音的音高。

变声器通过调整声波的频率,使得听者听到的声音音高变化。

这一过程通常通过对输入信号进行频率的放大或者降低来实现。

比如,如果想要将声音变得更高,变声器会将输入信号的频率放大,而如果想要将声音变得更低,则会将频率降低。

其次,变声器还可以通过改变声音的振幅来影响声音的强度和音量。

声音的振幅决定了声音的响度和音量大小。

当振幅增大时,声音会变得更响亮;当振幅减小时,声音会变得更弱。

变声器可以通过调整输入信号的振幅来改变声音的音量。

一般来说,变声器会通过对输入信号进行放大或者减小来控制声音的音量大小,从而产生不同的效果。

此外,变声器还可以改变声音的谐波结构,从而改变声音的音色。

谐波是指不同频率的声波的混合,决定了声音的音色。

不同的乐器之间就是通过谐波结构的不同来区分出不同的音色。

变声器可以通过对输入信号的谐波结构进行调整,使得声音的音色发生变化。

通常情况下,变声器会通过对信号进行滤波、失真或者混响等处理来改变谐波结构,从而实现不同的音色效果。

此外,变声器还可能会借助一些特殊效果来实现声音的变化。

比如,一些高级变声器可能会使用声音合成技术,通过合成不同的声音元素来生成新的声音。

还有一些变声器可能会使用声音合成器,将不同的音色合成为一个声音。

这些特殊效果能够为变声器带来更多的可能性,使得声音变化得更加多样。

总的来说,变声器主要通过调整声音的频率、振幅和谐波结构来改变声音的音高、音量和音色。

它可以通过对信号进行放大、滤波、失真等处理来实现不同的变声效果。

变声器的原理是基于声波的物理特性和声音的感知原理,通过对声音信号的处理来达到所需的变声效果。

变声器在娱乐、音乐和通信等领域有着广泛的应用。

变声器音效的原理

变声器音效的原理

变声器音效的原理变声器是一种可以改变声音频率、音调和音色的设备。

它可以将一个人的声音转换成另一个人的声音,或者将声音变得更加低沉或尖锐。

变声器的原理涉及到声音信号处理和频谱分析等技术。

变声器的原理主要包括以下几个方面:1. 声音信号采集:变声器首先需要对声音进行采集。

现代变声器通常使用麦克风来采集声音信号。

麦克风会将声音转换为模拟电信号,并将其发送给变声器的处理电路。

2. 声音信号处理:变声器的处理电路对采集到的声音信号进行处理。

处理电路通常包括放大器、滤波器和数字信号处理器(DSP)等组件。

放大器可以将声音信号的幅度进行放大,以便更好地进行后续处理。

滤波器可以通过去除或增强特定频率范围内的声音来改变音色。

DSP可以对声音信号进行数字化处理,如频域分析、重构和合成。

3. 频谱分析:变声器需要对声音的频谱进行分析。

频谱分析是指将声音信号转换为频域上的表示,以便更好地理解声音的频率分布。

变声器通常使用快速傅里叶变换(FFT)等算法进行频谱分析。

在频谱分析中,声音信号被分解成一系列频谱分量,每个频谱分量表示声音信号在特定频率上的能量。

4. 音调变换:变声器可以通过改变声音信号的频率来改变音调。

音调是指声音的频率高低,决定了声音的音高。

变声器可以通过改变声波周期的长度来改变声音的频率,从而改变音调。

通常,变声器会增加或减少声波周期的长度,以提高或降低音调。

5. 音色转换:变声器还可以通过改变声音信号的谐波成分来改变音色。

音色是指声音的质地或特征,决定了声音的明亮度和清晰度。

变声器可以通过改变各个频率成分的幅度和相位来改变声音的谐波结构,从而改变音色。

通过增强或减弱特定频率范围内的谐波成分,变声器可以实现不同的音色效果。

6. 混响和回声效果:变声器还可以模拟不同的环境音效,如混响和回声效果。

混响是指声音在环境中重复反射和传播产生的延迟回声。

变声器可以通过控制声音信号的延迟时间、衰减率和反射次数等参数来模拟不同的混响效果。

变声器原理

变声器原理

变声器原理变声器是一种能够改变音频信号频率的设备,它可以将原始音频信号的频率进行调整,从而改变声音的音调。

变声器的工作原理主要是通过改变音频信号的频率来实现声音的变调,下面我们将详细介绍变声器的工作原理。

首先,变声器通过接收输入的音频信号,将其转换成数字信号进行处理。

在数字信号处理的过程中,变声器会改变信号的采样频率,从而改变信号的频率特性。

通过对信号的频率进行调整,变声器可以实现音调的变化。

其次,变声器还可以通过改变音频信号的相位来实现声音的变调。

在数字信号处理的过程中,变声器可以对信号的相位进行调整,从而改变声音的音调。

通过改变信号的相位,变声器可以实现对声音的频率特性进行调整,从而实现声音的变调效果。

此外,变声器还可以通过改变音频信号的幅度来实现声音的变调。

在数字信号处理的过程中,变声器可以对信号的幅度进行调整,从而改变声音的音调。

通过改变信号的幅度,变声器可以实现对声音的频率特性进行调整,从而实现声音的变调效果。

总的来说,变声器的工作原理主要是通过改变音频信号的频率、相位和幅度来实现声音的变调。

通过对音频信号进行数字信号处理,变声器可以实现对声音的频率特性进行调整,从而改变声音的音调。

变声器在实际应用中有着广泛的用途,可以用于音乐制作、语音变化等领域。

需要注意的是,变声器在进行声音变调的过程中需要注意保持声音的清晰度和音质。

在改变音频信号的频率、相位和幅度时,需要避免对声音质量造成损害,保证声音的清晰度和音质。

因此,在设计和使用变声器时,需要充分考虑声音质量的保持,以实现良好的声音变调效果。

总之,变声器是一种能够改变声音音调的设备,其工作原理是通过改变音频信号的频率、相位和幅度来实现声音的变调。

在实际应用中,变声器有着广泛的用途,可以用于音乐制作、语音变化等领域。

在使用变声器时,需要注意保持声音的清晰度和音质,以实现良好的声音变调效果。

变声器的毕业设计

变声器的毕业设计

变声器的毕业设计在我的记忆中,有这么一件有趣的事儿,和变声器有关。

那是一次学校的文艺演出,我负责后台的一些工作。

当时有个小品节目,其中一位同学需要用特殊的声音来增加喜剧效果。

于是,我们想到了使用变声器。

当我第一次拿到那个变声器的时候,心里充满了好奇和期待。

它小小的身躯,却有着神奇的魔力,能让人的声音瞬间发生巨大的变化。

我迫不及待地想要试试它的效果。

我插上耳机,轻轻对着麦克风说了一句话,然后调节着变声器上的旋钮。

哇!我的声音一下子从原本的清脆变成了低沉沙哑,就好像是一个历经沧桑的老人在说话。

这可把我乐坏了,我不停地变换着各种声音,一会儿是稚嫩的孩童,一会儿是神秘的外星人,玩得不亦乐乎。

然而,真正的挑战来了。

在演出中,要让变声器与演员的表演完美配合,可不是一件容易的事儿。

我们反复调试,确保声音的变化不会显得突兀,能够自然地融入到表演中。

就在正式演出的时候,还是出了一点小插曲。

那位同学在台上表演得正投入,突然变声器的声音出现了卡顿,原本应该是尖细的声音变得断断续续。

我在后台急得满头大汗,手忙脚乱地检查着线路和设置。

好在,经过一番紧张的调整,变声器又恢复了正常,演出得以顺利进行。

这件事让我深刻地体会到,哪怕是一个小小的变声器,要想把它运用好,也需要付出很多的努力和心思。

言归正传,咱们来聊聊变声器的毕业设计。

对于很多学相关专业的同学来说,这可是一个让人又爱又恨的课题。

变声器的毕业设计,可不是简单地摆弄几个零件,调调参数就能完成的。

它需要我们对声音的原理、电子电路、编程等知识有深入的理解和掌握。

首先,你得搞清楚声音是怎么产生和传播的。

就像我们平时说话,声带振动产生声波,然后通过空气传到别人的耳朵里。

而变声器呢,就是要在这个过程中“做手脚”,改变声波的频率、振幅等特征,从而让声音发生变化。

比如说,如果你想把自己的声音变成一个可爱的萌妹子,那就要降低声音的频率,让声音听起来更尖细、更甜美。

这就需要你通过电路设计或者软件算法来实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字变声器摘要为了实现由男声变换到女声,在语音信号参数分析过程采用短时自相关法提取语音信号的基音周期,同时用LPC倒谱分析法分析共振峰的范围,通过matlab编写程序修改语音参数并接近于女声的范围,构置GUI界面。

在实验中,输入一段语音信号,输出时即实现了由男声到女声的变换效果。

因此对于语音信号参数的修改能够实现男女声音之间的变换。

关键词短时自相关法 LPC倒谱语音信号 matlab GUI前言为了锻炼自己数字信号处理的实践能力,也为了更好的完成老师布置的作业,本设计通过编写matlab程序,修改相关声音参数,使其频率发生相应的变化,在输出时达到变声。

目录数字变声器 (1)第1章采样 (4)1 一些基本概念 (4)1.1声道 (4)1.2基音 (4)1.3共振峰 (4)1.4物理原理 (4)第2章设计方案 (5)2.1 设计原理 (5)2.2 设计步骤 (5)第3章建模 (5)3.1 基于短时自相关法的基音周期估值 (5)3.1.1构建巴特沃斯低通滤波器 (5)3.1.2语音信号的短时自相关函数 (6)3.2 LPC倒谱法提取共振峰 (6)3.3 线性预测语音信号合成 (7)第4章 GUI界面设计以及仿真图形和程序 (8)4.1 界面设计 (8)4.2 仿真图形 (9)4.2.1 原声 (10)4.2.2 女声 (10)4.2.3 童声 (10)4.2.4 老人声 (10)4.2.5 音调变高 (11)4.2.6 音调变低 (11)4.2.7 语速变慢 (11)4.2.8 语速变快 (12)4.3 程序流程图如下 (12)4.4每个控件的程序如下 (13)4.4.1“录音”radiobutton(radiobutton1) (13)4.4.2“打开”radiobutton(radiobutton2) (13)4.4.3“开始”按钮(pushbutton1) (14)4.4.4“保存”按钮(pushbutton2) (14)4.4.5“打开音频文件按钮”(pushbutton3) (15)4.4.6“原声”按钮(pushbutton5) (15)4.4.7“女声”按钮(pushbutton7) (16)4.4.8“童声”按钮(pushbutton6) (17)4.4.9“老人”按钮(pushbutton12) (19)4.4.10“音调变高”按钮(pushbutton11) (20)4.4.11“音调变低”按钮(pushbutton9) (21)4.4.12“语速变慢”按钮(pushbutton14) (21)4.4.13“语速变快”按钮(pushbutton8) (23)第4章分析总结 (24)参考文献 (24)致谢 ...................................................................................................................错误!未定义书签。

第1章采样1 一些基本概念1.1声道声道是很多动物及人类都有的一个腔室,从声源产生的声音经由此处滤出。

人的声道包括声道则包括喉腔、咽头、口腔和鼻腔。

1.2基音一般的声音都是由发音体发出的一系列频率、振幅各不相同的振动复合而成的。

这些振动中有一个频率最低的振动,由它发出的音就是基音,其余为泛音。

发音体整体振动产生的音,叫做基音,决定音高;发音体部分振动产生的音,叫做泛音,决定音色;基音和泛音结合一起而形成的音,叫做复合音,日常我们所听到的声音多为复合音。

1.3共振峰共振峰是指在声音的频谱中能量相对集中的一些区域,共振峰不但是音质的决定因素,而且反映了声道(共振腔)的物理特征。

声音在经过共振腔时,受到腔体的滤波作用,使得频域中不同频率的能量重新分配,一部分因为共振腔的共振作用得到强化,另一部分则受到衰减,得到强化的那些频率在时频分析的语图上表现为浓重的黑色条纹。

由于能量分布不均匀,强的部分犹如山峰一般,故而称之为共振峰。

1.4物理原理语音科学家将人类发声过程视作一个由声门源输送的气流经以声道、口、鼻腔组成的滤波器调制而成的。

人类语音可分为有380声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。

无声语音则是声带保持开启状态,禁止振动引发的。

一般来说,由声门振动决定的基频跟说话人的性别特征有关,如下表,而无声语音则没有体现这个特征。

说话人的个性化音色和语音的另外一个声学参数——共振峰频率的分布有关。

儿童由于声道短,其共振峰频率高于成年人,成年女性的声道一般短于成年男性,所以女性的共振峰频率一般高于男性。

本实验是基于男生录制的声音进行相关参数提取,修改接近于女声、童声、老人声,并实现了音调的高低与速度的快慢男声基频分布(hz):50~180 共振峰频率分布:偏低人群女声基频分布(hz):160~380 共振峰频率分布:中童声基频分布(hz):400~1000 共振峰频率分布:偏高第2章设计方案2.1 设计原理采用线性预测参数合成法。

线性预测参数合成法利用LPC语音分析方法,通过分析自然语音样本,计算出LPC系数,就可以建立信号产生模型,从而合成出语音。

2.2 设计步骤它包括以下几个步骤:1、先用短时自相关法对基音周期估值。

2、用LPC 倒谱法提取共振峰。

3、线性预测语音信号合成,根据线性预测的基本思想,用过去M个样点值来预测现在或未来的样点值。

4、用matlap编程和matlap GUI 界面设计。

第3章建模3.1 基于短时自相关法的基音周期估值对语言信号进行低通滤波,然后进行自相关计算。

在低通滤波时,采用巴特沃斯滤波器3.1.1构建巴特沃斯低通滤波器根据人的说话特征设定相应指标参数,对本段语音设计算出巴特沃斯模拟滤波器的阶数N为5,3dB截止频率,,算出为0.175,归一化低通原型系统函数为:其中将带人中,得到低通滤波器,根据设定的滤波器编写matlab程序,当信号经过低通滤波器后,对原始信号滤波产生结果如下图所示,低通滤波后,保留基音频率,然后再用8kHz采样频率进行采样,采样序列为x(n),然后进行下一步的自相关计算。

3.1.2语音信号的短时自相关函数定义语音信号自相关函数如下:其中k为信号延迟点数:为语音信号;N为语音帧长度。

经过低通滤波之后,取160个样点数,帧长取10ms,对每帧语音求短时自相关,取得自相关最大点数,自相关函数在基音周期处表现为峰值,这些峰值点之间的间隔的平均值就是基音周期。

但是由于图中存在野点,编写matlab程序除去野点算出对应基音周期如图3所示,设基音周期值为PT,调动PT,接近女声,设新的为PT1。

3.2 LPC倒谱法提取共振峰通过线性预测分析得到合成滤波器的系统函数为其冲击响应为h(n),为预测系数。

然后求h(n)的倒谱hˆ(n),首先根据同态分析方法,有Hˆ(z)=logH(z),因为H (z)是最小相位的,即在单位圆内是解析的,所以Hˆ(z)可以展开成级数形式,即Hˆ(z)=,也就是说Hˆ(z)的逆变换hˆ(n)是存在的,设hˆ(n)=0,将等式两端分别对求导,得到:=有(1-)=,令式左右两边Z的各次幂前系数分别相等得到:hˆ(1)=1hˆ(n)=+ 1hˆ(n)= n>p在本实验中,取预测阶数为10,语音的样点数为160,按照上式可直接从预测系数求得倒谱hˆ(n),这个倒谱是根据线性预测模型得到,即称为LPC倒谱。

谱的峰值基本上对应于共振峰频率,用GT表示共振峰;修改共振峰,使共振峰接近女声、童声、老人声范围,新的为GT1.3.3 线性预测语音信号合成根据线性预测的基本思想,用过去M个样点值来预测现在或未来的样点值:yˆ(n)=yˆ(n)是预测信号,为预测系数,y(n)为取样信号,预测误差(n):E{(n)}=E{}为使E{(n)}最小,对求偏导,并令其为零,有:E{[]y(n-)}=0 =1,…,M上式表明采用最佳预测系数时,预测误差与过去的样点值正交。

由于语音信号的短时平稳性,要分帧处理,对于每一个样点值记为(n)…, (n+N-1),这段语音记为Yn。

对于语音段Yn,并记(j,i)=E{},对于语音段Yn,它的自相关函数为:n=1,…,M 根据Yule—walker方程,可以解出样值,用这种方法定期地改变激励参数u(n)和预测系数,并使用修改过后的基因周期和共振峰参数,就能合成出语音,合成语音样本如下:S(n)=+Gu(n)为预测系数;G为模型增益;u(n)为激励;合成样本s(n);p为预测器阶数;编写matlab程序,合成效果如下图所示:第4章 GUI界面设计以及仿真图形和程序在设计数字变声器的界面时,使用了MATLAB提供的可视化的界面环境Guide。

相比较通过编写程序进行GUI的设计,可视化的界面环境更加方便快捷。

4.1 界面设计在matlab新建GUI,添加各部件,完成如下图所示。

当选中“录音”radiobutton的时候,“打开”radiobutton会失效,与之相关的“打开音频文件”pushbutton按钮也会失效,而与录音相关的两个文本框和“保存”按钮会有效,两个文本框分别写入录音时间与录音频率。

接下来的八个变声按钮则分别实现变声的效果,每个变声按钮后跟的两个坐标图分别画出变声后的时域图和频域图。

4.2 仿真图形选择一段音频文件,显示其仿真图形(左图为时域图,右图为频域图)。

4.2.1 原声4.2.2 女声4.2.3 童声4.2.4 老人声4.2.5 音调变高4.2.6 音调变低 4.2.7 语速变慢4.2.8 语速变快4.3 程序流程图如下录音 打开原声 女声 童声 老人 调高 调低 速快 速慢开 始 GUI 界面录音/打开录制ns ,8000Hz ,wav 格式音频文件 打开已有的wav 格式音频文件 保存录制的的wav格式音频文件 将打开的音频文件原声播放,并绘制将打开的音频文件转为女声播放,并将打开的音频文件转为童声播放,并将打开的音频文件转为老人声播放,将打开的音频文件音调变高播放,并将打开的音频文件音调变低播放,并将打开的音频文件速度变快播放,并将打开的音频文件速度变慢播放,并4.4每个控件的程序如下4.4.1“录音”radiobutton(radiobutton1)% --- Executes on button press in radiobutton1.function radiobutton1_Callback(hObject, eventdata, handles)% hObject handle to radiobutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Hint: get(hObject,'Value') returns toggle state of radiobutton1 if get(hObject,'Value')set(handles.pushbutton1,'Enable','on');set(handles.edit1,'Enable','on');set(handles.edit2,'Enable','on');set(handles.radiobutton2,'Value',0);set(handles.pushbutton3,'Enable','off');elseend4.4.2“打开”radiobutton(radiobutton2)% --- Executes on button press in radiobutton2.function radiobutton2_Callback(hObject, eventdata, handles)% hObject handle to radiobutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)if get(hObject,'Value')set(handles.radiobutton1,'Value',0);set(handles.pushbutton1,'Enable','off');set(handles.edit1,'Enable','off');set(handles.edit2,'Enable','off');set(handles.pushbutton3,'Enable','on');elseend4.4.3“开始”按钮(pushbutton1)% --- Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)set(hObject,'string','luyinzhong');pause(0.4);Fs=str2double(get(handles.edit2,'String'));t=str2double(get(handles.edit1,'String'));ai=analoginput('winsound',0);chane1=addchannel(ai,1);set(ai,'SampleRate',Fs);duration=t;set(ai,'SamplesPerTrigger',duration*Fs);start(ai);y=0;time=0;[y,time]=getdata(ai);handles.y=y;handles.Fs=Fs;guidata(hObject,handles);plot(handles.axes1,handles.y)title(handles.axes1,'shiyutu');ysize=size(handles.y);y=fft(handles.y,length(handles.y));ysize=size(y);plot(handles.axes2,abs(y));xlabel(handles.axes2,'pinlv');ylabel(handles.axes2,'fudu');title(handles.axes2,'pinlvtexing');set(hObject,'string','wanbi');set(handles.pushbutton2,'Enable','on');4.4.4“保存”按钮(pushbutton2)% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)Fs=handles.Fs;fs=Fs;[filename]=uiputfile({'*.wav','ALL FILES(*.*)'},'wenjianbaocun'); wavwrite(handles.y,fs,filename);4.4.5“打开音频文件按钮”(pushbutton3)% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename pathname]=uigetfile({'*.wav','ALL FILES'},'xuanzeshengyinwenjian');if isequal([filename pathname],[0,0])return;endstr=[pathname filename];[temp Fs]=wavread(str);handles.y=temp;handles.Fs=Fs;handles.xuanze=2;guidata(hObject,handles);set(handles.pushbutton2,'Enable','on');4.4.6“原声”按钮(pushbutton5)% --- Executes on button press in pushbutton5.function pushbutton5_Callback(hObject, eventdata, handles)% hObject handle to pushbutton5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)c=handles.Fs;Fs=c;wavplay(handles.y,Fs);plot(handles.axes1,handles.y)title(handles.axes1,'shiyutu');ysize=size(handles.y);y=fft(handles.y,length(handles.y));ysize=size(y);plot(handles.axes2,abs(y(1:ysize/2)));xlabel(handles.axes2,'pinlv');ylabel(handles.axes2,'fudu');title(handles.axes2,'pinlvtexing');4.4.7“女声”按钮(pushbutton7)% --- Executes on button press in pushbutton7.function pushbutton7_Callback(hObject, eventdata, handles)% hObject handle to pushbutton7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) FL = 80;WL = 240;P = 10;s=handles.y;fs=handles.Fs;s = s/max(s);L = length(s);FN = floor(L/FL)-2;exc=zeros(L,1);zi_pre = zeros(P,1);s_rec = zeros(L,1);zi_rec = zeros(P,1);exc_syn = zeros(L,1);s_syn = zeros(L,1);last_syn = 0;zi_syn = zeros(P,1);exc_syn_t = zeros(L,1);s_syn_t = zeros(L,1);last_syn_t = 0;zi_syn_t = zeros(P,1);hw = hamming(WL);for n = 3:FNs_w = s(n*FL-WL+1:n*FL).*hw;[A E] = lpc(s_w, P); •s_f=s((n-1)*FL+1:n*FL); ••[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1;[s_rec1,zi_rec] = filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL) = s_rec1;s_Pitch = exc(n*FL-222:n*FL);PT = findpitch(s_Pitch);G = sqrt(E*PT);tempn_syn = [1:n*FL-last_syn]';exc_syn1 = zeros(length(tempn_syn),1);exc_syn1(mod(tempn_syn,PT)==0) = G;exc_syn1 = exc_syn1((n-1)*FL-last_syn+1:n*FL-last_syn);[s_syn1,zi_syn] = filter(1,A,exc_syn1,zi_syn);exc_syn((n-1)*FL+1:n*FL)=exc_syn1;s_syn((n-1)*FL+1:n*FL) = s_syn1;last_syn = last_syn+PT*floor((n*FL-last_syn)/PT);•PT1 =floor(PT/2);poles = roots(A);deltaOMG =150*2*pi/fs;for p=1:10if imag(poles(p))>0 poles(p) = poles(p)*exp(j*deltaOMG);elseifimag(poles(p))<0poles(p) = poles(p)*exp(-j*deltaOMG);endendA1=poly(poles);tempn_syn_t = [1:n*FL-last_syn_t]';exc_syn1_t = zeros(length(tempn_syn_t),1);exc_syn1_t(mod(tempn_syn_t,PT1)==0) = G;exc_syn1_t = exc_syn1_t((n-1)*FL-last_syn_t+1:n*FL-last_syn_t);[s_syn1_t,zi_syn_t] = filter(1,A1,exc_syn1_t,zi_syn_t);exc_syn_t((n-1)*FL+1:n*FL) = exc_syn1_t;s_syn_t((n-1)*FL+1:n*FL) = s_syn1_t;last_syn_t = last_syn_t+PT1*floor((n*FL-last_syn_t)/PT1);endplot(handles.axes5,s_syn_t)title(handles.axes5,'shiyutu');ysize=size(s_syn_t);y=fft(s_syn_t,length(s_syn_t));ysize=size(y);plot(handles.axes6,abs(y(1:ysize/2)));xlabel(handles.axes6,'pinlv');ylabel(handles.axes6,'fudu');title(handles.axes6,'pinlvtexing');%grid on;sound(s_syn_t);4.4.8“童声”按钮(pushbutton6)% --- Executes on button press in pushbutton6.function pushbutton6_Callback(hObject, eventdata, handles)% hObject handle to pushbutton6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)FL =80;WL = 240;P = 10;s=handles.y;fs=handles.Fs;s = s/max(s);L = length(s);FN = floor(L/FL)-2;exc = zeros(L,1);zi_pre = zeros(P,1);s_rec = zeros(L,1);zi_rec = zeros(P,1);exc_syn_t = zeros(L,1);s_syn_t = zeros(L,1);last_syn_t = 0;zi_syn_t = zeros(P,1);hw = hamming(WL);for n = 3:FNs_w = s(n*FL-WL+1:n*FL).*hw;[A E] = lpc(s_w, P);s_f = s((n-1)*FL+1:n*FL);[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1;[s_rec1,zi_rec] = filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL) = s_rec1;s_Pitch = exc(n*FL-222:n*FL);PT = findpitch(s_Pitch);G = sqrt(E*PT);PT1 =floor(PT/2);poles = roots(A);deltaOMG = 700*2*pi/8000;for p=1:10if imag(poles(p))>0 poles(p) = poles(p)*exp(j*deltaOMG);elseif imag(poles(p))<0 poles(p) = poles(p)*exp(-j*deltaOMG); endendA1=poly(poles);tempn_syn_t = [1:n*FL-last_syn_t]';exc_syn1_t = zeros(length(tempn_syn_t),1);exc_syn1_t(mod(tempn_syn_t,PT1)==0) = G;exc_syn1_t = exc_syn1_t((n-1)*FL-last_syn_t+1:n*FL-last_syn_t); [s_syn1_t,zi_syn_t] = filter(1,A1,exc_syn1_t,zi_syn_t);exc_syn_t((n-1)*FL+1:n*FL) = exc_syn1_t;s_syn_t((n-1)*FL+1:n*FL) = s_syn1_t;last_syn_t = last_syn_t+PT1*floor((n*FL-last_syn_t)/PT1);endplot(handles.axes3,s_syn_t)title(handles.axes3,'shiyutu');ysize=size(s_syn_t);y=fft(handles.y,length(s_syn_t));ysize=size(y);plot(handles.axes4,abs(y(1:ysize/2)));xlabel(handles.axes4,'pinlv');ylabel(handles.axes4,'fudu');title(handles.axes4,'pinlvtexing');sound(s_syn_t);4.4.9“老人”按钮(pushbutton12)% --- Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)% hObject handle to pushbutton12 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)FL =80;WL = 240;P = 10;s=handles.y;fs=handles.Fss = s/max(s);L = length(s);FN = floor(L/FL)-2;exc = zeros(L,1);zi_pre = zeros(P,1);s_rec = zeros(L,1);zi_rec = zeros(P,1);v=.38;exc_syn_v = zeros(v\L,1);s_syn_v = zeros(v\L,1);last_syn_v = 0; •zi_syn_v = zeros(P,1);hw = hamming(WL); •for n = 3:FNs_w = s(n*FL-WL+1:n*FL).*hw;[A E] = lpc(s_w, P);s_f = s((n-1)*FL+1:n*FL); •[exc1,zi_pre] = filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL) = exc1;[s_rec1,zi_rec] = filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL) = s_rec1;s_Pitch = exc(n*FL-222:n*FL);PT = findpitch(s_Pitch);G = sqrt(E*PT);FL_v = floor(FL/v);tempn_syn_v = [1:n*FL_v-last_syn_v]';exc_syn1_v = zeros(length(tempn_syn_v),1);exc_syn1_v(mod(tempn_syn_v,PT)==0) = G;exc_syn1_v = exc_syn1_v((n-1)*FL_v-last_syn_v+1:n*FL_v-last_syn_v); [s_syn1_v,zi_syn_v] = filter(1,A,exc_syn1_v,zi_syn_v);last_syn_v = last_syn_v+PT*floor((n*FL_v-last_syn_v)/PT);exc_syn_v((n-1)*FL_v+1:n*FL_v) =exc_syn1_v;s_syn_v((n-1)*FL_v+1:n*FL_v) = s_syn1_v;endplot(handles.axes7,s_syn_v)title(handles.axes7,'shiyutu');ysize=size(s_syn_v);y=fft(s_syn_v,length(s_syn_v));ysize=size(y);plot(handles.axes8,abs(y(1:ysize/2)));xlabel(handles.axes8,'pinlv');ylabel(handles.axes8,'fudu');title(handles.axes8,'pinlvtexing');sound(s_syn_v);4.4.10“音调变高”按钮(pushbutton11)% --- Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject handle to pushbutton11 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)x=handles.y;fs=handles.Fs;N=length(x);n=[0:N-1];X=fft(x);Fs=1*fs;f=n/N*Fs;w=1.6;M=w*fs;plot(handles.axes15,x)title(handles.axes15,'shiyutu');ysize=size(x);y=fft(x,length(x));ysize=size(y);plot(handles.axes16,abs(y(1:ysize/2)));xlabel(handles.axes16,'pinlv');ylabel(handles.axes16,'fudu');title(handles.axes16,'pinlvtexing');sound(x,M);4.4.11“音调变低”按钮(pushbutton9)% --- Executes on button press in pushbutton9.function pushbutton9_Callback(hObject, eventdata, handles)% hObject handle to pushbutton9 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)x=handles.y;fs=handles.Fs;N=length(x);n=[0:N-1];X=fft(x);Fs=1*fs;f=n/N*Fs;w=0.6;M=w*fs;plot(handles.axes13,x)title(handles.axes13,'shiyutu');ysize=size(x);y=fft(x,length(x));ysize=size(y);plot(handles.axes14,abs(y(1:ysize/2)));xlabel(handles.axes14,'pinlv');ylabel(handles.axes14,'fudu');title(handles.axes14,'pinlvtexing');sound(x,M);4.4.12“语速变慢”按钮(pushbutton14)% --- Executes on button press in pushbutton14.function pushbutton14_Callback(hObject, eventdata, handles)% hObject handle to pushbutton14 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)FL=80;WL=240;P =10;s=handles.y;fs=handles.Fs;s=s/max(s);L=length(s);FN=floor(L/FL)-2;exc=zeros(L,1);zi_pre=zeros(P,1);s_rec=zeros(L,1);zi_rec=zeros(P,1);v=0.3;exc_syn_v=zeros(v\L,1);s_syn_v=zeros(v\L,1);last_syn_v=0;zi_syn_v=zeros(P,1);hw=hamming(WL);for n=3:FNs_w=s(n*FL-WL+1:n*FL).*hw;[A E]=lpc(s_w, P);s_f=s((n-1)*FL+1:n*FL);[exc1,zi_pre]=filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL)=exc1;[s_rec1,zi_rec]=filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL)=s_rec1;s_Pitch=exc(n*FL-222:n*FL);PT=findpitch(s_Pitch);G=sqrt(E*PT);FL_v=floor(FL/v);tempn_syn_v=[1:n*FL_v-last_syn_v]';exc_syn1_v=zeros(length(tempn_syn_v),1);exc_syn1_v(mod(tempn_syn_v,PT)==0)=G;exc_syn1_v=exc_syn1_v((n-1)*FL_v-last_syn_v+1:n*FL_v-last_syn_v); [s_syn1_v,zi_syn_v]=filter(1,A,exc_syn1_v,zi_syn_v);last_syn_v=last_syn_v+PT*floor((n*FL_v-last_syn_v)/PT);exc_syn_v((n-1)*FL_v+1:n*FL_v)=exc_syn1_v;s_syn_v((n-1)*FL_v+1:n*FL_v)=s_syn1_v;endplot(handles.axes9,s_syn_v)title(handles.axes9,'shiyutu');ysize=size(s_syn_v);y=fft(s_syn_v,length(s_syn_v));ysize=size(y);plot(handles.axes10,abs(y(1:ysize/2)));xlabel(handles.axes10,'pinlv');ylabel(handles.axes10,'fudu');title(handles.axes10,'pinlvtexing');sound(s_syn_v);4.4.13“语速变快”按钮(pushbutton8)% --- Executes on button press in pushbutton8.function pushbutton8_Callback(hObject, eventdata, handles)% hObject handle to pushbutton8 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)FL=80;WL=240;P =10;s=handles.y;fs=handles.Fs;s=s/max(s);L=length(s);FN=floor(L/FL)-2;exc=zeros(L,1);zi_pre=zeros(P,1);s_rec=zeros(L,1);zi_rec=zeros(P,1);v=2;exc_syn_v=zeros(v\L,1);s_syn_v=zeros(v\L,1);last_syn_v=0;zi_syn_v=zeros(P,1);hw=hamming(WL);for n=3:FNs_w=s(n*FL-WL+1:n*FL).*hw;[A E]=lpc(s_w, P);s_f=s((n-1)*FL+1:n*FL);[exc1,zi_pre]=filter(A,1,s_f,zi_pre);exc((n-1)*FL+1:n*FL)=exc1;[s_rec1,zi_rec]=filter(1,A,exc1,zi_rec);s_rec((n-1)*FL+1:n*FL)=s_rec1;s_Pitch=exc(n*FL-222:n*FL);PT=findpitch(s_Pitch);G=sqrt(E*PT);FL_v=floor(FL/v);tempn_syn_v=[1:n*FL_v-last_syn_v]';exc_syn1_v=zeros(length(tempn_syn_v),1);exc_syn1_v(mod(tempn_syn_v,PT)==0)=G;exc_syn1_v=exc_syn1_v((n-1)*FL_v-last_syn_v+1:n*FL_v-last_syn_v); [s_syn1_v,zi_syn_v]=filter(1,A,exc_syn1_v,zi_syn_v);last_syn_v=last_syn_v+PT*floor((n*FL_v-last_syn_v)/PT);exc_syn_v((n-1)*FL_v+1:n*FL_v)=exc_syn1_v;s_syn_v((n-1)*FL_v+1:n*FL_v)=s_syn1_v;endplot(handles.axes11,s_syn_v)title(handles.axes11,'shiyutu');ysize=size(s_syn_v);y=fft(s_syn_v,length(s_syn_v));ysize=size(y);plot(handles.axes12,abs(y(1:ysize/2)));xlabel(handles.axes12,'pinlv');ylabel(handles.axes12,'fudu');title(handles.axes12,'pinlvtexing');sound(s_syn_v);第4章分析总结在实验中,用短时自相关法及LPC倒谱分析方法提取语音参数,用线性预测合成语音能够实现由男声到女声的变换。

相关文档
最新文档