Matlab处理声音文件

上传人:豆浆 文档编号:768327 上传时间:2017-05-14 格式:DOC 页数:5 大小:116KB
返回 下载 相关 举报
Matlab处理声音文件_第1页
第1页 / 共5页
Matlab处理声音文件_第2页
第2页 / 共5页
Matlab处理声音文件_第3页
第3页 / 共5页
Matlab处理声音文件_第4页
第4页 / 共5页
Matlab处理声音文件_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Matlab处理声音文件》由会员分享,可在线阅读,更多相关《Matlab处理声音文件(5页珍藏版)》请在金锄头文库上搜索。

1、 Matlab 处理声音文件摘要:信号与系统这门课是大多数工程类课表中的一个重要组成部分,在学习信号与系统这门课时,我们需要熟练地应用 Matlab 来采集和处理音频信号,图像信号等并绘出它们的波形和频谱。利用 Matlab 我们可以灵活方便地分析和处理声音文件。本文介绍了用 Matlab 处理声音文件的基本流程,并绘制了音频信号的相关波形和频谱。关键词:Matlab 音量标准化 声道分离 数字滤波 数据转换引言:MATLAB 是美国 Math Works 公司推出的一种面向工程和科学计算的交互式计算软件。它以矩阵运算为基础,把计算、可视化、程序设计融合在一个简单易用的交互式工作环境中,是一款

2、数据分析和处理功能都非常强大的工程实用软件。本文主要介绍 Matlab在处理简单声音文件方面的使用。正文:1.设计要求:(1)了解语音信号的特点;(2)掌握数字滤波器的参数选择及设计方法;(3)掌握数字滤波器的应用方法及应用效果;(4)提高 Matlab 下的程序设计能力及综合应用能力。2.系统的组成及工作原理分析和处理声音文件,首先要对声音信号进行采集,MATLAB 的数据采集工具箱提供了一整套命令和函数,通过调用这些函数和命令,可直接控制声卡进行数据采集。Windows自带的录音机程序也可驱动声卡来采集语音信号,并能保存为 WAV 格式文件,供MATLAB 相关函数直接读取、写入或播放。本

3、文以 WAV 格式语音信号作为分析处理的输入数据,用 MATLAB 处理声音文件的基本流程是:先将 WAV 格式语音信号经 wavread 函数转换成 MATLAB 列数组变量;再用 MATLAB 强大的运算能力进行数据分析和处理,如时域分析、频域分析、数字滤波、信号合成、信号变换、识别和增强等等;处理后的数据如是音频数据,则可用 wavwrite 转换成 WAV 格式文件或用 sound、wavplay 等函数直接回放。3.实验内容,调试及测试结果(1)音量标准化在实际录制语音信号的过程中常有音轻问题,因此在录制声音过程中需要对声音电平进行量化处理,使音量实现标准化。利用 Matlab 很容

4、易实现音量标准化,即最大电平对应最高量化比特。基本步骤是:1.利用 wavread 函数将 WAV 文件转换成列数组变量:2.求出数组变量的极值并对所有元素作归一化处理;3.用 wavwrite 函数还原成音量标准化的WAV 文件。以微软自带的“Windows 拨出电话声.wav” 语音信号为例,先将其复制另存到文件名为 XPexit.wav 的 Matlab 当前目录中,再通过音量标准化后保存为 XPquit.wav 文件。以下为其实现程序:clear; close all; clc; Y,FS,NBITS=wavread(XPexit.WAV);% 将 WAV 文件转换成变量FS,NBIT

5、S,% 显示采样频率和量化比特 Ym=max(max(max(Y),max(abs(min(Y),% 找出双声道极值 X=Y/Ym;% 归一化处理 wavwrite(X,FS,NBITS,XPquit.wav)% 将变量转换成 WAV 文件测试结果:再在程序后编写 sound(X),试听后可以发现经标准化处理后,声音变得稍微大了。(2)声道分离合并与组合立体声或双声道音频信号有左右两个声道,利用 MATLAB 实现双声道分离、两路声道合并和两个单声道组合成一个双声道等效果,实际上是利用了 MATLAB 的矩阵抽取、矩阵相加和矩阵重组运算。以(1)中生成的 XPquit.wav 为例,以下为其实

6、现分离,合并和组合的程序:clear; close all; clc; x,FS,NBITS=wavread(XPquit.WAV);% 将 WAV 文件转换成变量 x1=x(:,1);% 抽取第 1 声道 x2=x(:,2);% 抽取第 2 声道 wavwrite(x1,FS,NBITS,XPquit1.WAV);% 实现 1 声道分离 wavwrite(x2,FS,NBITS,XPquit2.WAV);% 实现 2 声道分离 %如果合并位置不对前面补 0 %声道长度不对后面补 0 x12=x1+x2;% 两路单声道列向量矩阵变量合并 x12m=max(max(x12),abs(min(x1

7、2),% 找出极值 y12=x12./x12m;% 归一化处理 wavwrite(y12,FS,NBITS,XPquit12.WAV);% 实现两路声道合并 %如果组合位置不对前面补 0-声道长度不对后面补 0 x3=x1,x2;% 两路单声道变量组合 wavwrite(x3,FS,NBITS,XPquit3.WAV);% 实现两路声道组合测试结果:在以上程序后分别一次编写 sound(x1) ,sound(x2) ,sound(x12) ,sound(x3)试听声道分离,合并和组合的效果,发现其声音效果各不相同。同时,我们可以发现:合并后的 XPquit12.wav 的大小(43.1KB)=

8、XPquit1.wav 的大小(43.1KB)=XPquit2.wav的大小(43.1KB) ;组合后 XPquit3.wav 的大小(86.1KB)=XPquit1.wav 的大小(43.1KB)+XPquit2.wav 的大小(43.1KB) 。(3)数字滤波数字滤波是常用的音频处理技术。先利用 FDATool 工具,设计一个数字滤波器,再用Filter 或 Filter2 函数即可实现滤波处理。调用的 Filter 函数格式是:Y = filte (B,A,X) 。其中,B 和 A 是滤波器传输函数的分子和分母系数,X 是输入变量,Y 是实现滤波后的输出变量。以(2)中生成的 XPqui

9、t12.wav 为例,以下为实现数字滤波的程序:clear; close all; clc; X,FS,NBITS=wavread(XPquit12.WAV);% 将 WAV 文件转换成变量 %利用 FDATool 设计一个 LowpassButterworth 滤波器 %指标 FS=22050Hz Fp=1000Hz Ap=1dB Fs=3000Hz As=20dB B =0.0062,0.0187,0.0187,0.0062;% 分子系数 A =1,-2.1706,1.6517,-0.4312;% 分母系数 Y=filter(B,A,X);% 实现数字滤波 t=(0:length(X)-1

10、)/FS;% 计算数据时刻 subplot(2,2,1);plot(t,X);% 绘制原波形图 title(原信号波形图);% 加标题 subplot(2,2,3);plot(t,Y);% 绘制滤波波形图 title(滤波后波形图);% 加标题 xf=fft(X);% 作傅里叶变换求原频谱 yf=fft(Y);% 作傅里叶变换求滤波后频谱 fm=3000*length(xf)/FS;% 确定绘频谱图的上限频率 f=(0:fm)*FS/length(xf);% 确定绘频谱图的频率刻度 subplot(2,2,2);plot(f,abs(xf(1:length(f);% 绘制原波形频谱图title

11、(原信号频谱图);% 加标题 subplot(2,2,4);plot(f,abs(yf(1:length(f);% 绘制滤波后频谱图 title(滤波后信号频谱图);% 加标题 wavwrite(Y,FS,NBITS,XPquitFilter.WAV);% 写成 WAV 文件测试结果:运行后得到下图:由图可知,滤波对波形影响不大,但对高频有较大衰减。试听会感觉到处理后的声音比较沉闷。 (4)数据转换数据转换是指改变音频格式中的采样频率或量化位数。转换原理是:先用矩阵插值或抽取技术实现变量变换,如果是抽取数据还需在变换前作滤波处理使之满足采样定理;变量变换完成后再用 Wavwrite 函数重新定

12、义量化位数和采样频率即可实现数据转换。数据转换过程中,要注意采样频率与原始采样频率及插值或抽取系数的关系。MATLAB 实现插值或抽取的函数有 decimate、interp 和 resample。以 2 倍抽取为例,将(3)中的经过滤波后产生的 XPquitFilter.WAV 文件进行数据转换处理。以下为其实现程序:clear; close all; clc; x,FS,NBITS=wavread(XPquitFilter.WAV);% 将 WAV 文件转换成变量 N=length(x);% 计算数据点数 % 不是偶数点化成偶数点 if mod(N,2)=0; N=N; else x(N)

13、=; N=N-1; end; % 原信号波形频谱分析 tx=(0:N-1)/FS;% 计算原信号数据点时刻 subplot(3,2,1);plot(tx,x);% 绘制原信号波形 title( 原信号波形图);% 加标题 xf=fft(x);% 求原信号频谱 fx=(0:N/2)*FS/N;% 确定频谱图频率刻度 subplot(3,2,2);plot(fx,abs(xf(1:N/2+1);% 绘制原信号频谱 title( 原信号频谱图);% 加标题 % 实现数据抽取 k=1:N/2;% 确定抽取位置 y=x(2*k);% 实现抽取后的数据 M=length(y);% 计算抽取后数据点数 %

14、抽取数据在原采样频率 FS 下的波形频谱分析 ty=(0:M-1)/FS;% 计算数据点时刻 subplot(3,2,3);plot(ty,y);% 绘制信号波形图 title( 原采样率下新波形图);% 加标题 yf=fft(y);% 求频谱 fy=(0:M/2)*FS/M;% 确定频谱图频率刻度 subplot(3,2,4);plot(fy,abs(yf(1:M/2+1);% 绘制频谱图 title( 原采样率下新频谱图);% 加标题 % 抽取数据在 FS/2 采样频率下的波形频谱分析 tz=(0:M-1)/(FS/2);% 计算数据点时刻 subplot(3,2,5);plot(tz,y

15、);% 绘制信号波形图 title( 新采样率下新波形图);% 加标题 fz=(0:M/2)*(FS/2)/M;% 确定频谱图频率刻度 subplot(3,2,6);plot(fz,abs(yf(1:M/2+1);% 绘制频谱图 title( 新采样率下新频谱图);% 加标题 % 实现数据转换 wavwrite(y,FS/2,NBITS,XPquit16B.WAV);% 音频格式 PCM 11025Hz 16 位 wavwrite(y,FS/2,NBITS/2,XPquit8B.WAV);% 音频格式 PCM 11025Hz 8 位 测试结果:运行程序,得到如图结果由图可知,在满足采样定律条件下,实现数据抽取,在原采样率下波形变密、频谱变宽且幅度减半,但在新采样率下波形和频谱都很好。结论用 matlab 处理声音文件时,在录制的过程中需要将音量标准化,否则在后面的步骤中会出现声音过小而分辨不出声音是否变化的情况,数字滤波中,由于设计的滤波器为低通滤波器,故滤波后,对高频有很大衰减。在满足采样定律条件下,实现数据抽取,在原采样率下波形变密、频谱变宽且幅度减半,但在新采样率下波形和频谱都很好。在语音信号处理过程中,MATLAB 兼顾了专用工具软件的简单性和计算机程序语言的灵活性,特别是处理效果的可视性和可感知,有利于理解语音信号处理的本质,有利于激发学习和研究兴趣,也有利于培养

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号