语音信号处理实验
语音信号处理实验报告.docx
在实验中,当P值增加到一定程度,预测平方误差的改善就不很明显了,而且会增加计算量,一般取为8~14,这里P取为10。
5.基音周期估计
①自互相关函数法
②短时平均幅度差法
二.实验过程
1. 系统结构
2.仿真结果
(1)时域分析
男声及女声(蓝色为时域信号,红色为每一帧的能量,绿色为每一帧的过零率)
某一帧的自相关函数
3.频域分析
①一帧信号的倒谱分析和FFT及LPC分析
②男声和女声的倒谱分析
③浊音和清音的倒谱分析
④浊音和清音的FFT分析和LPC分析(红色为FFT图像,绿色为LPC图像)
从男声女声的时域信号对比图中可以看出,女音信号在高频率分布得更多,女声信号在高频段的能量分布更多,并且女声有较高的过零率,这是因为语音信号中的高频段有较高的过零率。
2.频域分析
这里对信号进行快速傅里叶变换(FFT),可以发现,当窗口函数不同,傅里叶变换的结果也不相同。根据信号的时宽带宽之积为一常数这一性质,可以知道窗口宽度与主瓣宽度成反比,N越大,主瓣越窄。汉明窗在频谱范围中的分辨率较高,而且旁瓣的衰减大,具有频谱泄露少的有点,所以在实验中采用的是具有较小上下冲的汉明窗。
三.实验结果分析
1.时域分析
实验中采用的是汉明窗,窗的长度对能否由短时能量反应语音信号的变化起着决定性影响。这里窗长合适,En能够反应语音信号幅度变化。同时,从图像可以看出,En可以作为区分浊音和清音的特征参数。
短时过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。从图中可以看出,短时能量和过零率可以近似为互补的情况,短时能量大的地方过零率小,短时能量小的地方过零率较大。从浊音和清音的时域分析可以看出,清音过零率高,浊音过零率低。
语音信号处理实验报告实验二
语音信号处理实验报告实验二一、实验目的本次语音信号处理实验的目的是深入了解语音信号的特性,掌握语音信号处理的基本方法和技术,并通过实际操作和数据分析来验证和巩固所学的理论知识。
具体而言,本次实验旨在:1、熟悉语音信号的采集和预处理过程,包括录音设备的使用、音频格式的转换以及噪声去除等操作。
2、掌握语音信号的时域和频域分析方法,能够使用相关工具和算法计算语音信号的短时能量、短时过零率、频谱等特征参数。
3、研究语音信号的编码和解码技术,了解不同编码算法对语音质量和数据压缩率的影响。
4、通过实验,培养我们的动手能力、问题解决能力和团队协作精神,提高我们对语音信号处理领域的兴趣和探索欲望。
二、实验原理(一)语音信号的采集和预处理语音信号的采集通常使用麦克风等设备将声音转换为电信号,然后通过模数转换器(ADC)将模拟信号转换为数字信号。
在采集过程中,可能会引入噪声和干扰,因此需要进行预处理,如滤波、降噪等操作,以提高信号的质量。
(二)语音信号的时域分析时域分析是对语音信号在时间轴上的特征进行分析。
常用的时域参数包括短时能量、短时过零率等。
短时能量反映了语音信号在短时间内的能量分布情况,短时过零率则表示信号在单位时间内穿过零电平的次数,可用于区分清音和浊音。
(三)语音信号的频域分析频域分析是将语音信号从时域转换到频域进行分析。
通过快速傅里叶变换(FFT)可以得到语音信号的频谱,从而了解信号的频率成分和分布情况。
(四)语音信号的编码和解码语音编码的目的是在保证一定语音质量的前提下,尽可能降低编码比特率,以减少存储空间和传输带宽的需求。
常见的编码算法有脉冲编码调制(PCM)、自适应差分脉冲编码调制(ADPCM)等。
三、实验设备和软件1、计算机一台2、音频采集设备(如麦克风)3、音频处理软件(如 Audacity、Matlab 等)四、实验步骤(一)语音信号的采集使用麦克风和音频采集软件录制一段语音,保存为常见的音频格式(如 WAV)。
语音信号处理实验
实验二 语音信号的时域分析一、 实验目的在理论学习的基础上,进一步理解和掌握语音信号短时能量、短时过零了分析的意义及基于matlab 的实现方法。
二、 实验原理语音是一时变的、非平稳的随机过程,但由于一段时间内(10-30ms)人的声带和声道形状的相对稳定性,可认为其特征是不变的,因而语音的短时谱具有相对稳定性。
在语音分析中可以利用短时谱的这种平稳性,将语音信号分帧。
10~30ms 相对平稳,分析帧长一般为20ms 。
语音信号的分帧是通过可移动的有限长度窗口进行加权的方法来实现的。
几种典型的窗函数有:矩形窗、汉明窗、哈宁窗、布莱克曼窗。
语音信号的能量分析是基于语音信号能量随时间有相当大的变化,特别是清音段的能量一般比浊音段的小得多。
定义短时平均能量[][]∑∑+-=∞-∞=-=-=nN n m m n m n w m x m n w m x E 122)()()()( 下图说明了短时能量序列的计算方法,其中窗口采用的是直角窗。
过零就是信号通过零值。
对于连续语音信号,可以考察其时域波形通过时间轴的情况。
而对于离散时间信号,如果相邻的取样值改变符号则称为过零。
由此可以计算过零数,过零数就是样本改变符号的次数。
单位时间内的过零数称为平均过零数。
语音信号x (n )的短时平均过零数定义为()[]()[]()()[]()[]()n w n x n x m n w m x m x Z m n *--=---=∑∞-∞=1sgn sgn 1sgn sgn 式中,[]∙sgn 是符号函数,即()[]()()()()⎩⎨⎧<-≥=0101sgn n x n x n x短时平均过零数可应用于语音信号分析中。
发浊音时,尽管声道有若干个共振峰,但由于声门波引起了谱的高频跌落,所以其语音能量约集中干3kHz 以下。
而发清音时.多数能量出现在较高频率上。
既然高频率意味着高的平均过零数,低频率意味着低的平均过零数,那么可以认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数。
语音信号处理实验报告2
实验二语音信号的频域特性一、实验目的(1)结合汉语语音信号的各类音素和复元音的特点分析其频域性质;(2)熟悉语音信号的各类音素和复元音的频域参数;(3)熟悉声音编辑软件PRAAT的简单使用和操作。
二、实验记录与思考题1. 观察语音信号的频域特点,总结其规律。
浊音段:其谱线结构是与浊音信号中的周期信号密切相关。
具有与基音及其谐波对应的谱线。
频谱包络中有几个凸起点,与声道的谐振频率相对应。
这些凸起点为共振峰。
清音段:清音的频谱无明显的规律,比较平坦。
2.总结清音/b/p/m/f/d/t/n/l/g/k/h/j/q/x/z/c/s/zh/ch/sh/r/共21个的语谱图的规律,给出辅音的能量集中区;语谱图中的花纹有横杠、乱纹和竖直条。
横杠是与时间轴平行的几条深黑色带纹,它们是共振峰。
从横杠对应的频率和宽度可以确定相应的共振峰频率和带宽。
在一个语音段的语谱图中,有没有横杠出现是判断它是否是浊音的重要标志。
竖直条是语谱图中出现于时间轴垂直的一条窄黑条。
每个竖直条相当于一个基音,条纹的起点相当于声门脉冲的起点,条纹之间的距离表示基音周期,条纹越密表示基音频率越高。
b,p……清音的语谱图为乱纹。
辅音的能量集中区为:高频区3. 总结浊音/a/o/e/i/u/ü/ao/ai/ei/ou/ie /an/en/in/ang/eng/ong/ing/共18个的语谱图的规律,提取这18个浊音的基频、前三个共振峰频率4./r/、/m/、/n/、/l/ 从这几个音素的的基频、共振峰频率5.分析宽带语谱图和窄带语谱图的不同之处,请解释原因;语谱图中的花纹有横杠、乱纹和竖直条等。
横杠是与时间轴平行的几条深黑色带纹,它们是共振峰。
从横杠对应的频率和宽度可以确定相应的共振峰频率和带宽。
在一个语音段的语谱图中,有没有横杠出现是判断它是否是浊音的重要标志。
竖直条(又叫冲直条)是语谱图中出现与时间轴垂直的一条窄黑条。
每个竖直条相当于一个基音,条纹的起点相当于声门脉冲的起点,条纹之间的距离表示基音周期。
语音信号处理试验教程
语音信号处理试验实验一:语音信号时域分析实验目的:(1)录制两段语音信号,内容是“语音信号处理”,分男女声。
(2)对语音信号进行采样,观察采样后语音信号的时域波形。
实验步骤:1、使用window自带录音工具录制声音片段使用windows自带录音机录制语音文件,进行数字信号的采集。
启动录音机。
录制一段录音,录音停止后,文件存储器的后缀默认为.Wav。
将录制好文件保存,记录保存路径。
男生女生各录一段保存为test1.wav和test2.wav。
图1基于PC机语音信号采集过程。
2、读取语音信号在MATLAB软件平台下,利用wavread函数对语音信号进行采样,记住采样频率和采样点数。
通过使用wavread函数,理解采样、采样频率、采样位数等概念!Wavread函数调用格式:y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
y=wavread(file,N),读取前N点的采样值放在向量y中。
y=wavread(file,[N1,N2]),读取从N1到N2点的采样值放在向量y中。
3、编程获取语音信号的抽样频率和采样位数。
语音信号为test1.wav和test2.wav,内容为“语音信号处理”,两端语音保存到工作空间work文件夹下。
在M文件中分别输入以下程序,可以分两次输入便于观察。
[y1,fs1,nbits1]=wavread('test1.wav')[y2,fs2,nbits2]=wavread('test2.wav')结果如下图所示根据结果可知:两端语音信号的采样频率为44100HZ,采样位数为16。
4、语音信号的时域分析语音信号的时域分析就是分析和提取语音信号的时域参数。
进行语音分析时,最先接触到并且夜市最直观的是它的时域波形。
语音信号处理_实验一_报告2
实验一语音信号的频域特性1. 观察语音信号的时域波形特点,总结其规律。
答:1)清音段:能量低,过零率高,波形特点有点像随机的噪声。
这部分信号常与语音的辅音段对应。
2)浊音段:能量高,过零率地,波形具有周期特点。
所谓的短时平稳性质就是处于这个语音浊音段中。
3)过渡段:一般是指从辅音段向元音段信号变化之间的部分。
信号变化快,是语音信号处理中最复杂、困难的部分。
2.总结清音b/p/m/f/d/t/n/l/g/k/h/j/q/x//z/c/s/zh/ch/sh/r/共21个的短时幅值、短时过零率和自相关函数的规律,估算这21个清音的平均短时幅值和平均短时过零率;答:加矩形窗的21个清音的平均短时幅值和平均短时过零率为下表:清音音节平均短时幅值平均短时过零率b 2.126 1.000p 0.706 9.100m 2.427 5.000f 0.685 1.500d 0.817 9.667t 1.168 1.000n 1.150 4.176l 2.084 6.200g 0.150 24.333k 0.959 7.333h 0.629 21.857j 0.129 13.000q 0.184 36.909x 0.168 21.400z 0.173 6.200c 0.785 7.294s 0.158 17.000zh 0.203 31.500ch 0.237 27.535sh 0.182 28.692r 1.814 5.5333. 总结浊音a/o/e/i/u/v/ao/ai/ei/ou/an/en/in/ang/eng/ong/ing/共17个的短时幅值、短时过零率和自相关函数的规律,估算这17个浊音的平均短时幅值和平均短时过零率,从自相关函数上估算这17个浊音的基音周期;答:浊音能量高,短时幅值也比较高,短时过零率比较低,由于浊音有一定的准周期性,所以自相关函数有比较明显的峰值和周期性。
浊音音节平均短时幅值平均短时过零率基音周期a 3.662 0.643 57o 2.948 0.184 71e 2.531 0.148 59i 1.693 0.061 60u 1.300 0.032 61v 1.081 0.024 66ao 2.000 0.123 71ai 2.307 0.121 57ei 1.828 0.074 67ou 0.294 0.000 67an 1.500 0.061 58en 1.827 0.073 54in 2.257 0.118 56ang 0.591 0.009 65eng 1.473 0.053 56ong 1.712 0.059 64ing 0.494 0.014 714. /r/、/m/、/n/ 从这几个音素的自相关函数图形判断为“清音”还是“浊音”,若为浊音估算其基音周期;答:(1)/r/: 自相关函数具有周期性,基音周期为67(样本点数)(2)/m/: 自相关函数具有周期性,基音周期为67(样本点数)(3)/n/ : 自相关函数具有周期性,基音周期为59(样本点数)可以看出/r/、/m/、/n/这几个因素的自相关函数图形有准周期性,并且有比较明显的峰值,所以为浊音。
最新语音信号处理实验报告实验二
最新语音信号处理实验报告实验二实验目的:本实验旨在通过实际操作加深对语音信号处理理论的理解,并掌握语音信号的基本处理技术。
通过实验,学习语音信号的采集、分析、滤波、特征提取等关键技术,并探索语音信号处理在实际应用中的潜力。
实验内容:1. 语音信号采集:使用语音采集设备录制一段时长约为10秒的语音样本,确保录音环境安静,语音清晰。
2. 语音信号预处理:对采集到的语音信号进行预处理,包括去噪、归一化等操作,以提高后续处理的准确性。
3. 语音信号分析:利用傅里叶变换等方法分析语音信号的频谱特性,观察并记录基频、谐波等特征。
4. 语音信号滤波:设计并实现一个带通滤波器,用于提取语音信号中的特定频率成分,去除噪声和非目标频率成分。
5. 特征提取:从处理后的语音信号中提取关键特征,如梅尔频率倒谱系数(MFCC)等,为后续的语音识别或分类任务做准备。
6. 实验总结:根据实验结果,撰写实验报告,总结语音信号处理的关键技术和实验中遇到的问题及其解决方案。
实验设备与工具:- 计算机一台,安装有语音信号处理相关软件(如Audacity、MATLAB 等)。
- 麦克风:用于采集语音信号。
- 耳机:用于监听和校正采集到的语音信号。
实验步骤:1. 打开语音采集软件,调整麦克风输入设置,确保录音质量。
2. 录制语音样本,注意控制语速和音量,避免过大或过小。
3. 使用语音分析软件打开录制的语音文件,进行频谱分析,记录观察结果。
4. 设计带通滤波器,设置合适的截止频率,对语音信号进行滤波处理。
5. 应用特征提取算法,获取语音信号的特征向量。
6. 分析滤波和特征提取后的结果,评估处理效果。
实验结果与讨论:- 描述语音信号在预处理、滤波和特征提取后的变化情况。
- 分析实验中遇到的问题,如噪声去除不彻底、频率成分丢失等,并提出可能的改进措施。
- 探讨实验结果对语音识别、语音合成等领域的潜在应用价值。
结论:通过本次实验,我们成功实现了语音信号的基本处理流程,包括采集、预处理、分析、滤波和特征提取。
语音信号处理实验报告
语⾳信号处理实验报告语⾳信号处理实验报告【实验⼀】⼀、实验题⽬Short time analysis⼆、实验要求Write a MA TLAB program to analyze a speech and simultaneously, on a single page, plot the following measurements:1. the entire speech waveform2. the short-time energy, En3. the short-time magnitude, Mn4. the short-time zero-crossing, Zn5. the narrowband spectrogram6. the wideband spectrogramUse both the speech waveforms in the wznjdx_normal.wav. Choose appropriate window sizes, window shifts, and window for the analysis. Explain your choice of these parameters.三、实验程序clear[x,fs]=wavread('wznjdx_normal.wav');n=length(x);N=320;subplot(4,1,1);plot(x);h=linspace(1,1,N);En=conv(h,x.*x);subplot(4,1,2);plot(En);Mn=conv(h,abs(x));subplot(4,1,3);plot(Mn);for i=1:n-1if x(i)>=0 y(i)=1;else y(i)=-1;endif x(i+1)>=0 y(i+1)=1;else y(i+1)=-1;endw(i)=abs(y(i+1)-y(i));endk=1;j=0;while (k+N-1)Zm(k)=0;for i=0:N-1Zm(k)=Zm(k)+w(k+i);endj=j+1;k=k+N/2;endfor w=1:jQ(w)=Zm(160*(w-1)+1)/(2*N);endsubplot(4,1,4);plot(Q);grid;figure(2);subplot(2,1,1);spectrogram(x,h,256,200,0.0424*fs); subplot(2,1,2);spectrogram(x,h,256,200,0.0064*fs);四、实验结果语谱图:(Matlab 7.0 ⽤不了spectrogram)【实验⼆】⼀、实验题⽬Homomorphic analysis⼆、实验要求Write a MATLAB program to compute the real cepstrums of a section of voiced speech and unvoiced speech. Plot the signal, the log magnitude spectrum, the real cepstrum, and the lowpass liftered log magnitude spectrum.三、实验程序nfft=256;[x,fs] = wavread('wznjdx_normal.wav');fx=x;Xvm=log(abs(fft(fx,nfft)));xhv=real(ifft(Xvm,nfft));lifter=zeros(1,nfft);lifter(1:30)=1;lifter(nfft-28:nfft)=1;fnlen=0.02*fs; % 20mswin=hamming(fnlen);%加窗n=fnlen;%窗宽度赋给循环⾃变量nnoverlap=0.5*fnlen;while(n<=length(x)-1)fx=x(n-fnlen+1:n).*win;n=n+noverlap;endxhvp=xhv.*lifter';figure;subplot(4,1,1)plot(lifter);title('倒谱滤波器');subplot(4,1,2)plot(x);title('语⾳信号波形');subplot(4,1,3)plot(Xvm);title('Xvm');subplot(4,1,4)plot(xhv);title('xhv');四、实验结果【实验三】⼀、实验题⽬LP analysis⼆、实验要求Write a MATLAB program to convert from a frame of speech to a set of linear prediction coefficients. Plot the LPC spectrum superimposed on the corresponding STFT.三、实验程序clear;[x,fs]=wavread('wznjdx_normal.wav');fx=x(4000:4160-1);p=10;[a,e,k]=aryule(fx,p);G=sqrt(e*length(fx));f=log(abs(fft(fx)));h0=zeros(1,160);h=log(G)-log(abs(fft(a,160)));figure(1);subplot(211);plot(fx);subplot(212);plot(f);hold on;plot((0:160-1),h,'r');四、实验结果【实验四】⼀、实验题⽬Pitch estimation⼆、实验内容Write a program to implement the pitch estimation and the voiced/unvoiced decision using the LPC-based method.三、实验程序clear[x,fs]=wavread('wznjdx_normal.wav');n=length(x);Q = x';NFFT=512;N = 256;Hamm = hamming(N);frame = 30;M = Q(((frame -1) * (N / 2) + 1):((frame - 1) * (N / 2) + N)); Frame = M .* Hamm';% lowpass filter[b2,a2]=butter(2,900/4000);speech2=filter(b2,a2,Frame); % filter% residual[a,e] = lpc(speech2,20);errorlp=filter(a,1,speech2); % residual% Short-term autocorrelation.re = xcorr(errorlp);% Find max autocorrelation for lags in the interval minlag to maxlag. minlag = 17; % F0: 450Hzmaxlag =160; % F0: 50Hz[remax,idx] = max(re(fnlen+minlag:fnlen+maxlag));figuresubplot(3,1,1);plot(Frame);subplot(3,1,2);plot(speech2);subplot(3,1,3);plot(re);text(500,0,'idx');idx=idx-1+minlagremax四、实验结果【实验五】⼀、实验题⽬Speech synthesis⼆、实验内容Write a program to analyze a speech and synthesize it using the LPC-based method.三、实验程序主程序clear;[x,sr] = wavread('wznjdx_normal.wav');p=[1 -0.9];x=filter(p,1,x);N=256;inc=128;y=lpcsyn(x,N,inc);wavplay(y,sr);⼦程序lpcsynfunction y=lpcsyn(x,N,inc)%[x,sr] = wavread('wznjdx_normal.wav');%pre = [1 -0.97];%x = filter(pre,1,x);%N=256;%inc=128;fn=floor(length(x)/inc);y=zeros(1,50000);for (i=1:fn)x(1:N,i)=x((i-1)*inc+1:(i+1)*inc);[A(i,:),G(i),P(i),fnlen,fnshift] = lpcana(x(1:N,i),order); if (P(i)) % V oiced frame.e = zeros(N,1);e(1:P(i):N) = 1; % Impulse-train excitation.else % Unvoiced frame.e = randn(N,1); % White noise excitation.endyt=filter(G(i),A(i,:),e);j=(i-1)*inc+[1:N];y(j) = y(j)+yt';end;end⼦程序lpcanafunction [A,G,P,fnlen,fnshift] = lpcana(x,order) fnlen=256;fnshift=fnlen/2;n=length(x);[b2,a2]=butter(2,900/4000);speech2=filter(b2,a2,x);[A,e]=lpc(speech2,order);errorlp=filter(A,1,speech2);re=xcorr(errorlp);G=sqrt(e*length(speech2));minlag=17;maxlag=160;[remax,idx]=max(re(n+minlag:n+maxlag));P=idx-1+minlag;end四、实验结果【实验六】⼀、实验题⽬Speech enhancement⼆、实验内容Write a program to implement the basic spectral magnitude subtraction.三、实验程序clear[speech,fs,nbits]=wavread('wznjdx_normal.wav');%读⼊数据alpha=0.04;%噪声⽔平winsize=256;%窗长size=length(speech);%语⾳长度numofwin=floor(size/winsize);%帧数hamwin=zeros(1,size);%定义汉明窗长度enhanced=zeros(1,size);%定义增强语⾳的长度ham=hamming(winsize)';%%产⽣汉明窗x=speech'+alpha*randn(1,size);%信号加噪声noisy=alpha*randn(1,winsize);%噪声估计N=fft(noisy);nmag=abs(N);%噪声功率谱%分帧for q=1:2*numofwin-1frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);%对带噪语⾳帧间重叠⼀半取值hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=...hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham;%加窗y=fft(frame.*ham);mag=abs(y);%带噪语⾳功率谱phase=angle(y);%带噪语⾳相位%幅度谱减for i=1:winsizeif mag(i)-nmag(i)>0clean(i)=mag(i)-nmag(i);else clean(i)=0;endend%频域中重新合成语⾳spectral=clean.*exp(j*phase);%反傅⾥叶变换并重叠相加enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=...enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral));endfigure(1);subplot(3,1,1);plot(speech);xlabel('样点数');ylabel('幅度');title('原始语⾳波形'); subplot(3,1,2);plot(x);xlabel('样点数');ylabel('幅度');title('语⾳加噪波形'); subplot(3,1,3);plot(enhanced);xlabel('样点数');ylabel('幅度');title('增强语⾳波形');四、实验结果。
语音信号处理 实验报告
实验一、语音信号采集与分析一、实验目的:1)了解语音信号处理基本知识:语音信号的生成的数学模型。
2)在理论学习的基础上,进一步地理解和掌握语音信号的读入、回放、波形显示。
语音信号时域和频域分析方法。
二、实验原理一定时宽的语音信号,其能量的大小随时间有明显的变化。
其中清音段(以清音为主要成份的语音段),其能量比浊音段小得多。
短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上,可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。
这在语音识别中有重要意义。
FFT在数字通信、语音信号处理、图像处理、匹配滤波以及功率谱估计、仿真、系统分析等各个领域都得到了广泛的应用。
本实验通过分析加噪的语音信号频谱,可以作为分离信号和噪声的理论基础。
三、实验内容:Matlab编程实验步骤:1.新建M文件,扩展名为“.m”,编写程序;2.选择File/Save命令,将文件保存在F盘中;3.在Command Window窗中输入文件名,运行程序;程序一、用MATLAB对原始语音信号进行时域分析,分析短时平均能量及短时平均过零数。
程序二、用MATLAB对原始语音信号进行频域分析,画出它的时域波形和频谱给原始的语音信号加上一个高频余弦噪声,频率为5kHz。
画出加噪后的语音信号时域和频谱图。
程序1.a=wavread(' D:\II.wav'); %读取语音信号的数据,赋给变量x1,这里的文件的全路径和文件名由个人设计n=length(a);N=320;subplot(3,1,1),plot(a);h=linspace(1,1,N);%形成一个矩形窗,长度为NEn=conv(h,a.*a);%求卷积得其短时能量函数Ensubplot(3,1,2),plot(En);for i=1:n-1if a(i)>=0b(i)= 1;elseb(i) = -1;endif a(i+1)>=0b(i+1)=1;elseb(i+1)=-1;endw(i)=abs(b(i+1)-b(i));end%求出每相邻两点符号的差值的绝对值k=1;j=0;while (k+N-1)<nZm(k)=0;for i=0:N-1;Zm(k)=Zm(k)+w(k+i);endj=j+1;k=k+160; %每次移动半个窗endfor w=1:jQ(w)=Zm(160*(w-1)+1)/640;%短时平均过零率endsubplot(3,1,3),plot(Q);实验结果打印粘贴到右侧:程序2:fs=22050; %语音信号采样频率为22050x1=wavread('D:\II.wav'); %读取语音信号的数据,赋给变量x1sound(x1,22050); %播放语音信号f=fs*(0:511)/1024;t=0:1/22050:(size(x1)-1)/22050; %将所加噪声信号的点数调整到与原始信号相同Au=0.03;d=[Au*cos(2*pi*5000*t)]'; %噪声为5kHz的余弦信号x2=x1+d;sound(x2,22050); %播放加噪声后的语音信号y2=fft(x2,1024); %对信号做1024点FFT变换figure(1)subplot(2,1,1);plot(x1) %做原始语音信号的时域图形title('原始语音信号');xlabel('time n');ylabel('幅值 n');subplot(2,1,2);plot(t,x2)title('加噪后的信号');xlabel('time n');ylabel('幅值 n');figure(2)subplot(2,1,1);plot(f,abs(x1(1:512)));title('原始语音信号频谱');xlabel('Hz');ylabel('幅值');subplot(2,1,2);plot(f,abs(y2(1:512)));title('加噪后的信号频谱');xlabel('Hz'); ylabel('幅值');实验结果打印粘贴到右侧:050010001500200025003000350040004500原始语音信号time n幅值 n加噪后的信号time n幅值 n020004000600080001000012000原始语音信号频谱Hz幅值加噪后的信号频谱Hz幅值四、实验分析加入噪声后音频文件可辨性下降,波形的平缓,频谱图上看,能量大部分集中在2000HZz到4000Hz之间。
语音信号处理实验报告
一、实验目的1. 理解语音信号处理的基本原理和流程。
2. 掌握语音信号的采集、预处理、特征提取和识别等关键技术。
3. 提高实际操作能力,运用所学知识解决实际问题。
二、实验原理语音信号处理是指对语音信号进行采集、预处理、特征提取、识别和合成等操作,使其能够应用于语音识别、语音合成、语音增强、语音编码等领域。
实验主要包括以下步骤:1. 语音信号的采集:使用麦克风等设备采集语音信号,并将其转换为数字信号。
2. 语音信号的预处理:对采集到的语音信号进行降噪、去噪、归一化等操作,提高信号质量。
3. 语音信号的特征提取:提取语音信号中的关键特征,如频率、幅度、倒谱等,为后续处理提供依据。
4. 语音信号的识别:根据提取的特征,使用语音识别算法对语音信号进行识别。
5. 语音信号的合成:根据识别结果,合成相应的语音信号。
三、实验步骤1. 语音信号的采集使用麦克风采集一段语音信号,并将其保存为.wav文件。
2. 语音信号的预处理使用MATLAB软件对采集到的语音信号进行预处理,包括:(1)降噪:使用谱减法、噪声抑制等算法对语音信号进行降噪。
(2)去噪:去除语音信号中的杂音、干扰等。
(3)归一化:将语音信号的幅度归一化到相同的水平。
3. 语音信号的特征提取使用MATLAB软件对预处理后的语音信号进行特征提取,包括:(1)频率分析:计算语音信号的频谱,提取频率特征。
(2)幅度分析:计算语音信号的幅度,提取幅度特征。
(3)倒谱分析:计算语音信号的倒谱,提取倒谱特征。
4. 语音信号的识别使用MATLAB软件中的语音识别工具箱,对提取的特征进行识别,识别结果如下:(1)将语音信号分为浊音和清音。
(2)识别语音信号的音素和音节。
5. 语音信号的合成根据识别结果,使用MATLAB软件中的语音合成工具箱,合成相应的语音信号。
四、实验结果与分析1. 语音信号的采集采集到的语音信号如图1所示。
图1 语音信号的波形图2. 语音信号的预处理预处理后的语音信号如图2所示。
语音信号处理实验指导书
语音信号处理实验指导书实验一:语音信号的采集与播放实验目的:了解语音信号的采集与播放过程,掌握采集设备的使用方法。
实验器材:1. 电脑2. 麦克风3. 扬声器或者耳机实验步骤:1. 将麦克风插入电脑的麦克风插孔。
2. 打开电脑的录音软件(如Windows自带的录音机)。
3. 在录音软件中选择麦克风作为录音设备。
4. 点击录音按钮开始录音,讲话或者唱歌几秒钟。
5. 点击住手按钮住手录音。
6. 播放刚刚录制的语音,检查录音效果。
7. 将扬声器或者耳机插入电脑的音频输出插孔。
8. 打开电脑的音频播放软件(如Windows自带的媒体播放器)。
9. 选择要播放的语音文件,点击播放按钮。
10. 检查语音播放效果。
实验二:语音信号的分帧与加窗实验目的:了解语音信号的分帧和加窗过程,掌握分帧和加窗算法的实现方法。
实验器材:1. 电脑2. 麦克风3. 扬声器或者耳机实验步骤:1. 使用实验一中的步骤1-5录制一段语音。
2. 将录制的语音信号进行分帧处理。
选择合适的帧长和帧移参数。
3. 对每一帧的语音信号应用汉明窗。
4. 将处理后的语音帧进行播放,检查分帧和加窗效果。
实验三:语音信号的频谱分析实验目的:了解语音信号的频谱分析过程,掌握频谱分析算法的实现方法。
实验器材:1. 电脑2. 麦克风3. 扬声器或者耳机实验步骤:1. 使用实验一中的步骤1-5录制一段语音。
2. 将录制的语音信号进行分帧处理。
选择合适的帧长和帧移参数。
3. 对每一帧的语音信号应用汉明窗。
4. 对每一帧的语音信号进行快速傅里叶变换(FFT)得到频谱。
5. 将频谱绘制成图象,观察频谱的特征。
6. 对频谱进行谱减法处理,去除噪声。
7. 将处理后的语音帧进行播放,检查频谱分析效果。
实验四:语音信号的降噪处理实验目的:了解语音信号的降噪处理过程,掌握降噪算法的实现方法。
实验器材:1. 电脑2. 麦克风3. 扬声器或者耳机实验步骤:1. 使用实验一中的步骤1-5录制一段带噪声的语音。
语音信号处理实验报告
实验报告一、 实验目的、要求(1)掌握语音信号采集的方法(2)掌握一种语音信号基音周期提取方法(3)掌握短时过零率计算方法(4)了解Matlab 的编程方法二、 实验原理基本概念:(a )短时过零率:短时内, 信号跨越横轴的情况, 对于连续信号, 观察语音时域波形通过横轴的情况;对于离散信号, 相邻的采样值具有不同的代数符号, 也就是样点改变符号的次数。
对于语音信号, 是宽带非平稳信号, 应考察其短时平均过零率。
其中sgn[.]为符号函数⎪⎩⎪⎨⎧<=>=0 x(n)-1sgn(x(n))0 x(n)1sgn(x(n))短时平均过零的作用1.区分清/浊音:浊音平均过零率低, 集中在低频端;清音平均过零率高, 集中在高频端。
2.从背景噪声中找出是否有语音, 以及语音的起点。
(b )基音周期基音是发浊音时声带震动所引起的周期性, 而基音周期是指声带震动频率的倒数。
基音周期是语音信号的重要的参数之一, 它描述语音激励源的一个重要特征, 基音周期信息在多个领域有着广泛的应用, 如语音识别、说话人识别、语音分析与综合以及低码率语音编码, 发音系统疾病诊断、听觉残障者的语音指导等。
因为汉语是一种有调语言, 基音的变化模式称为声调, 它携带着非常重要的具有辨意作用的信息, 有区别意义的功能, 所以, 基音的提取和估计对汉语更是一个十分重要的问题。
由于人的声道的易变性及其声道持征的因人而异, 而基音周期的范围又很宽, 而同—个人在不同情态下发音的基音周期也不同, 加之基音周期还受到单词∑--=-=10)]1(sgn[)](sgn[21N m n n n m x m x Z发音音调的影响, 因而基音周期的精确检测实际上是一件比较困难的事情。
基音提取的主要困难反映在: ①声门激励信号并不是一个完全周期的序列, 在语音的头、尾部并不具有声带振动那样的周期性, 有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。
语音信号处理实验报告
语音信号处理实验报告实验一:语音信号的端点检测学院:电子与信息学院专业:11级信息工程姓名:学号:提交日期:实验一:语音信号的端点检测1、实验内容语音信号端点检测技术其目的就是从包含语音的一段信号中准确地确定语音的起始点和终止点,区分语音和非语音信号,它是语音处理技术中的一个重要方面。
本实验的目的就是要掌握基于MATLAB编程实现带噪语音信号端点检测,利用MATLAB对信号进行分析和处理,学会利用短时过零率和短时能量,对语音信号的端点进行检测。
2、实验方法本实验中,端点检测的方法有两种:短时能量和短时过零率。
语音和噪声的区别可以体现在它们的能量上,语音段的能量比噪声段能量大,语音段的能量是噪声段能量叠加语音声波能量的和。
在信噪比很高时,那么只要计算输入信号的短时能量或短时平均幅度就能够把语音段和噪声背景区分开。
这是仅基于短时能量的端点检测方法。
信号{x(n)}的短时能量定义为:短时过零表示一帧语音信号波形穿过横轴(零电平)的次数。
过零分析是语音时域分析中最简单的一种。
对于连续语音信号,过零意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值的改变符号称为过零。
过零率就是样本改变符号次数。
信号{x(n)}的短时平均过零率定义为:2.2、检测方法利用过零率检测清音,用短时能量检测浊音,两者配合。
首先为短时能量和过零率分别确定两个门限,一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。
低门限被超过未必是语音的开始,有可能是很短的噪声引起的,高门限被超过并且接下来的自定义时间段内的语音超过低门限,意味着信号开始。
此时整个端点检测可分为四段:静音段、过渡段、语音段、结束。
实验时使用一个变量表示当前状态。
静音段,如果能量或过零率超过低门限,就开始标记起始点,进入过渡段。
过渡段当两个参数值都回落到低门限以下,就将当前状态恢复到静音状态。
而如果过渡段中两个参数中的任一个超过高门限,即被认为进入语音段。
语音信处理实验报告
语音信号处理实验报告——语音信号分析实验一.实验目的及原理语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理,并且语音合成的音质好坏和语音识别率的高低,都取决于对语音信号分析的准确性和精确性.贯穿语音分析全过程的是“短时分析技术”.因为从整体来看,语音信号的特性及表征其本质特征的参数均是随时间变化的,所以它是一个非平稳态过程,但是在一个短时间范围内一般认为在0~30ms的时间内,其特性基本保持不变,即相对稳定,可将其看做一个准稳态过程,即语音信号具有短时平稳性.所以要将语音信号分帧来分析其特征参数,帧长一般取为0ms~30ms.二.实验过程2.仿真结果(1) 时域分析男声及女声蓝色为时域信号,红色为每一帧的能量,绿色为每一帧的过零率 某一帧的自相关函数3. 频域分析一帧信号的倒谱分析和FFT 及LPC 分析050100150200250300-1-0.500.510510152025303540-50050100150050100150200250300-1-0.500.5100.51 1.52 2.53 3.5-40-2002040②男声和女声的倒谱分析③浊音和清音的倒谱分析④浊音和清音的FFT 分析和LPC 分析红色为FFT 图像,绿色为LPC 图像三. 实验结果分析 1. 时域分析实验中采用的是汉明窗,窗的长度对能否由短时能量反应语音信号的变对应的倒谱系数:,,……对应的LPC 预测系数:,,,,,……原语音一帧语音波形一帧语音的倒化起着决定性影响.这里窗长合适,En能够反应语音信号幅度变化.同时,从图像可以看出,En可以作为区分浊音和清音的特征参数.短时过零率表示一帧语音中语音信号波形穿过横轴零电平的次数.从图中可以看出,短时能量和过零率可以近似为互补的情况,短时能量大的地方过零率小,短时能量小的地方过零率较大.从浊音和清音的时域分析可以看出,清音过零率高,浊音过零率低.从男声女声的时域信号对比图中可以看出,女音信号在高频率分布得更多,女声信号在高频段的能量分布更多,并且女声有较高的过零率,这是因为语音信号中的高频段有较高的过零率.2.频域分析这里对信号进行快速傅里叶变换FFT,可以发现,当窗口函数不同,傅里叶变换的结果也不相同.根据信号的时宽带宽之积为一常数这一性质,可以知道窗口宽度与主瓣宽度成反比,N越大,主瓣越窄.汉明窗在频谱范围中的分辨率较高,而且旁瓣的衰减大,具有频谱泄露少的有点,所以在实验中采用的是具有较小上下冲的汉明窗.为了使频域信号的频率分辨率较高,所取的DFT及相应的FFT点数应该足够多,但时域信号的长度受到采样率和和短时性的限制,这里可以采用补零的办法,对补零后的序列进行FFT变换.从实验仿真图可以看出浊音的频率分布比清音高.3.倒谱分析通过实验可以发现,倒谱的基音检测与语音加窗的选择也是有关系的.如果窗函数选择矩形窗,在许多情况下倒谱中的基音峰将变得不清晰,窗函数选择汉明窗较为合理,可以发现,加汉明窗的倒谱基音峰较为突出.在典型的浊音清音倒谱对比中,理论上浊音倒谱基音峰应比较突出,而清音不出现这种尖峰,只是在倒谱的低时域部分包含声道冲激响应的信息.实验仿真的图形不是很理想.4.线性预测分析从实验中可以发现,LPC谱估计具有一个特点,在信号能量较大的区域即接近谱的峰值处,LPC谱和信号谱很接近;而在信号能量较低的区域即接近谱的谷底处,则相差比较大.在浊音清音对比中,可以发现,对呈现谐波特征的浊音语音谱来说这个特点很明显,就是在谐波成分处LPC谱匹配信号谱的效果要远比谐波之间好得多.在实验中,当P值增加到一定程度,预测平方误差的改善就不很明显了,而且会增加计算量,一般取为8~4,这里P取为0.5.基音周期估计自互相关函数法②短时平均幅度差法③倒谱分析法共偏移92+32=24个偏移点6000/24=可以发现,上面三种方法计算得到的基音周期基本相同.。
语音信号处理实验报告
语音信号处理实验报告 The Standardization Office was revised on the afternoon of December 13, 2020语音信号处理实验报告——语音信号分析实验一.实验目的及原理语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理,并且语音合成的音质好坏和语音识别率的高低,都取决于对语音信号分析的准确性和精确性。
贯穿语音分析全过程的是“短时分析技术”。
因为从整体来看,语音信号的特性及表征其本质特征的参数均是随时间变化的,所以它是一个非平稳态过程,但是在一个短时间范围内(一般认为在10~30ms的时间内),其特性基本保持不变,即相对稳定,可将其看做一个准稳态过程,即语音信号具有短时平稳性。
所以要将语音信号分帧来分析其特征参数,帧长一般取为10ms~30ms。
二.实验过程男声及女声(蓝色为时域信号,红色为每一帧的能量,绿色为每一帧的过零率)某一帧的自相关函数3.频域分析①一帧信号的倒谱分析和FFT及LPC分析②男声和女声的倒谱分析对应的倒谱系数:,,……对应的LPC预测系数:1,,,,,……原语音波形一帧语音波形一帧语音的倒谱③浊音和清音的倒谱分析④浊音和清音的FFT分析和LPC分析(红色为FFT图像,绿色为LPC图像)三.实验结果分析1.时域分析实验中采用的是汉明窗,窗的长度对能否由短时能量反应语音信号的变化起着决定性影响。
这里窗长合适,En能够反应语音信号幅度变化。
同时,从图像可以看出,En可以作为区分浊音和清音的特征参数。
短时过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。
从图中可以看出,短时能量和过零率可以近似为互补的情况,短时能量大的地方过零率小,短时能量小的地方过零率较大。
从浊音和清音的时域分析可以看出,清音过零率高,浊音过零率低。
从男声女声的时域信号对比图中可以看出,女音信号在高频率分布得更多,女声信号在高频段的能量分布更多,并且女声有较高的过零率,这是因为语音信号中的高频段有较高的过零率。
语音信号实验报告
一、实验目的1. 理解语音信号的基本特性和处理方法。
2. 掌握语音信号的采样、量化、编码等基本过程。
3. 学习使用相关软件对语音信号进行时域和频域分析。
4. 了解语音信号的降噪、增强和合成技术。
二、实验原理语音信号是一种非平稳的、时变的信号,其频谱特性随时间变化。
语音信号处理的基本过程包括:信号采集、信号处理、信号分析和信号输出。
三、实验仪器与软件1. 仪器:计算机、麦克风、耳机。
2. 软件:Matlab、Audacity、Python。
四、实验步骤1. 信号采集使用麦克风采集一段语音信号,并将其存储为.wav格式。
2. 信号处理(1)使用Matlab读取.wav文件,提取语音信号的采样频率、采样长度和采样数据。
(2)将语音信号进行时域分析,包括绘制时域波形图、计算信号的能量和过零率等。
(3)将语音信号进行频域分析,包括绘制频谱图、计算信号的功率谱密度等。
3. 信号分析(1)观察时域波形图,分析语音信号的幅度、频率和相位特性。
(2)观察频谱图,分析语音信号的频谱分布和能量分布。
(3)计算语音信号的能量和过零率,分析语音信号的语音强度和语音质量。
4. 信号输出(1)使用Audacity软件对语音信号进行降噪处理,比较降噪前后的效果。
(2)使用Python软件对语音信号进行增强处理,比较增强前后的效果。
(3)使用Matlab软件对语音信号进行合成处理,比较合成前后的效果。
五、实验结果与分析1. 时域分析从时域波形图可以看出,语音信号的幅度、频率和相位特性随时间变化。
语音信号的幅度较大,频率范围一般在300Hz~3400Hz之间,相位变化较为复杂。
2. 频域分析从频谱图可以看出,语音信号的能量主要集中在300Hz~3400Hz范围内,频率成分较为丰富。
3. 信号处理(1)降噪处理:通过对比降噪前后的时域波形图和频谱图,可以看出降噪处理可以显著降低语音信号的噪声,提高语音质量。
(2)增强处理:通过对比增强前后的时域波形图和频谱图,可以看出增强处理可以显著提高语音信号的幅度和频率,改善语音清晰度。
语音信号处理实验报告
语音信号处理实验报告语音信号处理实验报告一、引言语音信号处理是一门研究如何对语音信号进行分析、合成和改善的学科。
在现代通信领域中,语音信号处理起着重要的作用。
本实验旨在探究语音信号处理的基本原理和方法,并通过实验验证其有效性。
二、实验目的1. 了解语音信号处理的基本概念和原理。
2. 学习使用MATLAB软件进行语音信号处理实验。
3. 掌握语音信号的分析、合成和改善方法。
三、实验设备和方法1. 设备:计算机、MATLAB软件。
2. 方法:通过MATLAB软件进行语音信号处理实验。
四、实验过程1. 语音信号的采集在实验开始前,我们首先需要采集一段语音信号作为实验的输入。
通过麦克风将语音信号输入计算机,并保存为.wav格式的文件。
2. 语音信号的预处理在进行语音信号处理之前,我们需要对采集到的语音信号进行预处理。
预处理包括去除噪声、归一化、去除静音等步骤,以提高后续处理的效果。
3. 语音信号的分析语音信号的分析是指对语音信号进行频谱分析、共振峰提取等操作。
通过分析语音信号的频谱特征,可以了解语音信号的频率分布情况,进而对语音信号进行进一步处理。
4. 语音信号的合成语音信号的合成是指根据分析得到的语音信号特征,通过合成算法生成新的语音信号。
合成算法可以基于传统的线性预测编码算法,也可以采用更先进的基于深度学习的合成方法。
5. 语音信号的改善语音信号的改善是指对语音信号进行降噪、增强等处理,以提高语音信号的质量和清晰度。
常用的语音信号改善方法包括时域滤波、频域滤波等。
六、实验结果与分析通过实验,我们得到了经过语音信号处理后的结果。
对于语音信号的分析,我们可以通过频谱图观察到不同频率成分的分布情况,从而了解语音信号的特点。
对于语音信号的合成,我们可以听到合成后的语音信号,并与原始语音信号进行对比。
对于语音信号的改善,我们可以通过降噪效果的评估来判断处理的效果。
七、实验总结通过本次实验,我们深入了解了语音信号处理的基本原理和方法,并通过实验验证了其有效性。
语音信号处理实验
3 实验过程
1)读语音数 wavread 2)听语音 sound 3)写语音 wavwrite 4)对语音信号进行分帧处理 5)对语音信号进行预加重
分帧处理流程
1 读语音数据。 2 求语音长度。 3 确定帧长和帧移。 4 确定可以分多少帧 5 for 循环实现各帧信号的取出。先确定各帧信号的起点和终点坐标,然后利 用矩阵操作函数将各帧信号取出。
[x,fs,bits]=wavread(' c:\windows\media\dig.wav '); x=x(:,1); x=x'; len=length(x); N=256; M=128; Fn=fix((len-N)/M+1); y=[]; for i=1:Fn
实验一 语音信号的预处理
1 实验目的
通过 Matlab 编程掌握语音信号的预处理方法,包括对信号进行分帧、预加 重,加窗处理。
2 实验原理
由于语音信号从整体上来看是一个非平稳过程,但是在一个短的时间内,其 特性保持相对不变,所以语音信号具有短时平稳性,对语音信号的分析和处理必 须建立在“短时”的基础上,将信号分为一段一段来分析其特征参数。
down=1+(i-1)*M; up=down+N-1; temp=x(down:up); y=[y;temp]; end % K=100; M=[]; for i=1:Fn temp=sum(abs(y(i,:)),2)
1
M=[M,temp]; end plot(M)
%短时过零率 [x,fs,bits]=wavread('c:\WINDOWS\Media\chimes.wav'); x=x(:,1); x=x'; len=length(x); N=256; M=128; Fn=fix((len-N)/M+1); y=[]; for i=1:Fn
语音信号处理基础实验
语音信号处理基础实验(一)实验目的:掌握MATLAB采集语音信号、创建语音文件、读写等的原理及常用命令。
掌握语音信号线性叠加的方法,熟悉语音信号卷积原理,熟悉语音信号升采样/降采样方法。
实验原理:指导书摘选。
仪器与材料:微机,Matlab软件,U盘,记录用的笔和纸。
实验步骤:1打开MATLAB软件,File→New→script2读取录制好的语音文件,并使用plot函数显示出来。
要求:横轴和纵轴带有标注。
横轴的单位为秒(S), 纵轴显示归一化后的数值。
3读取一段语音并归一化。
然后生成一段随机信号(长度与语音信号相同),归一化后幅度乘以0.01。
最后线性叠加两端语音,用plot函数显示三种信号。
要求:横轴和纵轴带有标注。
横轴单位为秒(s),纵轴显示的为归一化后的数值。
4将读取的语音信号与随机信号进行卷积,并用plot函数显示该信号,并对比线性叠加信号的区别。
然后使用wavplay函数播放两种信号,并比较区别。
5改变读取的语音信号的采样频率,使用plot函数进行显示。
然后采用wavplay函数播放,比较采样频率对改变语音信号的影响。
注:实验报告字写小一点,手写程序在实验报告上,打印实验波形图粘贴在实验报告上,程序和波形图要一一对应。
实验程序:1.读取语音信号fs=1600;[x,fs]=audioread('C2_1_y.wav');sound(x,fs);N=length(x);time=(0:N-1)/fs;plot(time,x);axis([0 2 -1 1]);xlabel('time/s');ylabel('amplitude');结果:2.语音信号叠加clcclear all[x,fs]=audioread('C2_2_y.wav'); s=1:length(x);t=s/fs;xmax=max(abs(x));x=x/xmax;y=randn(size(x));ymax=max(abs(y));y=y/ymax;z=x+y;zmax=max(abs(z));z=z/zmax;figure(1)subplot(311)plot(t,x);xlabel('时间/s');ylabel('归一化幅值')title('(a)原始信号')subplot(312)plot(t,y);xlabel('时间/s');ylabel('归一化幅值')title('(b)随机序列')subplot(313)plot(t,z);xlabel('时间/s');ylabel('归一化幅值')title('(c)线性叠加')3.语音信号卷积clcclear all[x,fs]=audioread('C2_2_y.wav'); %读取s=1:length(x);t=s/fs;xmax=max(abs(x));x=x/xmax; %归一化y=randn(size(x)); %产生同x相同长度的随机序列ymax=max(abs(y));y=y/ymax; %随机序列归一化z=conv(x,y); %卷积计算zmax=max(abs(z));z=z/zmax;t2=(1:length(z))/fs;figure(1)subplot(311)plot(t,x);xlabel('时间/s');ylabel('归一化幅值');title('(a)原始信号');subplot(312)plot(t,y);xlabel('时间/s');ylabel('归一化幅值');title('(b)随机序列');subplot(313)plot(t2,z);xlabel('时间/s');ylabel('归一化幅值');title('(c)信号卷积');4.语音信号采样频率变换clcclear all[x,fs1]=audioread('C2_2_y.wav'); s1=1:length(x);t1=s1/fs1;xmax=max(abs(x));x=x/xmax;figure(1)subplot(311)plot(t1,x);xlabel('时间/s');ylabel('归一化幅值');title('(a)原始信号');p=2;q=1;x1=resample(x,p,q);x1max=max(abs(x1));x1=x1/x1max;fa=fs1*p/q;ta=(1:length(x1))/fa;subplot(312)plot(ta,x1);xlabel('时间/s'); ylabel('归一化幅值'); title('(b)2倍采样率'); p=1;q=2;x2=resample(x,p,q);x2max=max(abs(x2)); x2=x2/x2max;fb=fs1*p/q;tb=(1:length(x2))/fb; subplot(313)plot(tb,x2);xlabel('时间/s'); ylabel('归一化幅值'); title('(c)1/2倍采样率');运行结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
哈尔滨工程大学实验报告班级:电信三班学号:***********名:***语音信号处理实验一、实验目的1、掌握短时能量的求解方法、短时平均过零率的求解方法,对输入的语音信号进行端点检测。
2、掌握语音信号的Mel 倒谱特征(MFCC )的求解方法,语音信号的线性预测原理以及LPC 特征的求解方法。
3、掌握语音信号基频的概念,加深对基频刻画声调特征作用的理解,掌握语音信号基频特征的典型求解方法。
4、掌握MATLAB 相应的功能以及使用方法。
二、仪器设备HP 计算机、MATLAB 软件 三、实验原理(一)语音信号的短时分析端点检测是语音信号处理过程中非常重要的一步,它的准确性直接影响到语音信号处理的速度和结果。
本次实验利用短时过零率和短时能量相结合的语音端点检测算法利用短时过零率来检测清音,用短时能量来检测浊音,两者相配合便实现了信号信噪比较大情况下的端点检测。
先引入以下三个概念 1、短时能量计算定义n 时刻某语言信号的短时平均能量En 为:∑∑--=+∞∞--=-=nN n m m n w m x m n w m x En )1(22)]()([)]()([式中N 为窗长,可见短时平均能量为一帧样点值的平方和。
特殊地,当窗函数为矩形窗时,有∑--==nN n m m x En )1(2)(2、短时过零率过零就是指信号通过零值。
过零率就是每秒内信号值通过零值的次数。
对于离散时间序列,过零则是指序列取样值改变符号,过零率则是每个样本的改变符号的次数。
对于语音信号,则是指在一帧语音中语音信号波形穿过横轴(零电平)的次数。
可以用相邻两个取样改变符号的次数来计算。
如果窗的起点是n=0,短时过零率Z 为 波形穿过横轴(零电平)的次数|))1(())((|2110∑-=--=N n w w n S Sgn n S Sgn Z{00,1,1)sgn(≥<-=x x x短时过零可以看作信号频率的简单度量浊音的短时平均幅度最大,无声的短时平均幅度最小,清音的短时过零率最大,无声居中,浊音的短时过零率最小。
3、短时自相关函数∑--=+=1)()()(k N n www k n s n s k R①是偶函数;②s(n)是周期的,那么R (k )也是周期的; ③可用于基音周期估计和线性预测分析4、判断语音信号的起点和终点利用过零率检测清音,用短时能量检测浊音,两者配合。
首先为短时能量和过零率分别确定两个门限,一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。
低门限被超过未必是语音的开始,有可能是很短的噪声引起的,高门限被超过并且接下来的自定义时间段内的语音超过低门限,意味着信号开始。
此时整个端点检测可分为四段:静音段、过渡段、语音段、结束。
实验时使用一个变量表示当前状态。
静音段,如果能量或过零率超过低门限,就开始标记起始点,进入过渡段。
过渡段当两个参数值都回落到低门限以下,就将当前状态恢复到静音状态。
而如果过渡段中两个参数中的任一个超过高门限,即被认为进入语音段。
处于语音段时,如果两参数降低到门限以下,而且总的计时长度小于最短时间门限,则认为是一段噪音,继续扫描以后的语音数据,否则标一记结束端点。
(二)语音信号的特征提取由于频率响应)(jwe H 反映声道的频率响应和被分析信号的谱包络,因此用|)(|log jw e H 做反傅里叶变换求出的LPC 倒谱系数。
通过线性预测分析得到的合成滤波器的系统函数为)1/(1)(1∑=--=pi ii z a z H ,其冲激响应为h(n)。
h(n)的倒谱为)(^n h ,∑+∞=-=1^^)()(n nzn h z H 就是说)(^z H 的逆变换)(^n h 是存在的。
设0)0(^=h ,将式∑+∞=-=1^^)()(n nz n h z H 两边同时对1-z 求导,得∑∑+∞=--=--∂∂=-∂∂1^1111)(]11log[n npi i z n h z za z 得到∑∑∑∞+==-=+-+--=11111^1)(n p i ii pi i in z a zia z n h n ,于是有∑∑∑+∞=+∞=+-+-=-=-1111^11)()1(n n i i n pi i z ia zn h n z a 令其左右两边z 的各次幂前系数分别相等,得到)(^n h 和i a 间的递推关系⎪⎪⎪⎩⎪⎪⎪⎨⎧>--=≤≤--+==∑∑=-=p i i n i i n p n n h a n i n h pn k n h a n i a n h a h 1^^11^^1^),1()1()(1),()1()()1( ,按其可直接从预测系数{i a }求得倒谱)(^n h 。
这个倒谱是根据线性预测模型得到的,又称为LPC 倒谱。
LPC 倒谱由于利用线性预测中声道系统函数H (z )的最小相位特性,因此避免了一般同态处理中求复对数的麻烦。
(三)语音信号的基频提取浊音信号的自相关函数在基因周期的整数倍位置上出现峰值,而清音的自相关函数没有明显的峰值出现。
因此检测自相关函数是否有峰值就可以判断是清音还是浊音,而峰-峰值之间对应的就是基音周期。
影响从自相关函数中正确提取基音周期的最主要原因是声道响应。
当基音的周期性和共振峰的周期性混在一起时,被检测出来的峰值可能会偏离原来峰值的真实位置。
另外,在某些浊音中,第一共振频率可能会等于或低于基音频率。
此时,如果其幅度很高,它就可能在自相关函数中产生一个峰值,而该峰值又可以同基音频率的峰值相比拟。
1、自相关函数对于离散的语音信号x(n),它的自相关函数定义为:R(k)=Σx(n)x(n-k),如果信号x(n))具有周期性,那么它的自相关函数也具有周期性,而且周期与信号x(n) 的周期性相同。
自相关函数提供了一种获取周期信号周期的方法。
在周期信号周期的整数倍上,它的自相关函数可以达到最大值,因此可以不考虑起始时间,而从自相关函数的第一个最大值的位置估计出信号的基音周期,这使自相关函数成为信号基音周期估计的一种工具。
2、短时自相关函数语音信号是非平稳的信号,所以对信号的处理都使用短时自相关函数。
短时自相关函数是在信号的第N个样本点附近用短时窗截取一段信号,做自相关计算所得的结果Rm(k)=Σx(n)x(n-k)式中,n表示窗函数是从第n点开始加入。
3、算法通过对自相关基音检测原理的分析,考虑到检测准确度和检测速率2方面的因素,提出了算法实现方案,并对算法进行了MATLAB编程实现。
四、实验内容利用MA TLAB画出信号分析界面,实现语音信号文件的提取,分析并画图,再进行LPC 和MFCC分析,并画图,经过相应的计算和分析,最终能够识别男或女的声音。
画出的界面如下图所示:程序文本:function varargout = voice(varargin)% VOICE MATLAB code for voice.fig% VOICE, by itself, creates a new VOICE or raises the existing% singleton*.%% H = VOICE returns the handle to a new VOICE or the handle to% the existing singleton*.%% VOICE('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in VOICE.M with the given input arguments. %% VOICE('Property','Value',...) creates a new VOICE or raises the % existing singleton*. Starting from the left, property value pairs are% applied to the GUI before voice_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to voice_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help voice% Last Modified by GUIDE v2.5 22-Apr-2017 19:01:57% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @voice_OpeningFcn, ...'gui_OutputFcn', @voice_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before voice is made visible.function voice_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to voice (see VARARGIN)% Choose default command line output for voicehandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes voice wait for user response (see UIRESUME)% uiwait(handles.figure1);set(handles.read_path,'String','myspeech.wav');addpath('F:\voicebox');% --- Outputs from this function are returned to the command line. function varargout = voice_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in LPC.function LPC_Callback(hObject, eventdata, handles)% hObject handle to LPC (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 LPC% --- Executes on button press in MFCC.function MFCC_Callback(hObject, eventdata, handles)% hObject handle to MFCC (see GCBO)% handles structure with handles and user data (see GUIDATA)% Hint: get(hObject,'Value') returns toggle state of MFCC% --- 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)function read_path_Callback(hObject, eventdata, handles)% hObject handle to read_path (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of read_path as text% str2double(get(hObject,'String')) returns contents of read_path as a double% --- Executes during object creation, after setting all properties. function read_path_CreateFcn(hObject, eventdata, handles)% hObject handle to read_path (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- 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)channel=1;temp=wavread(get(handles.read_path,'string'));y=temp(:,channel);plot(y);% --- Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)% hObject handle to pushbutton4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) channel=1;temp=wavread(get(handles.read_path,'string'));y=temp(:,channel);f=enframe(y,200,200);y=f(150,:);plot(handles.top, y);% --- Executes on button press in LPCplot1.function LPCplot1_Callback(hObject, eventdata, handles)% hObject handle to LPCplot1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)if get(handles.LPC,'Value')==1channel=1;temp=wavread(get(handles.read_path,'string'));speech=temp(:,channel);f_temp=enframe(speech,200,200);d_temp=f_temp(25,:);plot(handles.top,d_temp);p=12;ar=lpcauto(d_temp,p);Y=lpcar2ff(ar,255);est_x=filter([0-ar(2:end)],1,d_temp);plot(handles.kk,est_x);end% --- Executes on button press in zuocha.function zuocha_Callback(hObject, eventdata, handles)% hObject handle to zuocha (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)if get(handles.LPC,'Value')==1channel=1;temp=wavread(get(handles.read_path,'string'));speech=temp(:,channel);f_temp=enframe(speech,200,200);d_temp=f_temp(25,:);p=12;ar=lpcauto(d_temp,p);Y=lpcar2ff(ar,255);est_x=filter([0-ar(2:end)],1,d_temp)-d_temp;plot(handles.qq,est_x);end% --- Executes on button press in MFCCplot.function MFCCplot_Callback(hObject, eventdata, handles)% hObject handle to MFCCplot (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)if get(handles.MFCC,'Value')==1channel=1;temp= wavread(get(handles.read_path,'string'));y=temp(:,channel);fs=8000;c=melcepst(y,fs);n = str2double(get(handles.mfcc_num, 'string'));c = c(:,n);plot(handles.kk,c);end% --- Executes on button press in read.function read_Callback(hObject, eventdata, handles)% hObject handle to read (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) signal = wavread(get(handles.read_path,'string'));plot(handles.top, signal);function mfcc_num_Callback(hObject, eventdata, handles)% hObject handle to mfcc_num (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of mfcc_num as text% str2double(get(hObject,'String')) returns contents of mfcc_num as a double% --- Executes during object creation, after setting all properties. function mfcc_num_CreateFcn(hObject, eventdata, handles)% hObject handle to mfcc_num (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction kmeans_num_Callback(hObject, eventdata, handles)% hObject handle to kmeans_num (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of kmeans_num as text % str2double(get(hObject,'String')) returns contents ofkmeans_num as a double% --- Executes during object creation, after setting all properties. function kmeans_num_CreateFcn(hObject, eventdata, handles)% hObject handle to kmeans_num (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on button press in keans.function keans_Callback(hObject, eventdata, handles)% hObject handle to keans (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)channel = 1; %声道选择temp = wavread(get(handles.read_path,'String')); %读入语音信号speech = temp(:,channel); %量化语音信号fs = 8000; %选择采样频率c = melcepst(speech, fs); %梅尔系数的采集,,默认12位n = str2double(get(handles.kmeans_num,'String'));[idx ,C] = kmeans(c,n);stem(handles.qq, idx);function result_Callback(hObject, eventdata, handles)% hObject handle to result (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of result as text% str2double(get(hObject,'String')) returns contents of result as a double% --- Executes during object creation, after setting all properties. function result_CreateFcn(hObject, eventdata, handles)% hObject handle to result (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end% --- Executes on button press in male.function male_Callback(hObject, eventdata, handles)% hObject handle to male (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 male% --- Executes on button press in female.function female_Callback(hObject, eventdata, handles)% hObject handle to female (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 female% --- Executes on button press in GMM.function GMM_Callback(hObject, eventdata, handles)% hObject handle to GMM (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)[xx,fs] = wavread(get(handles.read_path,'String')); %读入语音信号x=xx/max(abs(xx)); % 幅度归一化N=length(xx); % 取信号长度time=(0:N-1)/fs; % 计算时间刻度wlen=200; inc=100;y=enframe(x,wlen,inc)'; % 分帧etemp=sum(y.^2); % 求取短时平均能量etemp=etemp/max(etemp); % 能量幅值归一化fn=size(y,2); % 帧数T1=0.002; % 设置阈值T2=0.01;[voiceseg,vsl,SF,NF]=vad_param1D(etemp,T1,T2);% 用一个参数端点检测signal = x((voiceseg(1).begin*inc):(voiceseg(1).end*inc));%提取语音信号c = melcepst(signal, fs); %梅尔系数[idx ,C] = kmeans(c,1); %聚类及聚类中心load('D:\test\GMM1.mat')load('D:\test\GMM2.mat')[flp(1), rp0, kh0, kp0] = gaussmixp(C, fm0,fv0,fw0);[flp(2), rp0, kh0, kp0] = gaussmixp(C, fm1,fv1,fw1);[flp(3), rp0, kh0, kp0] = gaussmixp(C, fm2,fv2,fw2);[flp(4), rp0, kh0, kp0] = gaussmixp(C, fm3,fv3,fw3); [flp(5), rp0, kh0, kp0] = gaussmixp(C, fm4,fv4,fw4); [flp(6), rp0, kh0, kp0] = gaussmixp(C, fm5,fv5,fw5); [flp(7), rp0, kh0, kp0] = gaussmixp(C, fm6,fv6,fw6); [flp(8), rp0, kh0, kp0] = gaussmixp(C, fm7,fv7,fw7); [flp(9), rp0, kh0, kp0] = gaussmixp(C, fm8,fv8,fw8); [flp(10), rp0, kh0, kp0] = gaussmixp(C, fm9,fv9,fw9); [lp(1), rp0, kh0, kp0] = gaussmixp(C, m0,v0,w0);[lp(2), rp0, kh0, kp0] = gaussmixp(C, m1,v1,w1);[lp(3), rp0, kh0, kp0] = gaussmixp(C, m2,v2,w2);[lp(4), rp0, kh0, kp0] = gaussmixp(C, m3,v3,w3);[lp(5), rp0, kh0, kp0] = gaussmixp(C, m4,v4,w4);[lp(6), rp0, kh0, kp0] = gaussmixp(C, m5,v5,w5);[lp(7), rp0, kh0, kp0] = gaussmixp(C, m6,v6,w6);[lp(8), rp0, kh0, kp0] = gaussmixp(C, m7,v7,w7);[lp(9), rp0, kh0, kp0] = gaussmixp(C, m8,v8,w8);[lp(10), rp0, kh0, kp0] = gaussmixp(C, m9,v9,w9);[x1,y1] = max(flp);[x2,y2] = max(lp);if x1>x2y = y1 - 1set(handles.male,'value',0);set(handles.female,'value',1);elsey = y2 - 1set(handles.male,'value',1);set(handles.female,'value',0);endset(handles.result,'String',y);五、实验结果1、LPC分析2、MFCC分析3、聚类4、判断六、实验总结与体会通过这次实验,对MATLAB的相应功能和使用方法有了更深的理解和体会,同时加深了课堂上所讲的MFCC和LPC的知识的理解。