基于MATLAB的语音信号处理GUI设计
本课题旨在对音频文件的调制和滤波。音频信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过声音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。同时,声音也是人与机器之间进行通信的重要工具,它是一种理想的人机通信方式,因而可为信息处理系统建立良好的人机交互环境,进一步推动计算机和其他智能机器的应用,提高社会的信息化程度。
语音信号是基于时间轴上的一维数字信号,在这里主要是对语音信号进行频域上的分析。在信号分析中,频域往往包含了更多的信息。对于频域来说,大概有8种波形可以让我们分析:矩形方波,锯齿波,梯形波,临界阻尼指数脉冲波形,三角波,余旋波,余旋平方波,高斯波。对于各种波形,我们都可以用一种方法来分析,就是傅立叶变换:将时域的波形转化到频域来分析。
语音信号处理是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。虽然从事这一领域研究的人员主要来自信号与信息处理及计算机应用等学科,但是它与语音学、语言学、声学、认知科学、生理学、心理学等许多学科也有非常密切的联系。
在60年代,计算机的广泛应用推动了语音识别技术的发展,出现了多种语音信号分析方法,提出了动态规划(DP)和线性预测分析(LP)技术。其中后者较好地解决了语音信号产生模型的问题,对语音识别的发展产生了深远影响。 70年代,语音识别理论取得了突破。LP技术得到进一步发展,动态时间归正技术(DTW)基本成熟,特别是提出了矢量量化(VQ)和隐马尔可夫模型(HMM)理论。在实践上,实现了基于线性预测倒谱和DTW技术的特定人孤立语音识别系统。 80年代,HMM模型和人工神经元网络(ANN)成功应用于实践,并于1988年由CMU研制出了非特定人、大词汇量、连续语音识别系统—SPHINX。它可以理解由1000个单词构成的4200个句子,被认为是语音识别历史上的一个里程碑。HMM模型的广泛应用应归功于AT&T Bell实验室Rabiner等科学家的努力,他们把原本晦涩难懂的HMM纯数学模型工程化,从而为更多研究者了解和认识。ANN和HMM模型建立的语音识别系统,性能相当。 进入90年代,随着多媒体时代的来临,迫切要求语音识别系统从实验室走向实用。许多著名的大公司如IBM、苹果、AT&T和NTT都对语音识别系统的实用化研究投以巨资。
语音识别技术有一个很好的评估机制,那就是识别的准确率,而这项指标在20世纪90年代中后期实验室研究中得到了不断的提高。比较有代表性的系统有:IBM公司推出的Via Voice和Dragon System公司的Naturally Speaking Nuance公司的Nuance Voice Platform语音平台,Microsoft的Whisper Sun的Voice Tone等。语音识别也得到了更多的商用,其中SpeechWorks6是世界领先的电话自动语音识别系统解决方案提供者—SpeechWorks公司的代表产品。利用该产品,用户可以通过电话用自然语言与系统进行交互,进行旅游预约、股票交易、银行服务、订票服务、宾馆服务和寻呼服务等,无需服务人员的介入。目前市场上出现了语音识别电话、语音识别记事本等产品,如美国VPTC公司的VoiceOrganizer和法国的Parrot等。
在我国,语音技术的研究起步较晚,70年代末才开始了语音技术的研究,但在很长一段时间内,都处于缓慢发展的阶段,直到80年代后期,随着计算机应用技术在我国的逐渐普及和数字信号处理技术的进一步发展,国内许多单位纷纷投入到这项研究工作中去,其中有中科院声学所,自动化所,清华大学,四川大学和西北工业大学等科研机构和高等院校,大多数研究者致力于语音识别的基础理论研究工作、模型及算法的研究和改进。但由于起步晚、基础薄弱、计算机水平不发达,导致在整个80年代,我国在语音识别研究方面并没有形成自己的特色,更没有取得显著的成果和开发出大型性能优良的实验系统。
在本课题中,所要研究的内容首先是语音的录入部分和对录入的音频数据进行频谱的分析并画出其图像。其次是设计滤波器并对加入噪声后的音频文件进行滤波并考察其使用情况以此来检验滤波器的设计是否正确。
本课题研究内容包括:
开始工作
对音频信号采集
音频信号的处理
验证滤波效果
添加噪声
对原信号进行傅里叶变换
使用滤波器对信号滤波
画图观察采集信号的时域波形
画图观察变换后信号的频域波形
使用不同种类的滤波器,观察区别
本次实验采用wavread命令对声音信号进行采集,在采集的过程中采样频率是由MATLAB软件自行定义的,由于录制声音采样率较低故可以不设定采样频率仅使用软件默认的采样频率进行采样。
以下展示的程序为语音信号在MATLAB中操作的表现,它实现了语音的读入打开,并利用FFT快速傅里叶变换绘出了语音信号的波形图频谱图。
clear all;
music=input('输入文件名:','s')
[y,fs,nbits]=wavread(music); %音频信号的采集
sound(y,fs,nbits); %音频信号的播放
n=length(y); %设定长度
Y=fft(y,n); %快速傅里叶变换
figure; %控窗
subplot(2,1,1);
plot(y,’r’);
title('波形图','fontweight','blod');
grid; %网格
subplot(2,1,2);
plot(abs(Y),’b’); %取绝对值
title('频谱图','fontweight','blod');
grid;
如图所示,展示的是一段语音信号的时域和频域波形
MATLAB中产生高斯白噪声的两个函数
MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。
在设计中使用的是直接产生高斯噪声的RANDN函数,实验采用的是MATLAB中的随机函数rand产生噪声加入到语音信号中,通过对噪声信号的加入以此来实现模仿语音信号被污染,并对添加噪声后的文件进行频谱分析。
matlab函数randn:产生正态分布的随机数或矩阵的函数
randn
产生均值为0,方差 σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数。
用法:
Y = randn(n)
返回一个n*n的随机项的矩阵。如果n不是个数量,将返回错误信息。
Y = randn(m,n) 或 Y = randn([m n])
返回一个m*n的随机项矩阵。
Y = randn(m,n,p,...) 或 Y = randn([m n p...])
产生随机数组。
Y = randn(size(A))
返回一个和A有同样维数大小的随机数组。
在本次实验过程中,我们选用Randn(m,n)函数。对语音信号添加噪声及其频谱分析的主要程序如下:
clear all;
music=input('输入文件名:','s')
[y,fs,nbits]=wavread(music);%语音信号的采集
n = length (y)
Noise=0.3*randn(n,2); %编辑噪声
s=y+Noise;
Y=fft(y,n);
sound(s);
S=fft(s);
figure;
subplot(2,2,1);
plot(y,'r');
title('时域波形图','fontweight','bold');
grid;
subplot(2,2,2);
plot(abs(Y),'r');
title('频域波形图','fontweight','blod');
subplot(2,2,3);
plot(s);
title('加噪时域波形图','fontweight','bold');
grid;
subplot(2,2,4);
plot(abs(S));
title('加噪频域波形图','fontweight','bold');
grid;
;
程序运行结果如下:
加噪后信号波形图
录制声音过程中需对声音电平进行量化处理,最理想的量化是最大电平对应最高量化比特,但实际却很难做到,常有轻音问题。利用MATLAB很容易实现音量标准化,即最大电平对应最高量化比特。基本步骤是:先用wavread函数将.wav文件转换成列数组变量;再求出数组变量的极值并对所有元素作归一化处理;最后用wavwrite函数还原成音量标准化的.wav文件。
运行程序如下:
clear all;
music=input('输入文件名:','s')
[y,fs,nbits]=wavread(music);%语音信号的采集
ym=max(max(max(y)),max(abs(min(y))));
x=y/ym;
figure;
subplot(2,1,1);
plot(y,’r’);
title('原图','fontweight','blod');
grid; %网格
subplot(2,1,2);
plot(x,’b’);
title('改图','fontweight','blod');
grid;
sound(x)
wavwrite(x,fs,bits,'2.wav');
程序内容为:对原语音信号处理保存后播放并画出时域波形图,有音量增大的效果。但于实际测试播放时声音会有一定程度的失真。
程序运行结果:
如图,运行后相较于原波形图有了一定程度的幅度提高。
在语音信号的分析与处理过程中往往会对原语音信号进行重采样处理。经过重采样后能够减少程序的运行负担。在低配置的电脑系统中较为重要。
同时,重采样还能够带来降频和倍频的功能。在平时的信号处理中这种变换调整也经常要用到。所以在设计中也添加了这种功能,通过相关的处理可以使语音信号的声音特征产生一定的变化。在本次实验中,常通过重采样功能对声音信号进行调制。故在此进行部分说明。在本次软件使用时重采样功能多用于对原声音文件进行降频。
以下为本次实验中使用的重采样功能的部分代码:
fre=get(handles.popagainhz,'string');
popup_sel_index = get(handles.popagainhz, 'Value');
switch popup_sel_index
case 1
fre=1000;
case 2
fre=2000;
case 3
fre=4000;
end
figure(4);
subplot(2,2,1);
plot(ft);
title('原始信号波形');xlabel('时间');ylabel('幅度');
subplot(2,2,2);
Y=fft(ft);
plot(abs(Y));
title('原始信号频谱');xlabel('频率');ylabel('幅度');
%重采样
y2=resample(ft,1,Fs/fre);
sound(y2,fre);
subplot(2,2,3);
plot(y2);
title('重采样后信号波形');xlabel('时间');ylabel('幅度');
subplot(2,2,4);
Y2=fft(y2);
plot(abs(Y2));
title('重采样后信号频谱)');xlabel('时间');ylabel('幅度');
[1] 郑春佳、陈仅星、陈金西,【数字信号处理-基于数值计算】西安电子科技大学出版社.
[3] 刘卫国,【matlab程序设计与应用】高等教育出版社.
[3] 胡航,【语音信号处理】哈尔滨工业大学出版社.
[4] 刘幺和、宋庭新,【语音识别与控制技术】,科学出版社.
[5] 苏金明、张莲花、刘波,【MATLAB工具箱应用】,电子工业出版社.
[6] 赵新敏,(语音信号的识别技术),学位论文,天津大学.
[7] 网友,(基于MATLAB的有噪声引号处理),学位论文,南京大学
[8] 王京辉,(语音信号处理技术研究) 论文,山东大学.
[9] 赵力,语音信号处理,机械工业出版社.
[10] 陈杰,【Matlab宝典】电子工业出版社.
[11] (美) Sanjit K. Mitra著;孙洪, 余翔宇等译.【数字信号处理实验指导书】
[12] 杨述斌,李永全,【数字信号处理实践教程】华中科技大学出版社
[14] Gersho A,Gr R M.Vector quantization and signalCompression,Boston,Kluwer Academic Publishers.