一、实验目标:
把自己(男)的声音分别变成小孩的声音、女人的声音和老人的声音。
二、变声原理:
语音科学家将人类发声过程视作一个由声门源输送的气流经以声道、口、鼻腔组成的滤波器调制而成的。人类语音可分为有声语音和无声语音,前者是由声带振动激励的脉冲信号经声腔调制变成不同的音,它是人类语言中元音的基础,声带振动的频率称为基频。
无声语音则是声带保持开启状态,禁止振动引发的。一般来说,由声门振动决定的基频跟说话人的性别特征有关,如下表,而无声语音则没有体现这个特征。说话人的个性化音色和语音的另外一个声学参数——共振峰频率的分布有关。儿童由于声道短,其共振峰频率高于成年人,成年女性的声道一般短于成年男性,所以女性的共振峰频率一
般高于男性。

由上可知,在进行性别变声时,主要考虑基频和共振峰频率的变化。当基频伸展,共振峰频率也同时伸展时,可由男声变成女声,女声变成童声;反之,基频收缩,共振峰频率也同时收缩时,则由童声变女声,女声变男声。为了获得自然度、真实感较好的变声效果,基频和共振峰频率通常必须各自独立地伸缩变化如图1。
图1 基频和共振峰频率分布的变化
共振峰频率的改变是基于重采样实现的,从重采样原理知道,这也同时引发了基频的变化,为保证基频变化和共振峰频率变化的独立、互不相关,在基频移动时必须考虑抵消重采样带来的偏移,理论上只要基频检测足够精确,确实可以保证基频改变和共振峰频率改变间的互不相关。
三、设计方案:
1、录入自己(小孩、女人、老人)的一段声音
2、用MATLAB做fft得到其频谱
3、做fft频谱分析
4、搬移和改变基频、语速,实现变声

四、程序实现
1、变大变小声音

[y,Fs]=audioread('C:\Users\ASUS\Desktop\杜\隋佳新.wav');%读出信号,采样率和采样位数。
sound(0.5*y,Fs)%变小声音
filename = ('C:\Users\ASUS\Desktop\杜\变小.wav'); %给文件取名
audiowrite(filename,0.5*y,fs) %存储.wav音频文件,在这里文件名
sound(2*y,Fs)%变大声音
filename2 = ('C:\Users\ASUS\Desktop\杜\变大.wav'); %给文件取名
audiowrite(filename2,2*y,fs) %存储.wav音

2、原语音信号频谱分析然后频谱搬移调速改变声音

%这次作业录制的语音信号是WAV格式,通过audioread()函数读取了语音数字信号的采样频率和数据。
%首先观察原始语音的频谱和波形
clear
clc
[s,fs]=audioread('C:\Users\ASUS\Desktop\杜\原声.wav');%声音读取s = s/max(s);   %归一化
L = length(s);          % 读入语音长度
S=fft(s,L);
figure
subplot(2,1,1);
plot(s);
title('原语音信号波形');
subplot(2,1,2);
plot(abs(S));
title('原语音信号频谱');
fs2=fs-25000;%基频搬移到男生频谱段
audiowrite('C:\Users\ASUS\Desktop\杜\女变男.wav',s,1.2*fs2)%对速度进行改变


(1)根据以上频谱知,该女生的语音信号频谱在230HZ左右,对其进行搬移到[50, 180] 之间,并进行变速就可得到男声,老年声。代码如下:
fs2=fs-25000;%基频搬移到男生频谱段
audiowrite(‘C:\Users\ASUS\Desktop\女变男.wav’,s,1.2*fs2)%对速度进行改变
(2)通过对输出音频进行分析知该方案可行,有实验程序知:


```cpp
function Y=voice(x,f) %更改采样率使基频改变 f>1降低;f<1升高
f=f+0.15;
f=round(f*1000);
d=resample(x,f,1000); %时长整合使语音文件恢复原来时长
W=400;Wov=W/2;Kmax=W*2;Wsim=Wov;
xdecim=8;
kdecim=2;
X=d';
F=f/1000;
Ss =W-Wov;
xpts = size(X,2);
ypts = round(xpts / F);
Y = zeros(1, ypts);
xfwin = (1:Wov)/(Wov+1);
ovix = (1-Wov):0;
newix = 1:(W-Wov);
simix = (1:xdecim:Wsim) - Wsim;
padX = [zeros(1, Wsim), X, zeros(1,Kmax+W-Wov)];
Y(1:Wsim) = X(1:Wsim); lastxpos = 0; km = 0;
for ypos = Wsim:Ss:(ypts-W)
xpos = round(F * ypos);
kmpred = km + (xpos - lastxpos);
lastxpos = xpos;
if (kmpred <= Kmax)
km = kmpred;else
ysim = Y(ypos + simix);
rxy = zeros(1, Kmax+1);
rxx = zeros(1, Kmax+1);Kmin = 0;
for k = Kmin:kdecim:Kmax
xsim = padX(Wsim + xpos + k + simix);
rxx(k+1) = norm(xsim);
rxy(k+1) = (ysim * xsim');
end
Rxy = (rxx ~= 0).*rxy./(rxx+(rxx==0));
km = min(find(Rxy == max(Rxy))-1);
end
xabs = xpos+km;
Y(ypos+ovix) = ((1-xfwin).*Y(ypos+ovix)) + (xfwin.*padX(Wsim+xabs+ovix));
Y(ypos+newix) = padX(Wsim+xabs+newix);
end
end
(3)调用该函数的脚本文件为:```bash[y,fs]=audioread('C:\Users\ASUS\Desktop\杜\小学生的语音.wav'); %读取声音文件
x1=y(:,1); %读入的y矩阵有两列,取第1列,取一个通道
sound(voice(x1,2),fs);
N=length(voice(x1,1.5)); %长度
n=0:N-1;
w=2*n*pi/N;
y1=fft(voice(x1,1.5)); %对原始信号做FFT变换
subplot(2,1,1);
plot(n,voice(x1,1.5)) %做原始语音信号的时域波形图
title('变声语音信号时域图');
xlabel('时间t');
ylabel('幅值');
subplot(2,1,2); %做原始语音信号的频谱图
plot(w/pi,abs(y1));
title('变声语音信号频谱')
xlabel('频率');
ylabel('幅度');
filename = ('C:\Users\ASUS\Desktop\杜\变老人.wav'); %给文件取名
audiowrite(filename,x_z,fs) %存储.wav音频文件,在这里文件名

上述函数代码可通过更改采样率使基频改变 f>1降低;f<1升高来改变声音频率进行变声。

五、结论
1改变频谱可以实现变声;
2改变基频可以变声;
3共振峰与基频是变声的重点;
4、MATLAB可以做频谱分析,通过这次作业我更深的理解了MATLAB这个工具。
5、编程基本可以实现变声。目标可以实现!
六、实验组讨论

数字信号处理--语音信号变声报告相关推荐

  1. 多速率信号处理专题研讨 matlab,数字信号处理》课程研究性学习报告多速率信号处理专题研讨...

    1 / 11 数字信号处理>课程研究性学习报告多速率信号处理专题研讨 时间: 2016-05-30 来源:唯才教育网 本文已影响 人 <数字信号处理>课程研究性学习报告 姓名 学号 ...

  2. 多速率信号处理专题研讨 matlab,数字信号处理》课程研究性学习报告,多速率信号处理专题研讨...

    1/11数字信号处理>课程研究性学习报告,多速率信号处理专题研讨<数字信号处理>课程研究性学习报告姓名学号同组成员指导教师时间多速率信号处理专题研讨[目的]掌握序列抽取运算与内插运算 ...

  3. 怎么用计算机改变声音的音调,男声变女声用什么软件?能电脑语音说话变声吗?...

    男声变女声用什么软件?能电脑语音说话变声吗?我们在刷短视频或者看直播的时候,会发现有些主播会突然把声音进行改变,变搞怪的声音或加些声音特效,更甚的是,突然把男声音改成女声音,那他们是怎么做到说话声音的 ...

  4. 数字信号处理①之信号的合成、分解、相关性及傅里叶系数的计算

    数字信号处理系列博客: 数字信号处理之信号的合成.分解.相关性及傅里叶系数的计算 数字信号处理之从傅里叶系数到DFT 文章目录 一.信号的合成和分解 (一)傅里叶级数 (二)将正弦波合成方波 二.信号 ...

  5. matlab语音信号分析实验报告,DSP实验二 语音信号分析与处理,南京理工大学紫金学院实验报告,信号与系统...

    实验二语音信号分析与处理 学号姓名 注:1)此次实验作为<数字信号处理>课程实验成绩的重要依据,请同学们认真.独立完成,不得抄袭. 2)请在授课教师规定的时间内完成: 3)完成作业后,请以 ...

  6. 数字信号处理--语音信号处理

    摘 要 语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科.语音信号处理的目的是得到某些参数以便高效传输或存储,或者是用于某种应用.本设计利用计算机Windows下的录音机录入一句语音信 ...

  7. 实时语音趣味变声,大叔变声“妙音娘子”Get一下

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 游戏社交化是近年来游戏行业发展的重要趋势,如何提高游戏的社交属性已成为各大游戏厂商游戏策划的重要组成部 ...

  8. 数字信号处理之信号的抽取和内插

    注:学这部分内容时参考了宗孔德教授的<多抽样率信号处理>教材 一.为什么需要整数倍抽取和内插:文章最后有更详细说明 理想情况下的信号采样大部分信号是单一频率,直接设置一个固定值fs就可以. ...

  9. 实时语音趣味变声,大叔变声“妙音娘子”Get一下 1

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 游戏社交化是近年来游戏行业发展的重要趋势,如何提高游戏的社交属性已成为各大游戏厂商游戏策划的重要组成部 ...

  10. 西安交通大学控制专硕学硕考研资料清单(自动控制、数字信号处理、信号与系统)

    前言 这份资料是我当时自己考研使用的资料,应该说包含了西交自动化本科的方方面面的考研资料.我自己在西交自动化本科的时候自控和数字信号处理的成绩也都是95左右.后面考研成功后,这份资料分享给很多本校学弟 ...

最新文章

  1. Noip2015普及组第四题 Salesman的解题报告
  2. 十周第一次课(5月25日)
  3. java整形超过,Java整形溢出处理机制。
  4. zoj 1670 Jewels from Heaven
  5. docker 发布应用时添加 git revision
  6. WIN7 系统破解LoadRunner 11
  7. Codeforces 343D Water Tree(DFS序 + 线段树)
  8. 修改 timezone
  9. Java:接口interface
  10. C++ 偏微分数值计算库_「首席架构师推荐」数值分析软件精选
  11. 开源文档管理系统mysql_14款开源文档管理系统
  12. 录入人员照片注意事项无身份证人员录入
  13. linux centos7下源码 tar安装mysql5.7.22或mysql5.7.20 图文详解
  14. html游戏寻宝源码,WP7 Platformer寻宝游戏源码
  15. 浏览器端技术体系概览 -- 前端开发的七种武器
  16. vscode 扩展宿主意外终止
  17. 诺贝尔奖得主纳什夫妇因车祸去世
  18. 黑马程序员——Java基础--IO(一)
  19. 内存马涉及基础知识整理
  20. 网易2018校园招聘:重排数列 [python]

热门文章

  1. MP4、 MPEG-4区别
  2. 初识JavaScript,体验JS的美好
  3. Pegasus Serial Port Tool @ Simplicity Version 串口测试工具简化版发布
  4. 2020-09-12
  5. 论文笔记:The Effectiveness of Data Augmentation in Image Classification using Deep Learning
  6. 【Python】P2191 小Z的情书
  7. 无线网卡无法获取dhcp服务器,无线网络无法获取网络IP地址
  8. YF3-10L溢流阀的制造
  9. YOLOv3训练自己的数据详细步骤
  10. C.就来谈谈深搜与广搜