Matlab处理声音文件

上传人:人*** 文档编号:430992095 上传时间:2022-12-28 格式:DOC 页数:8 大小:302KB
返回 下载 相关 举报
Matlab处理声音文件_第1页
第1页 / 共8页
Matlab处理声音文件_第2页
第2页 / 共8页
Matlab处理声音文件_第3页
第3页 / 共8页
Matlab处理声音文件_第4页
第4页 / 共8页
Matlab处理声音文件_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

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

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

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

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

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

6、vread(XPquit.WA V);% 将 WAV 文件转换成变量 x1=x(:,1);% 抽取第1声道x2=x(:,2);%抽取第2声道wavwrite(x1,FS,NBITS,XPquit1.W AV);% 实现 1 声道分离 wavwrite(x2,FS,NBITS,XPquit2.W AV);% 实现 2 声道分离%如果合并位置不对前面补0 %声道长度不对后面补 0x12=x1+x2;% 两路单声道列向量矩阵变量合并x12m=max(max(x12),abs(mi n(x12),% 找出极值 y12=x12./x12m;% 归一化处理wavwrite(y12,FS,NBITS,XPq

7、uit12.W AV);% 实现两路声道合并%如果组合位置不对前面补0-声道长度不对后面补0x3=x1,x2;%两路单声道变量组合wavwrite(x3,FS,NBITS,XPquit3.W AV);% 实现两路声道组合测试结果:在以上程序后分别一次编写sou nd (x1), sou nd (x2), sou nd (x12), sou nd (x3)试听声道分离,合并和组合的效果,发现其声音效果各不相同。同时,我们可以发现:合并后的 XPquit12.wav 的大小(43.1KB) =XPquit1.wav 的大小(43.1KB) =XPquit2.wav 的 大小(43.1KB );组合

8、后 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)中生成的XPquit12.wav为例,以下为实现数字滤波的程序:clear; close all; clc;X,FS,NBITS

9、=wavread(XPquit12.WAV);% 将 WAV文件转换成变量%利用 FDATool 设计一个 LowpassButterworth 滤波器%旨标 FS=22050Hz Fp=1000Hz Ap=1dB Fs=3000Hz As=20dBB =0.0062,0.0187,0.0187,0.0062;%分子系数A =1,-2.1706,1.6517,-0.4312;%分母系数Y=filter(B,A,X);%实现数字滤波t=(0:le ngth(X)-1)/FS;%计算数据时刻subplot(2,2,1);plot(t,X);%绘制原波形图title(原信号波形图); 加标题subp

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

11、波后频谱图写成WAV文件wavwrite(Y,FS,NBITS,XPquitFilter.WAV);% 测试结果:运行后得到下图:由图可知,滤波对波形影响不大, 但对高频有较大衰减。试听会感觉到处理后的声音比较沉闷。(4 )数据转换数据转换是指改变音频格式中的采样频率或量化位数。转换原理是:先用矩阵插值或抽取技术实现变量变换, 如果是抽取数据还需在变换前作滤波处理使之满足采样定理;变量变换完成后再用 Wavwrite函数重新定义量化位数和采样频率即可实现数据转换。数据转换过程中,要注意采样频率与原始采样频率及插值或抽取系数的关系。MATLAB实现插值或抽取的函数有 decimate、in te

12、rp 禾口 resample。以2倍抽取为例,将(3)中的经过滤波后产生的XPquitFilter.WAV文件进行数据转换处理。以下为其实现程序:clear; close all; clc;x,FS,NBITS=wavread(XPquitFilter.WA V);% 将 WAV 文件转换成变量N=le ngth(x);%计算数据点数%不是偶数点化成偶数点if mod(N,2)=0; N=N; else x(N)=; N=N-1; end;%原信号波形频谱分析tx=(0:N-1)/FS;%计算原信号数据点时刻subplot(3,2,1);plot(tx,x);%绘制原信号波形title(原信号

13、波形图);%加标题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=le ngth(y);%计算抽取后数据点数%抽取数据在原采样频率FS下的波形频谱分析ty=(0:M-1)/FS;% 计算数据点时刻subplot(3,2,3);plot(ty,y);% 绘制信号波形图title(原采样率下新波形图);%加标题yf=fft(y);% 求频谱fy=

14、(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);% 绘制信号波形图title(新采样率下新波形图);%加标题fz=(0:M/2)*(FS/2)/M;%确定频谱图频率刻度subplot(3,2,6);plot(fz,abs(yf(1:M/2+1);% 绘制频谱图title(新采样率下新频谱图);%加标题%实现数据转换

15、wavwrite(y,FS/2,NBITS,XPquit16B.W AV);% 音频格式 PCM 11025Hz 16 位 wavwrite(y,FS/2,NBITS/2,XPquit8B.W AV);% 音频格式 PCM 11025Hz 8 位测试结果:运行程序,得到如图结果Q Figure 1. 口 丨回由图可知,在满足采样定律条件下, 实现数据抽取,在原采样率下波形变密、频谱变宽且幅度减半,但在新采样率下波形和频谱都很好。结论用matlab处理声音文件时,在录制的过程中需要将音量标准化,否则在后面的步骤中 会出现声音过小而分辨不出声音是否变化的情况,数字滤波中,由于设计的滤波器为低通滤波器,故滤波后,对高频有很大衰减。在满足采样定律条件下,实现数据抽取,在原采样率下波形变密、频谱变宽且幅度减半,但在新采样率下波形和频谱都很好。在语音信号处理过程中,MATLAB!

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

当前位置:首页 > 医学/心理学 > 基础医学

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