基于 MATLAB 分析语音信号频域特征

合集下载

实验二基于MATLAB分析语音信号频域特征

实验二基于MATLAB分析语音信号频域特征

实验二 基于MATLAB 分析语音信号频域特征一、实验目的信号的傅立叶表示在信号的分析与处理中起着重要的作用。

因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。

另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项物理现象。

由于语音信号是随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。

输出频谱是声道系统频率响应与激励源频谱的乘积。

声道系统的频率响应及激励源都是随时间变化的,因此一般标准的傅立叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。

由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。

本实验要求掌握傅里叶分析原理,会利用已学的知识,编写程序估计短时谱、倒谱,画出语谱图,并分析实验结果,在此基础上,借助频域分析方法所求得的参数分析语音信号的基音周期或共振峰。

二、实验原理1、短时傅立叶变换由于语音信号是短时平稳的随机信号,某一语音信号帧的短时傅立叶变换的定义为:()()()jwjwmn m X e x m w n m e∞-=-∞=-∑ (1.1)其中w(n-m)是实窗口函数序列,n 表示某一语音信号帧。

令n-m=k',则得到(')'()(')(')jwjw n k n k X e w k x n k e∞--=-∞=-∑ (1.2)于是可以得到()()()jw jwnjwkn k X e ew k x n k e∞-=-∞=-∑ (1.3)假定()()()jwjwkn k X e w k x n k e∞=-∞=-∑ (1.4)则可以得到()()jw jwn jw n n X e e X e -= (1.5)同样,不同的窗口函数,将得到不同的傅立叶变换式的结果。

由上式可见,短时傅立叶变换有两个变量:n 和ω,所以它既是时序n 的离散函数,又是角频率ω的连续函数。

语音信号的频域分析

语音信号的频域分析

实验二:语音信号的频域分析实验目的:以MATLAB 为工具,研究语音信号的频域特性,以及这些特性在《语音信号处理》中的应用情况。

实验要求:利用所给语音数据,分析语音的频谱、语谱图、基音频率、共振峰等频域参数。

要求会求取这些参数,并举例说明这些参数在语音信号处理中的应用。

实验内容:1、 语音信号的频谱分析1.1加载“ma1_1”语音数据。

基于DFT 变换,画出其中一帧数据(采样频率为8kHz ,帧长为37.5ms ,每帧有300个样点)的频域波形(对数幅度谱)。

load ma1_1;x = ma1_1 (4161:4460); plot (x)N = 1024; k = - N/2:N/2-1;X = fftshift (fft (x.*hann (length (x)),N));plot (k,20*log10 (abs(X))), axis ([0 fix(N/2) -inf inf ])已知该帧信号的时域波形如图(a )所示,相应的10阶LPC 谱如图(b )所示。

问题1:这帧语音是清音还是浊音?基于DFT 求出的对数幅度谱和相应的LPC 谱相比,两者有什么联系和区别?问题2:根据这帧基于DFT 的对数幅度谱,如何估计出共振峰频率和基音周期?问题3:时域对语音信号进行加窗,反映在频域,其窗谱对基于DFT 的对数幅度谱有何影响?如何估计出窗谱的主瓣宽度?1.2对于浊音语音,可以利用其频谱)(ωX 具有丰富的谐波分量的特点,求出其谐波乘积谱:∏==R r r X HPSx 1)()(ωω式中,R 一般取为5。

在谐波乘积谱中,基频分量变得很大,更易于估计基音周期。

1.3加载“vowels.mat”语音数据,分别画出一帧/i/和一帧/u/(采样频率为10kHz,帧长为30ms,每帧有300个样点)的基于DFT的对数幅度谱。

其Matlab代码如下:load vowelsx = vowels.i_1(2001:2300);N = 1024; k= -N/2:N/2-1;X = fftshift (fft (x.*hann (length(x)),N));plot (k,20*log10(abs(X))), axis([0 fix(N/2) 0 100])x = vowels.u_1(2001:2300);N= 1024; k = -N/2:N/2-1;X = fftshift (fft (x.*hann(length(x)),N));plot (k,20*log10(abs(X))), axis([0 fix(N/2) 0 100])1.4画出一帧清音语音的基于DFT的对数幅度谱。

利用Matlab进行频谱分析的方法

利用Matlab进行频谱分析的方法

利用Matlab进行频谱分析的方法引言频谱分析是信号处理和电子工程领域中一项重要的技术,用于分析信号在频率域上的特征和频率成分。

在实际应用中,频谱分析广泛应用于音频处理、图像处理、通信系统等领域。

Matlab是一种强大的工具,可以提供许多功能用于频谱分析。

本文将介绍利用Matlab进行频谱分析的方法和一些常用的工具。

一、Matlab中的FFT函数Matlab中的FFT(快速傅里叶变换)函数是一种常用的频谱分析工具。

通过使用FFT函数,我们可以将时域信号转换为频域信号,并得到信号的频谱特征。

FFT 函数的使用方法如下:```Y = fft(X);```其中,X是输入信号,Y是输出的频域信号。

通过该函数,我们可以得到输入信号的幅度谱和相位谱。

二、频谱图的绘制在进行频谱分析时,频谱图是一种直观和易于理解的展示形式。

Matlab中可以使用plot函数绘制频谱图。

首先,我们需要获取频域信号的幅度谱。

然后,使用plot函数将频率与幅度谱进行绘制。

下面是一个示例:```X = 1:1000; % 时间序列Y = sin(2*pi*10*X) + sin(2*pi*50*X); % 输入信号Fs = 1000; % 采样率N = length(Y); % 信号长度Y_FFT = abs(fft(Y)); % 计算频域信号的幅度谱f = (0:N-1)*(Fs/N); % 频率坐标plot(f, Y_FFT);```通过上述代码,我们可以得到输入信号在频谱上的特征,并将其可视化为频谱图。

三、频谱分析的应用举例频谱分析可以应用于许多实际问题中。

下面将介绍两个常见的应用举例:语音信号分析和图像处理。

1. 语音信号分析语音信号分析是频谱分析的一个重要应用领域。

通过对语音信号进行频谱分析,我们可以探索声波的频率特性和信号的频率成分。

在Matlab中,可以使用wavread 函数读取音频文件,并进行频谱分析。

下面是一个示例:```[waveform, Fs] = wavread('speech.wav'); % 读取音频文件N = length(waveform); % 信号长度waveform_FFT = abs(fft(waveform)); % 计算频域信号的幅度谱f = (0:N-1)*(Fs/N); % 频率坐标plot(f, waveform_FFT);```通过上述代码,我们可以获取语音信号的频谱特征,并将其可视化为频谱图。

基于matlab实现语音信号频谱分析

基于matlab实现语音信号频谱分析

目录第1章课题的设计要求、目的、意义 (3)1.1课题的设计要求: (3)1.1.1.信号采集 (3)1.1.2.构造受干扰信号并对其进行FFT频谱分析 (3)1.1.3.数字滤波器设计 (3)1.1.4.信号处理 (3)1.1.5.设计图形用户界面 (3)1.2课题的设计目的与意义: (3)第2章课程设计报告内容 (4)2.1理论依据 (4)2.2信号采集 (4)2.3构造一个正弦干扰信号来干扰语音信号 (4)2.4数字滤波器设计 (4)2.5信号处理 (4)2.6具体指标 (4)2.7设计图形用户界面 (4)第3章设计理论依据 (5)3.1采样定理 (5)3.2采样频率 (5)第4章图形用户界面制作及Matlab实现 (6)4.1 按钮、静态文本和编辑器的使用 (6)4.1.1打开guide (6)4.2 按钮与程序的联系 (8)第5章调试及分析 (8)5.1打开信号。

(8)5.2声音播放,同时显示波形。

(9)5.3语音信号的频谱、幅度和相位。

(10)5.3.1频谱。

(10)5.3.2幅度。

(10)5.3.3相位。

(11)5.4加噪声后的语音信号波形。

(12)5.5加噪声后的语音信号的频谱、幅度和相位。

(12)5.5.1频谱。

(12)5.5.2幅度。

(13)5.5.3相位。

(13)5.6信号通过FIR滤波器后的波形。

(14)5.7信号通过FIR滤波器后的频谱、幅度和相位。

(15)5.7.1频谱。

(15)5.7.2幅度。

(16)5.7.3相位。

(16)5.8信号通过IIR滤波器后的波形。

(17)5.9 信号通过IIR滤波器后的频谱、幅度和相位。

(18)5.9.1频谱。

(18)5.9.2幅度。

(18)5.9.3相位。

(19)5.10信号通过巴特沃斯滤波器后的波形。

(20)5.11 信号通过巴特沃斯滤波器后的频谱、幅度和相位。

(21)5.11.1频谱。

基于MATLAB的语音频域特征分析

基于MATLAB的语音频域特征分析

经典功率谱估计与现代功率谱估计的对比 [摘要]本文主要介绍了在MATLAB环境下,从介绍功率谱的估计原理入手分析了经典谱估计和现代谱估计两类估计方法的原理、各自特点以及实现方法。

[关键词]功率谱;功率谱估计;经典功率谱估计;现代功率谱估计;语谱图;共振峰信号的频谱分析是研究信号特性的重要手段之一,通常是求其功率谱来进行频谱分析。

功率谱反映了随机信号各频率成份功率能量的分布情况,可以揭示信号中隐含的周期性及靠得很近的谱峰等有用信息,在许多领域都发挥了重要作用。

然而,实际应用中的平稳随机信号通常是有限长的,只能根据有限长信号估计原信号的真实功率谱,这就是功率谱估计。

⑴功率谱估计cleara=wavread('鸟语花香.wav');subplot(2,1,1),plot(a);title('original signal');grid;N=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);endy=20*log(abs(fft(b)));subplot(2,1,2);plot(y);title('短时谱');xlabel('频率(Hz)');ylabel('功率谱(db)');grid;①%相关法:相关法是利用维纳-辛钦定理该方法先由序列x(n)估计出自相关函数R(n),然后对R(n)进行傅立叶变换,便得到x(n)的功率谱估计。

[xn,Fs,bits]=wavread('鸟语花香.wav');n=0:1/Fs:1;nfft=512;cxn=xcorr(xn,'unbiased');CXk=fft(cxn,nfft);Pxx=abs(CXk);index=0:round(nfft/2-1);k=index*Fs/nfft;a=log(10);b=log(Pxx(index+1));c=b/a;plot_Pxx=10*c;plot(k,plot_Pxx);xlabel('frequeney(hz)相关法');ylabel('power spectraldensity');title('recorrelation psd estimate');②周期图法周期图法是直接将信号的采样数据x(n)进行Fourier 变换求取功率谱密度估计的方法。

基于MATLAB实现对语音信号频谱分析

基于MATLAB实现对语音信号频谱分析

的起点移至 处截取信号 ,再做傅里叶变换而得到
的一个频谱函数。这是直接将频率轴方向来理解的。
另一种解释是从时间轴方向来理解,当频率固定时,
例如
,则
可以看作是信号经过一个中心频
率为 的带通滤波器产生的输出。这是因为窗口函数
通常具有低通频率响应,而指数 对语音信号
有调制的作用,使频谱产生移位,即将 频谱中
对应于频率 的分量平移到零频。
3、短时傅里叶反变换(倒谱分析)
傅里叶变换建立了信号从时域到频域的变换桥
梁,而傅里叶反变换则建立了信号从频域到时域的
变换桥梁这两个域之间的变换为一对一映射关系。
我们知道,
可以看作是加窗后函数的傅里叶变
换,为了实现反变换,将
进行频率采样,即令
图2 频谱分析过程
,则有
2、短时傅里叶变换(频谱分析)
公司推出的一种面向工程和科学计算的交互式计算软 的录音机功能可以用麦克风直接录制一段女声“世界
件,它以矩阵运算为基础,把计算、可视化、程序设 上最遥远的距离不是生与死,而是我就站在你面前
计融合到了一个简单易用的交互式工作环境中。同时 你确不知道我爱你”,并保存为WAV 格式文件,供
由于Matlab是一个数据分析和处理功能十分强大的工程 MATLAB 相关函数直接读取、写入或播放。本文以
三、语音信号分析及MATLAB的实现 1、语音信号的频谱分析过程 傅里叶频谱分析是语音信号频域分析中广泛采用的 一种方法。语音波是一个非平稳过程,因此适用于周 期、瞬变或平稳随机信号的标准傅里叶变换不能直接 表示语音信号,而应该用短时傅里叶变换对语音信号 的频谱进行分析,相应的频谱称为“短时谱”。 进行频谱分析时,在时域数据进行短时FFT处理之 前都要进行加窗处理。在FFT处理之后,普通频谱分析 可以进行频域上的滤波处理,从而使频谱更加平滑。 最后IFFT处理观察恢复后的时域信号图形,频谱分析过 程(如图2所示)。

语音信号处理及matlab仿真实验总结

语音信号处理及matlab仿真实验总结

语音信号处理及matlab仿真实验总结
语音信号处理是利用数字信号处理技术对语音信号进行分析、处
理和改进的过程。

语音信号是不规则的波形,其包含了很多信息,如
语音的音高、音调、音色、语速、语气等,因此语音信号处理是一项
非常重要的技术。

语音信号处理的一般流程包括语音信号采集、预处理、特征提取、模型建立和应用,其中预处理包括信号增强、降噪、去混响等,特征
提取包括时域特征、频域特征和时频域特征,模型建立包括声学模型
和语言模型等。

为了更加深入地掌握语音信号处理技术,我们进行了一些matlab
仿真实验。

我们首先学习了语音信号的采样和量化过程,并使用
matlab软件对语音信号进行了仿真采样和量化,了解了采样率和分辨
率等概念,还了解了量化噪声的影响。

其次,我们学习了语音信号的基本特征提取技术,并用matlab仿
真实现了时域特征、频域特征和时频域特征的提取,如时域的短时能
量和短时过零率、频域的傅里叶变换和倒谱系数、时频域的小波变换等。

最后,我们学习了基于模型的语音信号处理技术,如基于隐马尔
可夫模型、高斯混合模型、人工神经网络等模型的语音识别、语音合
成等应用,并用matlab进行了相关的仿真实验。

总之,语音信号处理是一项非常重要的技术,它可以在语音识别、语音合成、语音压缩、语音增强等领域得到广泛应用。

通过学习语音
信号处理及matlab仿真实验,我们了解到了它的基本理论和应用方法,并得到了一些实践经验,这对我们今后的学习和工作将具有很大的指
导意义。

基于MATLAB的语音信号的时、频域分析课程设计

基于MATLAB的语音信号的时、频域分析课程设计

摘要用MATLAB对于语音信号进行分析和处理,采集语音信号后,在MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。

本次设计介绍了基于MATLAB的对语音信号的采集,处理及滤波器的设计,并使之实现的过程。

关键词:MATLAB;语音信号;滤波器;加噪;除噪目录摘要 (1)1 设计原理 (1)1.1 理论原理 (1)1.1.1采样频率 (1)1.1.2采样位数 (1)1.1.3采样定理 (1)1.1.4时域信号的FFT分析 (2)1.1.5数字信号的滤波器原理和方法 (2)1.1.6 各种不同类型滤波器的性能比较 (3)1.1.7离散傅立叶变换 (3)2 信号采集及读取 (4)3 构造受干扰信号并对其进行FFT频谱分析 (6)4 数字滤波器设计 (8)4.1 用窗函数法设计IIR带通滤波器 (8)4.2 用窗函数法设计FIR低通滤波器 (10)5信号处理 (12)5.1 IIR带通滤波 (12)5.2 FIR低通滤波 (14)6心得体会 (16)7 参考文献: (16)1设计原理1.1 理论原理1.1.1 采样频率也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。

采样频率只能用于周期性采样的采样器,对于非周期性采样的采样器没有规则限制。

通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。

采样频率越高,即采样的间隔时间越短,则在单位时间内计算机得到的声音样本数据就越多,对声音波形的表示也越精确。

1.1.2采样位数即采样值或取样值,用来衡量声音波动变化的参数,是指声卡在采集和播放声音文件时所使用数字声音信号的二进制位数。

1.1.3采样定理在进行模拟/数字信号的转换过程中,当采样频率fs.max 大于信号中最高频率fmax的2倍时(fs.max>=2fmax),采样之后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。

基于MATLAB的语音信号时频域参数分析

基于MATLAB的语音信号时频域参数分析

科技广场2007.922[y, fs, nbits]=wavread(waveFile);y=y*2^nbits/2;% waveReadInt: Same as wavread, but return inte-ger value of y% Usage: [y, fs, nbits]=wavReadInt(waveFile)% If nbits=8, then -128<=y<=127% If nbits=16, then -32768<=y<=32767waveFile='lcq.wav'; frameSize=256; overlap=128;[y, fs, nbits]=wavReadInt(waveFile);fprintf('Length of %s is %g sec.\n', waveFile,length(y)/fs);frameMat=buffer(y, frameSize, overlap);frameNum=size(frameMat, 2);volume1=zeros(frameNum,1);volume2=zeros(frameNum, 1);for i=1:frameNumframe=frameMat(:,i);frame=frame-mean(frame);% zero-justifiedvolume1(i)=sum(abs(frame));% method 1volume2(i)=10*log10(sum(frame.^2));% method 2endtime=(1:length(y))/fs;frameTime=((0:frameNum-1)*(frameSize-overlap)+0.5*frameSize)/fs;subplot(3,1,1); plot(time, y); ylabel(waveFile);subplot(3,1,2); plot(frameTime, volume1, '.-');ylabel('Volume (Abs. sum)');subplot(3,1,3); plot(frameTime, volume2, '.-');ylabel('Volume (Decibels)');xlabel('Time (sec)');图一两种短时能量分析结果2.1.2短时过零率分析过零就是信号通过零值。

Matlab音频特征提取与语音分析技巧

Matlab音频特征提取与语音分析技巧

Matlab音频特征提取与语音分析技巧在音频处理和语音分析的领域,Matlab是一种强大的工具,它提供了许多功能和算法供研究人员和工程师使用。

本文将介绍一些常见的音频特征提取方法和语音分析技巧,并展示如何用Matlab实现它们。

一、音频特征提取方法1. 时域特征时域特征是音频波形在时间上的表现,主要包括以下特征:(1) 平均能量:一个音频信号的能量可以通过计算信号的平方加和来获得。

利用Matlab的sum函数,可以轻松地计算出信号的平均能量。

(2) 短时能量:为了捕捉音频信号在不同时间段的能量变化,可以将音频信号分成多个重叠的帧,每帧计算其平均能量。

这样可以获得一个表示信号能量变化的短时能量曲线。

(3) 零交叉率:零交叉率描述了波形在时间上的穿越次数。

具体实现时,可以使用Matlab的sign函数获取波形的符号,然后通过计算两个相邻样点的乘积是否为负数来判断是否发生了零交叉。

2. 频域特征频域特征是音频信号在频率上的表现,常用的频域特征包括:(1) 傅里叶变换:利用傅里叶变换可以将时域信号转换为频谱图。

Matlab提供了fft函数用于实现这一功能。

通过对频谱进行分析,可以得到频域上的一些特征,如主要频率、频谱成分等。

(2) 梅尔频谱倒谱系数(MFCC):MFCC是一种常用的音频特征,它模拟了人耳对声音的感知。

通过将频谱图进行Mel滤波器组合、对数压缩和离散余弦变换,可以得到MFCC系数。

在Matlab中,可以使用MFCC算法库(如yaafe)或自行编写代码来计算MFCC特征。

(3) 色度频谱:色度频谱是指频谱图在音高和音色两个维度上的分布。

可以通过Matlab的chromagram函数来计算色度频谱,然后使用相关技术分析该特征。

二、语音分析技巧1. 语音识别语音识别是一种将音频信号转换为文本的技术,常用于语音助手、语音控制等领域。

在Matlab中,可以利用深度学习技术,如卷积神经网络(CNN)和长短时记忆网络(LSTM),构建语音识别模型。

基于matlab语音信号的采集与分析

基于matlab语音信号的采集与分析

毕业论文(设计)题目:基于matlab语音信号的采集与分析姓名:学院:理学与信息科学学院专业:电子信息科学与技术班级:学号:指导教师:目录摘要 (I)ABSTRACT. .......................................................................................................................................... I I 1 绪论 (1)1.1选题的背景和意义 (1)1.2语音信号处理的进展 (2)2 系统设计的可行性研究 (4)2.1语音信号处理的概念 (4)2.2语音信号的特点 (4)2.3语音信号处理的要求及可行性 (5)2.4M ATLAB仿真软件简介 (5)3 系统设计 (7)3.1系统设计的理论依据 (7)3.2系统的详细设计 (9)3.2.1图形用户界面制作 (9)3.2.2 系统功能的实现 (10)4 系统调试及运行 (16)总结 (25)致谢 (27)参考文献: (28)基于matlab语音信号的采集与分析电子信息科学与技术专业马晓敏指导教师曹红波摘要:语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科。

语音信号处理的目的是得到某些参数以便高效传输或存储,或者是用于某种应用,如人工合成出语音、辨识出讲话者、识别出讲话内容、进行语音增强等[1]。

本文简要介绍了语音信号采集与分析的发展史以及语音信号的特征、采集与分析方法,并通过PC机录制一段声音,采集语音信号后,在MATLAB软件平台上进行频谱分析,并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。

利用MATLAB来读入(采集)语音信号,将它赋值给某一向量。

再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波。

(完整word版)基于matlab的语音信号分析与处理

(完整word版)基于matlab的语音信号分析与处理

基于matlab的语音信号分析与处理摘要:滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR 滤波器是滤波器设计的重要组成部分。

Matlab功能强大、编程效率高, 特别是Matlab具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。

基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。

使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR 数字滤波器,并利用MATLAB作为辅助工具完成设计中的计算与图形的绘制。

关键词:数字滤波器;MATLAB;切比雪夫Abstract:Filter design in digital signal processing plays an extremely important role, FIR digital filters and IIR filter is an important part of filter design. Matlab is powerful, programming efficiency, Matlab also has a particular signal analysis toolbox, it need not have strong programming skills can be easily signal analysis, processing and design. MATLAB based on the noise issue speech signal processing design and implementation of digital signal processing integrated use of the theoretical knowledge of the speech signal plus noise, time domain, frequency domain analysis and filtering. The corresponding results obtained through theoretical derivation, and then use MATLAB as a programming tool for computer implementation.Implemented in the design process, using the windowfunction method to design FIR digital filters with Butterworth, Chebyshev and bilinear Reform IIR digital filter design and use of MATLAB as a supplementary tool to complete the calculation and graphic design Drawing.Keywords:digital filter; MATLAB; Chebyshev语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。

基于MATLAB实现对语音信号分析

基于MATLAB实现对语音信号分析

基于MATLAB实现对语音信号分析语音信号分析是一种研究语音产生、处理和识别的技术,它在语音识别、音频处理和语音合成等领域都有广泛的应用。

MATLAB提供了丰富的工具箱和函数,使得语音信号分析变得简单高效。

在本文中,我们将介绍如何使用MATLAB对语音信号进行分析。

首先,我们需要将语音信号加载到MATLAB中。

MATLAB提供了`audioread`函数用于读取音频文件,返回音频数据和采样率。

音频数据是一个一维向量,表示音频信号的振幅。

采样率则表示每秒采样的样本数。

```matlab[audio, fs] = audioread('speech.wav');```接下来,我们可以对音频信号进行一系列的分析。

以下是一些常见的分析方法:1. 时域分析:时域分析是研究音频信号在时间上的变化。

MATLAB提供了`plot`函数用于绘制音频信号的波形图。

```matlabxlabel('Time (s)');ylabel('Amplitude');title('Speech Waveform');```2. 频谱分析:频谱分析是研究音频信号在频率上的成分。

MATLAB提供了`fft`函数用于计算音频信号的傅里叶变换,返回频谱数据。

频谱数据是一个复数向量,表示音频信号在不同频率上的幅度和相位。

```matlabN = length(audio);frequencies = (0:N-1) / N * fs;spectrum = abs(fft(audio));plot(frequencies, spectrum);xlabel('Frequency (Hz)');ylabel('Magnitude');title('Speech Spectrum');```3. 短时能量和过零率:短时能量和过零率可以反映音频信号的能量和频率特性。

掌握Matlab语音信号处理的基本原理

掌握Matlab语音信号处理的基本原理

掌握Matlab语音信号处理的基本原理Matlab是一种流行的程序设计语言和工具,广泛应用于信号处理领域。

在音频处理中,Matlab可以帮助我们实现各种音频效果、音频分析和音频信号处理算法。

本文将介绍Matlab语音信号处理的基本原理和应用。

一、语音信号的数学表示语音信号是一种连续时间的信号,可以通过采样将其离散化。

在Matlab中,我们可以使用采样率(Sampling rate)来表示每秒采样的样本数。

通常情况下,语音信号的采样率为8000Hz、16000Hz或者更高。

我们可以使用Matlab的`audioread()`函数将音频文件读取为一个向量,并使用`sound(y, Fs)`函数将其播放。

二、语音信号的时域分析时域分析是一种描述信号在时间上变化的方法。

对于语音信号,我们可以使用Matlab的`plot`函数将其在时间轴上绘制出来。

通过查看语音信号的时域波形,我们可以观察到语音信号的持续时间、音调、强度等特征。

三、语音信号的频域分析频域分析是一种描述信号在频率上变化的方法。

对于语音信号,我们可以使用傅里叶变换将其从时域表示转换为频域表示。

在Matlab中,我们可以使用`fft`函数来计算信号的傅里叶变换,并使用`plot`函数将其绘制成频谱图。

频谱图可以帮助我们观察语音信号的共振峰、频率成分等特征。

四、语音信号的滤波处理滤波是一种常用的信号处理方法,可以用来增强或者改变信号的特征。

在语音信号处理中,滤波可以用于去除噪声、增强谐波等。

在Matlab中,我们可以使用`filter`函数来设计和应用各种数字滤波器。

滤波器的设计可以通过指定滤波器的系数或者用滤波器设计函数来自动完成。

五、语音信号的特征提取语音信号的特征提取是一种将语音信号转换为一组数学特征的方法。

这些特征可以用于语音识别、语音合成等应用。

在Matlab中,我们可以使用各种特征提取函数来计算音频信号的特征,如基频、共振峰频率等。

这些特征提取函数通常基于统计分析、傅里叶变换等算法进行计算。

在Matlab下实现语音信号的频谱分析(论文正文)

在Matlab下实现语音信号的频谱分析(论文正文)

毕业设计(论文)基于MATLAB实现对语音信号的频谱分析学生姓名:张彦利学号:所在系部:信息工程学院专业班级:指导教师:日期:二○一贰年五月基于MATLAB实现对语音信号的频谱分析摘要MATLAB是一个数据分析和处理功能十分强大的工程实用软件,运用它来进行信号的分析和处理相当便捷。

本文介绍了在Matlab环境中如何采集语音信号和语音信号采集后的频谱分析处理,并通过实例分析了语音信号处理的Matlab。

并以理想正弦分布的纹理图像的 Matlab仿真和正弦纹理图像的频谱特征分析为例,叙述了基于傅立叶能量谱的纹理图像分析的基本原理和基本过程。

编写了程序,获得了具有理想正弦分布的空域纹理图像,并对其频谱特征进行了分析。

并且根据离散傅里叶变换DFT的定义,推导出一种用 DFT计算离散信号幅值谱的方法,通过 MATLAB 仿真验证了该方法的有效性。

关键词:MATLAB;频谱分析;傅里叶变换;语音信号;信号分析Analysis of Signal Spectrum Based on MATLABAbstractMATLAB is very powerful and practical engineering software which is used in data analysis and processing fraction,and use it to analysis and process voice signal,which is very convenient.This paper describes the Matlab enviironment,how to collect and process speech signal,and through example analysis of the speech signal processing in Matlab.Then take the Matlab simulation of ideal sinusoid texture image and analysis of its spectrum characteristics for example; basic principles and process of analyzing the texture image based on Fourier energy spectrum were described. The program was written for obtaining spatial domain texture image with ideal sinusoid distribution. And its spectrum characteristics were analyzed.Moreover, according to the definition of DFT, a calculation method of amplitude spectrum for periodic signal is derived in this paper. Through simulation of amplitude spectrum calculation in MATLAB, the efficiency of the method is validated to satisfy the need for project.In the end, the problems of spectrum leakage and picket fence effect are explained and the corresponding solution is proposed.Keywords: MATLAB; Spectrum Analysis;FFT; Speech signal; signal analysis目录1. 绪论 11.1 课题背景 11.2 研究意义 11.3 本文研究内容 12. 频谱分析及MATLAB简介 22.1 频谱分析技术 22.1.1 时域抽样定理[7] 22.1.2 离散傅立叶变换(DFT)[8] 22.1.3 快速傅立叶变换(FFT)[9] 32.1.4 频谱分析原理[10] 32.2 MATLAB简介 42.2.1 MATLAB软件的发展 42.2.2 MATLAB组成 52.3 本章小结 53. 程序与算例 63.1 声音信号频谱分析 63.2 图像信号频谱分析 73.3 离散信号/序列 93.4 本章小结 11结论 12致谢 13参考文献 141. 绪论1.1 课题背景随着信息时代和数字世界的到来,数字信号处理己成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。

MATLAB的语音信号频谱分析

MATLAB的语音信号频谱分析

MATLAB的语音信号频谱分析MATLAB是一个功能强大的数学软件环境,它可以用于语音信号的频谱分析。

频谱分析是通过计算信号在不同频率上的能量分布来了解信号的频域特性。

在语音信号处理中,频谱分析可以用于声音的特征提取、语音识别、音频信号处理等各个方面。

要进行语音信号的频谱分析,我们需要首先将语音信号加载到MATLAB环境中。

这可以通过读取音频文件或者录制声音来实现。

然后,我们可以使用MATLAB中的信号处理工具箱中的函数来进行频谱分析。

下面是进行语音信号频谱分析的主要步骤:1.加载语音信号首先,我们需要将语音信号加载到MATLAB环境中。

可以使用`audioread`函数读取音频文件,或者使用`audiorecorder`函数录制声音。

```matlab[x, fs] = audioread('speech.wav');%或者recorder = audiorecorder(fs, 16, 1);recordblocking(recorder, 5); % 录制5秒声音x = getaudiodata(recorder);```2.预处理语音信号在进行频谱分析之前,通常需要对语音信号进行预处理。

这包括去除静音段、去除噪声等操作。

常用的预处理方法有均衡增强、滤波、语音端点检测等。

3.计算幅度谱幅度谱是频谱分析的最基本形式,它描述了信号在不同频率上的幅度分布。

可以使用`fft`函数对语音信号进行傅里叶变换,然后取幅度谱的绝对值。

```matlabX = abs(fft(x));```4.计算功率谱密度功率谱密度是幅度谱的平方值,它表示了信号在不同频率上的功率分布。

可以通过幅度谱的平方值来计算功率谱密度。

```matlabP=X.^2;```5.均衡化谱图为了更好地可视化频谱分析结果,可以对频谱图进行均衡化处理。

可以使用`db`函数将功率谱密度转换为分贝尺度。

```matlabdB = 10 * log10(P);```6.绘制谱图最后,可以使用`plot`函数绘制频谱图。

语音信号处理实验报告.doc

语音信号处理实验报告.doc

语音信号处理实验班级:学号:姓名:实验一基于MATLAB的语音信号时域特征分析(2 学时)1)短时能量( 1)加矩形窗a=wavread('mike.wav');a=a(:,1);subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.^(i-2)*N);%形成一个矩形窗,长度为 2.^(i-2)*NEn=conv(h,a.*a);% 求短时能量函数Ensubplot(6,1,i),plot(En);if(i==2) ,legend('N=32' );elseif(i==3), legend('N=64' );elseif(i==4) ,legend('N=128' );elseif(i==5) ,legend('N=256' );elseif(i==6) ,legend('N=512' );endend1-10.5 1 1.5 2 2.54 x 102N=32 0 0.5 1 1.5 2 2.55 x 10N=64 0 0.5 1 1.5 2 2.510 x 1050.5 1 1.5 2 2.5 N=128 020 x 10100.5 1 1.5 2 2.5 N=256 040 x 1020N=5120 0.5 1 1.5 2 2.5x 10( 2)加汉明窗a=wavread('mike.wav');a=a(:,1);subplot(6,1,1),plot(a);N=32; 3 43 43 43 43 43 4for i=2:6h=hanning(2.^(i-2)*N);% 形成一个汉明窗,长度为 2.^(i-2)*NEn=conv(h,a.*a);% 求短时能量函数Ensubplot(6,1,i),plot(En);if(i==2), legend('N=32' );elseif(i==3), legend('N=64' );elseif(i==4) ,legend('N=128' );elseif(i==5) ,legend('N=256' );elseif(i==6) ,legend('N=512' );endend1-10.5 1 1.5 2 2.52 x 101N=32 0 0.5 1 1.5 2 2.54 x 102N=64 0 0.5 1 1.5 2 2.54 x 102N=128 0 0.5 1 1.5 2 2.510 x 105N=256 0 0.5 1 1.5 2 2.520 x 1010N=5120 0.5 1 1.5 2 2.5x 102)短时平均过零率a=wavread('mike.wav');a=a(:,1);n=length(a);N=320;subplot(3,1,1),plot(a);h=linspace(1,1,N);En=conv(h,a.*a); %求卷积得其短时能量函数Ensubplot(3,1,2),plot(En);for i=1:n-1if a(i)>=0 3 43 43 43 43 43 4elseb(i) = -1;endif a(i+1)>=0b(i+1)=1;elseb(i+1)= -1;endw(i)=abs(b(i+1)-b(i)); %求出每相邻两点符号的差值的绝对值endk=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+N/2; % 每次移动半个窗endfor w=1:jQ(w)=Zm(160*(w-1)+1)/(2*N); %短时平均过零率endsubplot(3,1,3),plot(Q),grid;1-100.51 1.52 2.5 34x 10201000.51 1.52 2.5 34x 100.50204060801001201401601803)自相关函数N=240y=wavread('mike.wav');y=y(:,1);x=y(13271:13510);x=x.*rectwin(240);R=zeros(1,240);for k=1:240for n=1:240-kR(k)=R(k)+x(n)*x(n+k);endendj=1:240;plot(j,R);grid;2.521.510.5-0.5-1-1.5050100150200250实验二基于 MATLAB 分析语音信号频域特征1)短时谱cleara=wavread('mike.wav');a=a(:,1);subplot(2,1,1),plot(a);title('original signal');gridN=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m)endy=20*log(abs(fft(b)))subplot(2,1,2)plot(y);title('短时谱 ');gridoriginal signal10.5-0.5-100.51 1.52 2.5 34x 10短时谱10.500.20.40.60.81 1.2 1.4 1.6 1.8 22)语谱图[x,fs,nbits]=wavread('mike.wav')x=x(:,1);specgram(x,512,fs,100);xlabel('时间 (s)');ylabel('频率 (Hz)' );title('语谱图 ');语谱图50004000)zH3000(率频200010000.51 1.5 2时间 (s) 3)倒谱和复倒谱(1)加矩形窗时的倒谱和复倒谱cleara=wavread('mike.wav',[4000,4350]);a=a(:,1);N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title( '加矩形窗时的倒谱')subplot(2,1,2)plot(c);title( '加矩形窗时的复倒谱')加矩形窗时的倒谱1-1-2050100150200250300加矩形窗时的复倒谱105-5-10050100150200250300(2)加汉明窗时的倒谱和复倒谱 cleara=wavread('mike.wav',[4000,4350]);a=a(;,1);N=300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title( '加汉明窗时的倒谱')subplot(2,1,2)plot(c);title( '加汉明窗时的复倒谱')加汉明窗时的倒谱1-1-2-3050100150200250300加汉明窗时的复倒谱105-5-10050100150200250300实验三基于 MATLAB 的 LPC 分析MusicSource = wavread('mike.wav');MusicSource=MusicSource(:,1);Music_source = MusicSource';N = 256; % window length, N = 100 -- 1000;Hamm = hamming(N); % create Hamming windowframe = input( '请键入想要处理的帧位置= ' );% origin is current frameorigin = Music_source(((frame - 1) * (N / 2) + 1):((frame - 1) * (N / 2) + N));Frame = origin .* Hamm';%%Short Time Fourier Transform%[s1,f1,t1] = specgram(MusicSource,N,N/2,N);[Xs1,Ys1] = size(s1);for i = 1:Xs1FTframe1(i) = s1(i,frame);endN1 = input( '请键入预测器阶数= ' ); % N1 is predictor's order[coef,gain] = lpc(Frame,N1); % LPC analysis using Levinson-Durbin recursionest_Frame = filter([0 -coef(2:end)],1,Frame); % estimate frame(LP)FFT_est = fft(est_Frame);err = Frame - est_Frame; % error% FFT_err = fft(err);subplot(2,1,1),plot(1:N,Frame,1:N,est_Frame,'-r');grid;title('原始语音帧 vs.预测后语音帧 ')subplot(2,1,2),plot(err);grid;title('误差 ');pause%subplot(2,1,2),plot(f',20*log(abs(FTframe2)));grid;title('短时谱 ')%%Gain solution using G^2 = Rn(0) - sum(ai*Rn(i)),i = 1,2,...,P%fLength(1 : 2 * N) = [origin,zeros(1,N)];Xm = fft(fLength,2 * N);X = Xm .* conj(Xm);Y = fft(X , 2 * N);Rk = Y(1 : N);PART = sum(coef(2 : N1 + 1) .* Rk(1 : N1));G = sqrt(sum(Frame.^2) - PART);A = (FTframe1 - FFT_est(1 : length(f1'))) ./ FTframe1 ; % inverse filter A(Z)subplot(2,1,1),plot(f1',20*log(abs(FTframe1)),f1',(20*log(abs(1 ./ A))),'-r');grid;title('短时谱 ');subplot(2,1,2),plot(f1',(20*log(abs(G ./ A))));grid;title( 'LPC谱 ');pause%plot(abs(ifft(FTframe1 ./ (G ./ A))));grid;title('excited')%plot(f1',20*log(abs(FFT_est(1 : length(f1')) .* A / G )));grid;%pause%%find_pitch%temp = FTframe1 - FFT_est(1 : length(f1'));%not move higher frequncepitch1 = log(abs(temp));pLength = length(pitch1);result1 = ifft(pitch1,N);% move higher frequncepitch1((pLength - 32) : pLength) = 0;result2 = ifft(pitch1,N);%direct do real cepstrum with errpitch = fftshift(rceps(err));origin_pitch = fftshift(rceps(Frame));subplot(211),plot(origin_pitch);grid;title( '原始语音帧倒谱 (直接调用函数 )');subplot(212),plot(pitch);grid;title( '预测误差倒谱 (直接调用函数 )');pausesubplot(211),plot(1:length(result1),fftshift(real(result1)));grid;title('预测误差倒谱 (根据定义编写,没有去除高频分量)');subplot(212),plot(1:length(result2),fftshift(real(result2)));grid;title('预测误差倒谱 (根据定义编写,去除高频分量 )');原始语音帧 vs. 预测后语音帧0.40.2-0.2-0.4050100150200250300误差0.20.1-0.1-0.2050100150200250300短时谱50-50-100010203040506070LPC 谱100806040010203040506070原始语音帧倒谱(直接调用函数)0.5-0.5-1050100150200250300预测误差倒谱(直接调用函数)0.5-0.5-1050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.2-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.1-0.1-0.2-0.3050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.2-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.1-0.1-0.2-0.3050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.2-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.1-0.1-0.2-0.3050100150200250300实验四基于 VQ 的特定人孤立词语音识别研究1、mfcc.mfunction ccc = mfcc(x)bank=melbankm(24,256,8000,0,0.5,'m' );bank=full(bank);bank=bank/max(bank(:));for k=1:12n=0:23;dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));endw = 1 + 6 * sin(pi * [1:12] ./ 12);w = w/max(w);xx=double(x);xx=filter([1 -0.9375],1,xx);xx=enframe(xx,256,80);for i=1:size(xx,1)y = xx(i,:);s = y' .* hamming(256);t = abs(fft(s));t = t.^2;c1=dctcoef * log(bank * t(1:129));c2 = c1.*w';m(i,:)=c2';enddtm = zeros(size(m));for i=3:size(m,1)-2dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);enddtm = dtm / 3;ccc = [m dtm];ccc = ccc(3:size(m,1)-2,:);2、vad.mfunction [x1,x2] = vad(x)x = double(x);x = x / max(abs(x));FrameLen = 240;FrameInc = 80;amp1 = 10;amp2 = 2;zcr1 = 10;zcr2 = 5;maxsilence = 8; % 6*10ms = 30msminlen = 15; % 15*10ms = 150msstatus = 0;count = 0;silence = 0;tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);tmp2 = enframe(x(2:end) , FrameLen, FrameInc);signs = (tmp1.*tmp2)<0;diffs = (tmp1 -tmp2)>0.02;zcr = sum(signs.*diffs, 2);amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2); amp1 = min(amp1, max(amp)/4);amp2 = min(amp2, max(amp)/8);x1 = 0;x2 = 0;for n=1:length(zcr)goto = 0;switch statuscase {0,1}if amp(n) > amp1x1 = max(n-count-1,1);status = 2;silence = 0;count= count + 1;elseif amp(n) > amp2 | ...zcr(n) > zcr2status = 1;count = count + 1;elsestatus = 0;count= 0;endcase 2,if amp(n) > amp2 | ...zcr(n) > zcr2count = count + 1;elsesilence = silence+1;if silence < maxsilence count = count + 1;elseif count < minlenstatus = 0;silence = 0;count= 0;elsestatus = 3;endendcase 3,break;endendcount = count-silence/2;x2 = x1 + count -1;3、codebook.m%clear;function xchushi= codebook(m) [a,b]=size(m);[m1,m2]=szhixin(m);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);[m7,m8]=szhixin(m4);[m5,m6]=szhixin(m3);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);[m15,m16]=szhixin(m8);[m13,m14]=szhixin(m7);[m11,m12]=szhixin(m6);[m9,m10]=szhixin(m5);[m7,m8]=szhixin(m4);[m5,m6]=szhixin(m3);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);chushi(1,:)=zhixinf(m1);chushi(2,:)=zhixinf(m2);chushi(3,:)=zhixinf(m3);chushi(4,:)=zhixinf(m4);chushi(5,:)=zhixinf(m5);chushi(6,:)=zhixinf(m6);chushi(7,:)=zhixinf(m7);chushi(8,:)=zhixinf(m8);chushi(9,:)=zhixinf(m9);chushi(10,:)=zhixinf(m10);chushi(11,:)=zhixinf(m11);chushi(12,:)=zhixinf(m12);chushi(13,:)=zhixinf(m13);chushi(14,:)=zhixinf(m14);chushi(15,:)=zhixinf(m15);chushi(16,:)=zhixinf(m16);sumd=zeros(1,1000);k=1;dela=1;xchushi=chushi;while(k<=1000)sum=ones(1,16);for p=1:afor i=1:16d(i)=odistan(m(p,:),chushi(i,:));enddmin=min(d);sumd(k)=sumd(k)+dmin;for i=1:16if d(i)==dminxchushi(i,:)=xchushi(i,:)+m(p,:);sum(i)=sum(i)+1;endendendfor i=1:16xchushi(i,:)=xchushi(i,:)/sum(i); endif k>1dela=abs(sumd(k)-sumd(k-1))/sumd(k); endk=k+1;chushi=xchushi;endreturn4、 testvq.mclear;disp('这是一个简易语音识别系统,请保证已经将您的语音保存在相应文件夹中') disp('正在训练您的语音模版指令,请稍后...')for i=1:10fname = sprintf(海儿的声音\\%da.wav' ,i-1);x = wavread(fname);[x1 x2] = vad(x);m = mfcc(x);m = m(x1:x2-5,:);ref(i).code=codebook(m);enddisp('语音指令训练成功,恭喜!)?'disp('正在测试您的测试语音指令,请稍后...')for i=1:10fname = sprintf(海儿的声音\\%db.wav' ,i-1);x = wavread(fname);[x1 x2] = vad(x);mn = mfcc(x);mn = mn(x1:x2-5,:);%mn = mn(x1:x2,:)test(i).mfcc = mn;endsumsumdmax=0;sumsumdmin=0;disp('对训练过的语音进行测试')for w=1:10sumd=zeros(1,10);[a,b]=size(test(w).mfcc);for i=1:10for p=1:afor j=1:16d(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:));enddmin=min(d);sumd(i)=sumd(i)+dmin; %×üê§??endendsumdmin=min(sumd)/a;sumdmin1=min(sumd);sumdmax(w)=max(sumd)/a;sumsumdmin=sumdmin+sumsumdmax;sumsumdmax=sumdmax(w)+sumsumdmax;disp('正在匹配您的语音指令,请稍后...')for i=1:10if (sumd(i)==sumdmin1)switch (i)case 1fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'前 ', '前 ');case2fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'后 ', '后 ');case3fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'左 ', '左 ');case4fprintf( '您输入的语音指令为a:%s;识别结果为 %s\n' ,'右 ', '右 ');case5fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'东 ', '东 ');case6fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'南 ', '南 ');case7fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'西 ', '西 ');case8fprintf( '您输入的语音指令为:%s; 识别结果为 %s\n' ,'北 ', '北 ');case9fprintf( '您输入的语音指令为a:%s;识别结果为 %s\n' ,'上 ', '上 ');case10fprintf( '您输入的语音指令为a:%s;识别结果为 %s\n' ,'下 ', '下 ');otherwisefprintf( 'error');endendendenddelamin=sumsumdmin/10;delamax=sumsumdmax/10;disp('对没有训练过的语音进行测试')disp('正在测试你的语音,请稍后...')for i=1:10fname = sprintf(o£ ?ùμ ?éùò?\\%db.wav' ,i-1);x = wavread(fname);[x1 x2] = vad(x);mn = mfcc(x);mn = mn(x1:x2-5,:);%mn = mn(x1:x2,:)test(i).mfcc = mn;endfor w=1:10sumd=zeros(1,10);[a,b]=size(test(w).mfcc);for i=1:10for p=1:afor j=1:16d(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:));enddmin=min(d);sumd(i)=sumd(i)+dmin; %×üê§??endendsumdmin=min(sumd);z=0;for i=1:10if (((sumd(i))/a)>delamax)||z=z+1;endenddisp('正在匹配您的语音指令,请稍后...')if z<=3for i=1:10if (sumd(i)==sumdmin)switch (i)case 1fprintf( '您输入的语音指令为:%s; 识别结果为%s\n' ,'前 ', '前 ');case2fprintf( '您输入的语音指令为 :%s; 识别结果为 %s\n' ,'后 ', '后 ');case3fprintf( '您输入的语音指令为 :%s; 识别结果为 %s\n' ,'左 ', '左 ');case4fprintf( '您输入的语音指令为a:%s;识别结果为%s\n' ,'右 ', '右 ');case5fprintf( '您输入的语音指令为:%s; 识别结果为%s\n' ,'东 ', '东 ');case6fprintf( '您输入的语音指令为:%s; 识别结果为%s\n' ,'南 ', '南 ');case7fprintf( '您输入的语音指令为:%s; 识别结果为%s\n' ,'西 ', '西 ');case8fprintf( '您输入的语音指令为 :%s; 识别结果为 %s\n' ,'北 ', '北 ');case9fprintf( '您输入的语音指令为a:%s;识别结果为%s\n' ,'上 ', '上 ');case10fprintf( '您输入的语音指令为a:%s;识别结果为%s\n' ,'下 ', '下 ');otherwisefprintf( 'error');endendendelsefprintf( '您输入的语音无效?\n'£)?endend(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)。

MATLAB语音信号分析和处理

MATLAB语音信号分析和处理

Computer Knowledge and Technology 电脑知识与技术计算机工程应用技术本栏目责任编辑:梁书第7卷第13期(2011年5月)MATLAB 语音信号分析和处理冯玉亮,孙祥娥(长江大学电子信息信学院,湖北荆州434023)摘要:MATLAB 作为一款具备强大科学计算能力和图形显示功能的软件在科学研究以及实际应用的各个领域得到了广泛的应用。

文章介绍了FFT 频谱分析原理及其显示,MATLAB 中相关函数的功能,滤波器的设计和使用。

在此基础上对实际采集的一段含噪声语音信号进行了相关分析处理,试验证明MATLAB 对语音信号的处理十分简单方便,易于实现。

关键词:语音信号处理;MATLAB ;滤波器;频谱分析中图分类号:TN912文献标识码:A 文章编号:1009-3044(2011)13-3145-03Analysis and Processing Speech Signal Based on MATLABFENG Yu-liang,SUN Xiang-e(Electronic and Information Institute of Yangtze University,Jingzhou 434102,China)Abstract:As a scientific software with the characteristic of powerful computing capability and strong graphical display,Matlab has been widely used in scientific research and practical applications in various fields.This paper introduces the principle of FFT firstly,Matlab fuc -tions about display,filter designing are discribed too.And then,an actual speech signal is analysed and processed by matlab.Though analysis the frequency character of noise and raw speech,the proper filter is designed and the noise is surpressed.Matlab can execute those analysis and peocessing simplely and conveniently.Key words:the speech signal proseccing;matlab;filter;frequency character analysis数字信号处理是一门发展迅速、应用广泛的前沿性学科,加上现在科技的迅速发展,数字信号处理也在逐步向着数字化、可视化、软件化的方向发展。

基于MATLAB的语音信号时域特征分析.doc

基于MATLAB的语音信号时域特征分析.doc

+k w m k)()]开始录音1)短时能量(1)加矩形窗a=wavread('C:\Users\k01\WEI.wav'); subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.^(i-2)*N);En=conv(h,a.*a);subplot(6,1,i),plot(En);if(i==2) legend('N=32');elseif(i==3) legend('N=64');elseif(i==4) legend('N=128');elseif(i==5) legend('N=256');elseif(i==6) legend('N=512');endend00.51 1.52 2.53 3.54x 105-0.200.200.51 1.52 2.53 3.54x 105012 N=3200.51 1.52 2.53 3.54x 105024 N=6400.51 1.52 2.53 3.54x 10505 N=12800.51 1.52 2.53 3.54x 1050510 N=25600.51 1.52 2.53 3.54x 10501020 N=512(2)加汉明窗a=wavread('C:\Users\k01\WEI.wav');subplot(6,1,1),plot(a);N=32;for i=2:6h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为2.^(i-2)*N En=conv(h,a.*a);% 求短时能量函数Ensubplot(6,1,i),plot(En);if(i==2) legend('N=32');elseif(i==3) legend('N=64');elseif(i==4) legend('N=128');elseif(i==5) legend('N=256');elseif(i==6) legend('N=512');endend00.51 1.52 2.53 3.54x 105-0.200.200.51 1.52 2.53 3.54x 10500.51 N=3200.51 1.52 2.53 3.54x 105012 N=6400.51 1.52 2.53 3.54x 105024 N=12800.51 1.52 2.53 3.54x 10505 N=25600.51 1.52 2.53 3.54x 1050510 N=51200.51 1.52 2.53 3.5x 105-0.500.53) 自相关函数N=240Y=WAVREAD('C:\Users\k01\WEI.wav');x=Y(13271:13510);x=x.*rectwin(240);R=zeros(1,240);for k=1:240for n=1:240-kR(k)=R(k)+x(n)*x(n+k);endendj=1:240; plot(j,R); grid;短时谱1)短时谱cleara=wavread('C:\Users\k01\Desktop\WENWEI.wav');subplot(2,1,1),plot(a);title('original signal');gridN=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m)endy=20*log(abs(fft(b)))subplot(2,1,2)plot(y);title('短时谱');grid00.51 1.52 2.53 3.5x 105-0.500.5original signal050100150200250300-200-100100短时谱2)语谱图[x,fs,nbits]=wavread('C:\Users\k01\Desktop\WENWEI.wav ')specgram(x,512,fs,100);xlabel('时间(s)');ylabel('频率(Hz)');title('语谱图');3)倒谱和复倒谱(1)加矩形窗时的倒谱和复倒谱cleara=wavread('C:\Users\k01\Desktop\WENWEI.wav',[4000,4350]); N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加矩形窗时的倒谱')subplot(2,1,2)plot(c);title('加矩形窗时的复倒谱')050100150200250300-6-4-22加矩形窗时的倒谱050100150200250300-505加矩形窗时的复倒谱(2)加汉明窗时的倒谱和复倒谱cleara=wavread('C:\Users\k01\Desktop\WENWEI.wav',[4000,4350]); N=300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加汉明窗时的倒谱')subplot(2,1,2)plot(c);title('加汉明窗时的复倒谱')050100150200250300-6-4-22加汉明窗时的倒谱050100150200250300-505加汉明窗时的复倒谱段的起始点;而过零率分析仅仅是表明清音的过零率高于浊音,对噪声的存在比较敏感,如果背景中有反复穿越坐标轴的随机噪声,会产生大量的虚假过零率,影响检测结果。

MATLAB中的信号采集与处理技巧分享

MATLAB中的信号采集与处理技巧分享

MATLAB中的信号采集与处理技巧分享在信号处理领域,MATLAB是一款强大而常用的工具。

它提供了许多方便的函数和工具箱,可以帮助工程师们更加高效地采集和处理信号。

本文将分享一些在MATLAB中信号采集和处理的技巧,希望对读者有所帮助。

一、信号采集信号采集是信号处理的第一步,而在MATLAB中,有几种常见的方法可以采集信号。

1. 读取文件:MATLAB支持多种文件格式的读取,如.wav、.mp3等。

通过使用`audioread`函数可以方便地读取音频文件,并将其转换为MATLAB的矩阵形式,以便后续处理。

2. 录制音频:使用MATLAB提供的录音功能,可以通过调用`audiorecorder`对象来录制音频。

首先需要创建一个录音对象,并设置采样率、位深等参数。

然后,使用`record`函数开始录制音频,并使用`getaudiodata`函数获取录制的音频数据。

3. 采集外部设备信号:如果需要采集来自外部设备的信号,可以使用MATLAB提供的数据采集工具箱。

该工具箱支持与不同类型的硬件设备通信,如AD/DA转换器、传感器等。

通过设置相应的参数,可以实现对外部信号的采集。

二、信号处理信号处理是通过一系列的算法和方法对信号进行分析和处理的过程。

MATLAB 提供了许多函数和工具箱,可以帮助工程师们完成各种信号处理任务。

1. 时域分析:时域分析是对信号的时间特性进行分析。

MATLAB中的`plot`函数可以绘制信号的时域波形图。

使用`fft`函数可以进行傅里叶变换,将信号从时域转换为频域,并使用`abs`函数求取幅度谱。

另外,可以通过调整窗函数的类型和长度,对信号进行窗函数处理,以避免频谱泄漏等问题。

2. 频域分析:频域分析基于信号的频谱特性进行分析。

MATLAB提供了`spectrogram`函数和`pwelch`函数等用于计算信号的短时傅里叶变换和功率谱密度的函数。

通过观察频谱,可以了解信号的频率分布和谐波情况,从而做出相应的处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

语音信号处理实验报告实验三基于 MATLAB 分析语音信号频域特征所在院系:工学院专业: 电子信息工程班级:电信112姓名:学号:指导教师:***2014年05月06日实验三基于 MATLAB 分析语音信号频域特征一、实验目的信号的傅立叶表示在信号的分析与处理中起着重要的作用。

因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。

另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。

由于语音信号是随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。

输出频谱是声道系统频率响应与激励源频谱的乘积。

声道系统的频率响应及激励源都是随时间变化的,因此一般标准的傅立叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。

由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。

本实验要求掌握傅里叶分析原理,会利用已学的知识,编写程序估计短时谱、倒谱,画出语谱图,并分析实验结果,在此基础上,借助频域分析方法所求得的参数分析语音信号的基音周期或共振峰。

二、实验原理1、短时傅立叶变换由于语音信号是短时平稳的随机信号,某一语音信号帧的短时傅立叶变换的定义为:其中 w(n-m)是实窗口函数序列,n 表示某一语音信号帧。

令 n-m=k',则得到同样,不同的窗口函数,将得到不同的傅立叶变换式的结果。

由上式可见,短时傅立叶变换有两个变量:n 和ω,所以它既是时序 n 的离散函数,又是角频率ω的连续函数。

与离散傅立叶变换逼近傅立叶变换一样,如令ω=2πk/N,则得离散的短时傅立叶吧如下:2、语谱图水平方向是时间轴,垂直方向是频率轴,图上的灰度条纹代表各个时刻的语音短谱。

语谱图反映了语音信号的动态频率特性,在语音分析中具有重要的实用价值。

被成为可视语言。

语谱图的时间分辨率和频率分辨率是由窗函数的特性决定的。

时间分辨率高,可以看出时间波形的每个周期及共振峰随时间的变化,但频率分辨率低,不足以分辨由于激励所形成的细微结构,称为宽带语谱图;而窄带语谱图正好与之相反。

宽带语谱图可以获得较高的时间分辨率,反映频谱的快速时变过程;窄带语谱图可以获得较高的频率分辨率,反映频谱的精细结构。

两者相结合,可以提供带两与语音特性相关的信息。

语谱图上因其不同的灰度,形成不同的纹路,称之为“声纹”。

声纹因人而异,因此可以在司法、安全等场合得到应用。

3、复倒谱和倒谱在时域上,语音产生模型实际上是一个激励信号与声道冲激响应的卷积。

对于浊音,激励信号可以由周期脉冲序列表示;对于清音,激励信号可以由随机噪声序列表示。

声道系统相当于参数缓慢变化的零极点线性滤波器。

这样经过同态处理后,语音信号的复倒谱,激励信号的复倒谱,声道系统的复倒谱之间满足下面的关系:由于倒谱对应于复倒谱的偶部,因此倒谱与复倒谱具有同样的特点,很容易知道语音信号的倒谱,激励信号的倒谱以及声道系统的倒谱之间满足下面关系:浊音信号的倒谱中存在着峰值,它的出现位置等于该语音段的基音周期,而清音的倒谱中则不存在峰值。

利用这个特点我们可以进行清浊音的判断,并且可以估计浊音的基音周期。

4、基因周期估计浊音信号的倒谱中存在峰值,它的出现位置等于该语音段的基音周期,而清音的倒谱中则不存在峰值。

利用倒谱的这个特点,我们可以进行语音的清浊音判决,并且可以估计浊音的基音周期。

首先计算语音的倒谱,然后在可能出现的基因周期附近寻找峰值。

如果倒谱峰值超过了预先设置的门限,则输入语音判断为浊音,其峰值位置就是基因周期的估计值;反之,如果没有超出门限的峰值的话,则输入语音为清音。

5、共振峰估计对倒谱进行滤波,取出低时间部分进行进行逆特征系统处理,可以得到一个平滑的对数谱函数,这个对数谱函数显示了输入语音段的共振峰结构,同时谱的峰值对应于共振峰频率。

通过此对数谱进行峰值检测,就可以估计出前几个共振峰的频率和强度。

对于浊音的声道特性,可以采用前三个共振峰来描述;清音不具备共振峰特点。

二、实验结果1 短时谱2 语谱图3 倒谱和复倒谱图 3、4 是加矩形窗和汉明窗的倒谱图和复倒谱图,图中横轴的单位是Hz,纵轴的单位是 dB。

4 基因周期和共振峰估计四、参考程序cleara=wavread('beijing.wav'); subplot(2,1,1),plot(a);title('original signal'); gridN=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m)endy=20*log(abs(fft(b))) subplot(2,1,2)plot(y);title('¶ÌʱÆ×'); grid00.51 1.52 2.53 3.54x 104-0.500.51050100150200250300-150-100-50050短时谱[x,fs,nbits]=wavread('beijing.wav') specgram(x,512,fs,100); xlabel('ʱ¼ä(s)'); ylabel('ƵÂÊ(Hz)'); title('ÓïÆ×ͼ');00.51 1.52 2.53 3.54x 104-0.500.51时间(s)频率(H z )语谱图0.511.522.533.544.51000200030004000cleara=wavread('beijing.wav',[4000,4350]); N=300; h=linspace(1,1,N); for m=1:N b(m)=a(m)*h(m); end c=cceps(b); c=fftshift(c); d=rceps(b); d=fftshift(d); subplot(2,1,1)plot(d);title('¼Ó¾ØÐδ°Ê±µÄµ¹Æ×') subplot(2,1,2)plot(c);title('¼Ó¾ØÐδ°Ê±µÄ¸´µ¹Æ×')050100150200250300-6-4-202050100150200250300-6-4-202加矩形窗时的复倒谱cleara=wavread('beijing.wav',[4000,4350]); N=300; h=hamming(N); for m=1:N b(m)=a(m)*h(m); end c=cceps(b); c=fftshift(c); d=rceps(b); d=fftshift(d); subplot(2,1,1)plot(d);title('¼ÓººÃ÷´°Ê±µÄµ¹Æ×') subplot(2,1,2)plot(c);title('¼ÓººÃ÷´°Ê±µÄ¸´µ¹Æ×')050100150200250300-6-4-202050100150200250300-10-55加汉明窗时的复倒谱语音信号处理实验报告实验四基于 MATLAB 的 LPC 分析所在院系:工学院专业: 电子信息工程班级:电信112姓名:学号:指导教师:汤永清2014年05月06日实验四基于 MATLAB 的 LPC 分析一、实验目的线性预测分析是᳔有效的语音分析技术之一,在语音编码、语音合成、语音识别和说话人识别等语音处理领域中得到了广泛的应用。

语音线性预测的基本思想是:一个语音信号的抽样值可以用过去若干个取样值的线性组合来逼近。

通过使实际语音抽样值与线性预测抽样值的均方误差达到᳔小,可以确定唯一的一组线性预测系数。

采用线性预测分析不仅能够得到语音信号的预测波形,而且能够提供一个非常好的声道模型。

如果将语音模型看作激励源通过一个线性时不变系统产生的输出,那么可以利用 LP 分析对声道参数进行估值,以少量低信息率的时变参数精确地描述语音波形及其频谱的性质。

此外,LP 分析还能够对共振峰、功率谱等语音参数进行精确估计,LP 分析得到的参数可以作为语音识别的重要参数之一。

由于语音是一种短时平稳信号,因此只能利用一段语音来估计模型参数。

此时有两种方案:一种是将长的语音序列加窗,然后对加窗语音进行 LP 分析,只要限定窗的长度就可以保证分析的短时性,这种方案称为自相关法;另一种方案不对语音加窗,而是在计算均方预测误差时限制其取和区间,这样可以导出 LP 分析的自协方差法。

本实验要求掌握 LPC 原理,会利用已学的知识,编写程序估计线性预测系数以及 LPC 的推演参数,并能利用所求的相关参数估计语音的端点、清浊音判断、基因周期、共振峰等。

二、实验原理1 LP 分析基本原理LP 分析为线性时不变因果稳定系统 V(z)建立一个全极点模型,并利用均方误差准则,对已知的语音信号 s(n)进行模型参数估计。

如果利用 P 个取样值来进行预测,则称为 P 阶线性预测。

假设用过去 P 个取样值显然,误差越接近于零,线性预测的准确度在均方误差᳔小的意义上为᳔佳,由此可以计算出预测系数。

通过 LPC 分析,由若干帧语音可以得到若干组 LPC 参数,每组参数形成一个描绘该帧语音特征的矢量,即 LPC 特征矢量。

由 LPC 特征矢量可以进一步得到很多种派生特征矢量,例如线性预测倒谱系数、线谱对特征、部分相关系数、对数面积比等等。

不同的特征矢量具有不同的特点,它们在语音编码和识别领域有着不同的应用价值。

2 自相关法值得注意的是,自相关法在计算预测误差时,数据段的两端都需要加 P 个零取样值,因而可造成谱估计失真。

相关文档
最新文档