基于matlab的语音信号处理
摘要
利用所学习的数字信号处理知识,设计了一个有趣的音效处理系统,首先设计了几种不同的滤波器对声音进行滤波处理,分析了时域和频域的变化,比较了经过滤波处理后的声音与原来的声音有何变化。同时设计实现了语音的倒放,变速播放,回响,音调转换等处理效果,其中音调转换部分使用了重新采样改变基频,再进行时长规整的算法。
基于MATLAB的语音信号处理
语音信号的采集
录制或者截取一段音乐,时间在1分钟左右,存为.wav的文件。然后利用wavread对语音信号进行采样。我们一共选择了3段语音,其中
d.wav 真心英雄(周华健)(男声)
man.wav我的歌声里(自己录制)(男声)
girl.wav看的最远的地方(张韶涵)(女声)
语音信号的频谱分析
使用matlab画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,画出频谱图,分析频率成分。这里我们分析的是d.wav,通过分析知道频率分布在0—10KHz,主要分布在低频。
数字滤波器设计
这里我们设计了4种滤波器对语音进行处理,分别为椭圆低通滤波,椭圆高通滤波,等波纹逼近法FIR带通滤波器,双线性变换法切比雪夫数字高通滤波器,绘制出相应的幅度、相位谱图,滤波后的波形、频谱图。
各滤波器的设计如下:
椭圆低通滤波器:fb=1 200 Hz,fc=1 400 Hz,As=100 dB,Ap=1 dB
椭圆高通滤波器:fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB
等波纹逼近法设计FIR带通滤波器
fb1=1200Hz,fb2=3000Hz,fc1=1000Hz,fc2=3000Hz,As=100dB,Ap=1dB
双线性变换法切比雪夫数字高通滤波器
fc=4 800 Hz,fb=5 000 Hz As=100 dB,Ap=1 dB
滤波处理后,我们用函数sound()可以对声音进行回放,调用格式:sound(x,fs,bits);感觉滤波前后的声音。语音的低频部分沉稳,空间感较强;中频部分音质一般;高频部分音质非常尖锐,略微有尖音。此外中高频的幅度都不大,回放时音量较低。
语音变速播放
改变语音的播放速度也就是改变采样间隔(即改变了采样频率),但是这个频实现率依然要在2f(Nyquist rate)之上,否则就会产生失真。
%变速-慢放%
w=0.9;
M=w*fs; %w>1为快放,w<1为慢放
sound(x,M,nbits);
语音倒放
使用flipud()倒置语音矩阵,逆序输出音频即可。
回响效果
回声在时域上幅值减小了,频域上的特征不变,只需要把原信号添加一个延时(delay)和对时域的幅度添加一个参数.然后和原信号叠加即可获得回响效果。
实现男女声转换音效效果
我们使用另外写的voice(x,f)函数实现音调转换,x为需要转换的声音,通过抽取插值更改采样率来改变基频,当f>1时音调降低;f<1音调升高。然后再进行时长整合使语音文件恢复原来的时长。时长整合使用重叠叠加算法来实现。经过我们试听,转换效果还是很好的。
总结体会
通过对声音信号的滤波处理,比较其前后变化,感受到了滤波器在声音信号处理当中的作用,同时在实践中掌握了滤波器的基本设计方法,加深了对各种类型的数字滤波器特性的理解。我们通过对声音的各种变换,产生了多种不同的音效,也体会到了语音处理的魅力。
代码附录
%读取声音信号%
[y,fs,nbits]=wavread('d'); %读取声音文件
x=y(:,1); %读入的y矩阵有两列,取第1列
N=length(x);
n=0:N-1;
X= fft(x); %傅里叶变换
Fs=2*fs; %2倍频
T=1/Fs;
f=n/N*Fs;
figure;
subplot(2,1,1);
plot(n,x); %声音的时域波形
title('原声音的波形');
xlabel('t/s');
ylabel('magnitude');
subplot(2,1,2);
plot(f,abs(X)); %声音的频谱
title('原声音的频谱');
xlabel('frequency/Hz');
ylabel('magnitude');
% 滤波器设计%
% 椭圆低通滤波器%
fp1=1200;fs1=1400; %低通滤波器通带截止频率1200Hz和阻带截止频率1400Hz
wp1=2*fp1/Fs; ws1=2*fs1/Fs;rp=1;as=100;
[N1,wp1]=ellipord(wp1,ws1,rp,as); %计算椭圆低通模拟滤波器的阶数和通带边界频率
[B,A]=ellip(N1,rp,as,wp1); %计算低通滤波器模拟滤波器系统函数系数
y1=filter(B,A,x); %滤波器软件实现
% 低通滤波器绘图部分%
figure;
freqz(B,A);
figure;
subplot(2,1,1);
t=n*T;
plot(t,y1);
xlabel('t/s');ylabel('magnitude');title('低通滤波后的波形');
axis([0,t(end),min(y1),1.2*max(y1)])%坐标范围
subplot(2,1,2);
plot(f,abs(fft(y1)));
%椭圆高通滤波器%
fp2=4800;fs2=5000; %高通滤波器通带截止频率5000Hz和阻带截止频率4800Hz
% 高通滤波器绘图部分%
figure;
freqz(B2,A2);
figure;
subplot(2,1,1);
t=n*T;
plot(t,y2);
xlabel('t/s');ylabel('magnitude');title('高通滤波后的波形');
axis([0,t(end),min(y2),1.2*max(y2)])
subplot(2,1,2);
plot(f,abs(fft(y2)));
%等波纹逼近法设计FIR带通滤波器及滤波
[I,fs,nbits]=wavread('d');
y=I(:,1);
fp1=1200;fp2=3000;fc1=1000;fc2=3200;FS=2*fs;rp=1;rs=100;
f=[fc1,fp1,fp2,fc2];
m=[0,1,0];
dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20);
rip=[dat2,dat1,dat2];
[M,fo,mo,w]=remezord(f,m,rip,FS);
M=M+1;
hn=remez(M,fo,mo,w);
figure(1);
freqz(hn);
Y=fft(y);
y1=fftfilt(hn,y); %用remez设计的滤波器进行滤波
figure(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('等波纹逼近法滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('等波纹逼近法滤波后语音频谱');
sound(y1,fs,nbits); %滤波后语音回放
%cheby1设计模拟高通滤波器再经双线性变换法设计成数字高通滤波器
fp=5000;fc=4800;rp=1;rs=100;FS=2*fs;
wpz=2*pi*fp/FS;wsz=2*pi*fc/FS;
wp=2*tan(wpz/2)*FS;ws=2*tan(wsz/2)*FS; %预畸校正转换指标
[N,wpo]=cheb1ord(wp,ws,rp,rs,'s');
[BH,AH]=cheby1(N,rp,wpo,'high','s');
[Bz,Az]=bilinear(BH,AH,FS);
w=0:0.01*pi:pi;
[h,w]=freqz(Bz,Az,w);
plot(w/pi,20*log(abs(h)),'k');axis([0,1,-800,100]);
xlabel('w/pi');ylabel('幅度/dB');grid;
title('cheby1数字高通滤波器');
Y=fft(y);
figure(2);
subplot(221);plot(y);title('未滤波语音波形');
subplot(222);plot(y1);title('cheby滤波后语音波形');
subplot(223);plot(n,Y);title('未滤波语音频谱');
subplot(224);plot(n,Y1);title('cheby滤波后语音频谱');
sound(y1,fs,nbits); %滤波后语音回放
%播放声音%
sound(x,fs,nbits); %原声
sound(5*y1,fs,nbits); %低通
sound(5*y2,fs,nbits); %高通
%变速-慢放%
w=0.9;
M=w*fs; %w>1为快放,w<1为慢放
sound(x,M,nbits);
%语音倒放%
y0=flipud(x);
sound(y0);
%回声%
z=[zeros(5000,1);x]; %延时5000个点
x1=[x;zeros(5000,1)]; %使原声音长度与延时后相等
y1=x1+0.4*z; %原声+延时衰减
figure;
plot(y1);
title('加入回声的波形');
sound(5*y1,fs,nbits);
%调用函数voice()实现音调转换%
%男声转换为女声%
[y,fs,nbits]=wavread('man'); %读取声音文件
x=y(:,1); %读入的y矩阵有两列,取第1列
y1=voice(x,0.71); %调整voice()第2个参数转换音调,>1降调,<1升调,y1为x转换后的声音
N=length(x); M=length(y1);
n=0:N-1; m=0:M-1;
X= fft(x); Y=fft(y1); %傅里叶变换
Fs=2*fs; %2倍频
T=1/Fs; T1=1/Fs*0.71;
figure;
subplot(2,1,1);
plot(t,x);
xlabel('t/s');ylabel('magnitude');title('转换前的波形');
subplot(2,1,2);
plot(t1,y1);
xlabel('t/s');ylabel('magnitude');title('转换后的波形');
figure;
subplot(2,1,1);
plot(f,abs(X));
xlabel('frequency/Hz');ylabel('magnitude');title('转换前的频谱');
subplot(2,1,2);
plot(f1,abs(Y));
xlabel('frequency/Hz');ylabel('magnitude');title('转换后的频谱');
sound(y1,fs,nbits);
%女声转换为男声%
[y,fs,nbits]=wavread('girl'); %读取声音文件
x=y(:,1); %读入的y矩阵有两列,取第1列
sound(voice(x,1.3),fs,nbits);
%调整voice()第2个参数转换音调,>1降调,<1升调
function Y=voice(x,f)
%更改采样率使基频改变 f>1降低;f<1升高
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);
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
基于matlab的语音信号处理相关推荐
- 基于matlab的语音信号基本处理系统,基于matlab的语音信号处理及分析
内容简介: 毕业设计 基于matlab的语音信号处理及分析(共19页,8147字) 引言 数字信号处理的主要研究对象是数字信号,且是采用运算的方法达到处理的目的的,因此,其实现方法,基本上分成两种实现 ...
- 基于matlab的音频信号处理系统,毕业设计-基于matlab的语音信号处理及分析
资料简介 毕业设计 基于matlab的语音信号处理及分析(共19页,8147字) 引言 数字信号处理的主要研究对象是数字信号,且是采用运算的方法达到处理的目的的,因此,其实现方法,基本上分成两种实现方 ...
- 基于matlab的语音信号处理,基于MATLAB语音信号处理的研究
摘 要:语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一.通过语音传递信息是人类最重要.最有效.最常用和最方便的交换信 ...
- 基于MATLAB的语音信号处理系统的设计
目 录 摘 要 I Abstract II 1 绪论 1 2 语音信号处理系统设计方案 2 2.1MATLAB的说明 2 2.2系统框架及实现流程图 2 2.2.1系统框架: 2 2.2.2系统流程图 ...
- 基于matlab的语音信号,科学网—[转载]【信息技术】【2014.06】【含源码】基于MATLAB的语音信号处理与分析 - 刘春静的博文...
本文为瑞典耶夫勒大学(作者:Nan Wu)的学士论文,共48页. 语音传递是人类最重要.最有效.最常用的信息交流方式.语言是人类特有的特征,而人声是常用的工具,也是相互传递信息的重要途径.语音具有较大 ...
- 基于matlab的音频信号处理毕业设计(含源文件
基于MATLAB的语音信号处理GUI设计 一.课题研究的意义 本课题旨在对音频文件的调制和滤波.音频信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息 ...
- 【老生谈算法】matlab实现语音信号处理与仿真——语音信号处理算法
基于Matlab的语音信号处理与仿真 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]MATLAB语音处理.docx 2.算法 ...
- Matlab语音采集与读写程序,基于MATLAB的语音信号录制采集和分析的程序设计
理 论广 角 ● I 基于 MATLAB的语音信号录制采集和分析的程序设计 刘 晓炯 (西北民族大学电气工程学院 甘肃 兰州I 730030) [摘 要]语音信号处理技术是语音处理领域中新近发展起来的 ...
- matlab音乐信号处理,数字信号处理课程设计---基于 MATLAB 的音乐信号处理和分析...
数字信号处理课程设计---基于 MATLAB 的音乐信号处理和分析 1<数字信号处理>课程设计设计题目:基于 MATLAB 的音乐信号处理和分析一.课程设计的目的本课程设计通过对音乐信号的 ...
- matlab如何采集两路语音信号,基于MATLAB的语音信号采集与处理
内容介绍 原文档由会员 大雨倾盆 发布 基于MATLAB的语音信号采集与处理 2.4万字 114页 原创作品,已通过查重系统 摘要 语音信号处理作为目前发展最为迅速的信息科学研究领域的核心技术,它是一 ...
最新文章
- 不使用fastreport自带的条码组件打印快递单(一款很不错的条码组件下载)
- Linux——Windows连接CentOS XRDP 错误信息(login failed for display 0)
- Golang之实现一个负载均衡算法(随机,轮询)
- 细究fork()和vfork()
- 窗口句柄、窗口类对象的关系
- 梯度下降python编程实现_【机器学习】线性回归——单变量梯度下降的实现(Python版)...
- Maven私服(一)
- 如何在centos7上安装FreeIPA的客户端
- OpenCV-绘制圆端矩形(药丸)
- 广发基金总经理林传辉:深耕资产管理本源做投资者的资产配置专家
- 【单目标优化求解】基于matlab被囊群算法(TSA)求解最优目标问题【含Matlab源码 1567期】
- UEFI学习 (一) ——下载与编译
- 10款超炫HTML5游戏 附游戏源码
- Python :文本数据挖掘并绘制词云图
- 注册github账号指南
- 广东外语外贸大学第16届程序设计竞赛-C 井大师的码魂
- POJ3322(bfs+状态限制)
- python面向对象编程指南([美stevenflott_Python面向对象编程指南 ([美]StevenFLott洛特) 中文_IT教程网...
- CNN中.view()和.shape()用法总结
- 【SDX12】高通SDX12 NatType功能分析及实现