MATLAB课程设计
课 题 代 码 课题编号 指导老师
1
语音伪装器的设计与实现 31 8 邓磊 语音伪装器的设计与实现
一、我们每个人的声音不同,源于我们的每个人的音色和音调不一样,例如所说的男中音、女高音就是音调的不同。当然即便是音调一致,我们依然可以区分两个不同人的声音或者不同乐器的声音,这就是音色的不同。而我们要实现的语音变音器正是借助对声音音色和音调的双重复合改变,实现输出声音的改变。由表 1可知,在进行性别变音时,主要考虑基频和共振峰频率的变化。当基频伸展,共振峰频率也同时伸展, 可由男声变成女声,女声变成童声;反之基收缩共振峰频率也同时伸展, 可由男声变成女童;反之,基频收缩,共振峰频率也同时收缩,则由童声变女声,女声变男声。
表一 男声、女声和童声基频、共振峰频率关系表 人群 男声 女声 童声 基频分布Hz 【50,180】 【160,380】 【400,1000】 共振峰频率分布 偏低 中 偏高 二、实现步骤
1. 使用windows和matlab工具进行语音信号的录制与读入; 2. 对读入的语音信号进行频谱分析; 3. 设计数字滤波器并画出频响特性; 4. 对读入的语音信号进行滤波以滤除噪声; 5. 通过搬移、改变基波频率实现变声;
2
6. 语音信号恢复
7. 实现慢录快放和快录慢放功能; 8. 绘制输出各个部分的波形 。 三、语音伪装器的MATLAB程序与实现
%读取音频信号并分析处理
[x1,fs]=wavread('C:\\Users\\Administrator\\Desktop\\xq.wav');%读取音频文件,识别的是地址
sound(x1,fs); N=length(x1); n=[0:N-1];
X=fft(x1);%进行傅里叶变换 Fs=1*fs; T=1/Fs; f=n/N*Fs; figure(1);
subplot(2,1,1);plot(n,x1);%绘制原音频信号 title('原音频信号');
subplot(2,1,2);plot(f,abs(X));%绘制频谱图 title('音频的幅度谱');
%快速播放
sound(x,1.5*fs);%以1.5倍速度播放
3
%慢速播放
sound(x,0.5*fs);%以0.5倍速度播放
%巴特沃斯低通滤波器设计与描述 fc=9200; %设定滤波器各参数 fst=9600; rp=1; rs=30;
wp=fc*2/fs;%将模拟指标转换为数字指标 ws=fst*2/fs;
[n,wn]=buttord(wp,ws,rp,rs);%滤波器的最小阶数n,wn为系统频带
[b,a]=butter(n,wn,'low'); figure(2);
freqz(b,a);%绘制滤波器特性曲线 title('低通滤波器特性曲线');
%用低通滤波器对原始信号滤波
x2=filter(b,a,x1);%用滤波器对原始信号滤波 sound(x2,fs); figure(3);
y2=abs(fft(x2,30000));%滤波后的频谱
4
subplot(2,1,1);
plot(x2); %绘制滤波后的信号 title('滤波后语音信号时域图') subplot(2,1,2);
plot(y2); %绘制滤波后的音频频谱 title('滤波后语音信号频谱图')
%男声变为童声
p=fft(x2);%男声变童声信号处理 xaa=p; N=500;
pa=[0.1*xaa(1:1000),2.5*xaa(1:180000),0.1*xaa(1:1000)]; Y1=1*real(ifft(pa)); figure(4); subplot(2,1,1);
plot(x1);title('原始音频');%绘制原始音频信号 subplot(2,1,2);
plot(x2);title('变声后的音频');%绘制变声后的音频 figure(5); subplot(2,1,1);
plot(abs(X));title('原始音频频响');%绘制原始音频频响曲线 xlabel('X');ylabel('Y');
5