实验九 声音信号的处理 信息工程学院 网络工程系 强文萍
一、实验目的 1. 了解Matlab中对声音信号的读取、存储、播放方法 2.掌握对声音信号添加白噪声的方法 3.了解采用简单滑动平均法去除噪声
二、实验设备 1、计算机 2、MATLAB6.5 软件
二、实验原理 1. 声音与语音 声音是由物体振动产生,正在发声的物体叫声源。 正常人能够听见20Hz到20000Hz的声音,而老年人的高频声音减少到10000Hz左右。人们把频率高于20000Hz的声音称为超声波,低于20Hz的称为次声波。人的声音频率在100Hz(男低音)到10000Hz(女高音)范围内。 语音是语言的声学表现形式,是最符合人类自然习惯的一种人际信息传播方式,具有便捷性、高效性、随机性、交互性等显著特点,是实现人机交互的一种重要通信方式。
二、实验原理 声音信号处理的应用领域: 1)语音编码技术(Speech Coding Technology): 语音编码是模拟语音信号实现数字化的基本手段。 语音信号是一种时变的准周期信号,而经过编码描述以后,语音信号可以作为数字数据来传输、存储或处理,因而具有一般数字信号的优点。 如何在尽量减少失真的情况下,降低语音编码的比特数已成为语音压缩编码技术的主要内容。
二、实验原理 2)语音合成技术(Speech Synthesis Technology): 可分为三类:波形编码合成、参数式合成和规则合成。 3)语音识别技术(Speech Recognition Technology): 基于模式匹配的思想,从语音流中抽取声学特征,然后在特征空间完成模式的比较匹配,寻找最接近的词(字)作为识别结果。 4)语音理解技术(Language Understanding Technology):其目的是实现人机智能化信息交换,构成通畅的人机语音通信。
二、实验原理 2. 语音信号的读写与播放 语音的存储格式有wav、mp3、wma、aac、real、au等,Matlab可以直接读取的是wav和au,对应的函数为wavread和auread。 WAV格式是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。 WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,因此WAV的音质与CD相差无几,但WAV格式对存储空间需求太大不便于交流和传播。
二、实验原理 常见的声音文件主要有两种,分别对应于单声道(11.025KHz采样率、8Bit的采样值)和双声道(44.1KHz采样率、16Bit的采样值)。 采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。 对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。 对于其他音频文件,可以用Cooledit 语音转换软件进行转换。
二、实验原理 3. Matlab中对wav文件的操作函数 a)声音的读取,用法: y = wavread('filename') [y,Fs,bits] = wavread(‘filename’) 总点数、采样率、位 [...] = wavread('filename',N) 读前N个点 [...] = wavread(‘filename’,[N1 N2]) 读指定范围内的点
二、实验原理 b)声音的播放: wavplay(...,‘mode’) 播放模式分为‘sync’―同步式;‘async’非同步式。 wavplay(y,Fs) wavplay(...,‘mode’) 播放模式分为‘sync’―同步式;‘async’非同步式。 更通用的函数: sound(y,Fs) sound(y) sound(y,Fs,bits) 类似的指令: soundsc : Scale data and play as sound soundsc(y,Fs) soundsc(y) soundsc(y,Fs,bits) soundsc(y,...,slim)
二、实验原理 c)声音的录制: y=wavrecord(n, fs) % 麦克录音 y = wavrecord(...,ch) wavwrite(y,'filename') wavwrite(y,Fs,'filename') wavwrite(y,Fs,N,'filename')
二、实验原理 4.滤波处理 为了客服信号中由于随机干扰而引入的随机误差,可以对采集的数据进行处理,消除或减弱干扰噪声的影响,提高信号的可靠性和精度。 滑动平均滤波法 把连续取N个采样值看成一个队列 队列的长度固定为N 每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
二、实验原理 公式 参数 yn为第n次采样值经滤波后的输出 Xn-i为未经滤波的第n-i次采样值 N 为递推平均项数 优点:对周期性干扰有良好的抑制作用,平滑度高 适用于高频振荡的系统 缺点:灵敏度低,比较浪费RAM 对偶然出现的脉冲性干扰的抑制作用较差 不易消除由于脉冲干扰所引起的采样值偏差
二、实验原理 改进的滑动滤波法 该公式要求节点个数为k≥5 用m次多项式来拟合得到的实验数据,并用最小二乘法来确定方程中的待定系数,得到5点3次平滑公式: 该公式要求节点个数为k≥5 当节点个数多于5时,为对称其见,除在两端分别用公式(1).(2).(4).(5)外,其余都用公式(3)进行平滑。
二、实验原理 函数filter5_3实现5点3次平滑滤波 function y=filter5_3(x,m) % x为被处理的数据 % m 为循环次数 n=length(x); a=x; for k=1: m b(1) = (69*a(1) +4*(a(2) +a(4)) -6*a(3) -a(5)) /70; b(2) = (2* (a(1) +a(5)) +27*a(2) +12*a(3) -8*a(4)) /30; for j=3:n-2 b (j) = (-3*(a(j-2) +a(j+2)) +12*(a(j-1) +a(j+1)) +17*a(j)) /35; end b (n-1) = (2*(a(n) +a(n-4)) +27*a(n-1) +12*a(n-2) -8*a(n-3)) /35; b (n) = (69*a(n) +4* (a(n-1) +a(n-3)) -6*a(n-2) -a(n-4)) /70; a=b; end y =a;
三、实验内容 1、 制作卡拉OK clear all close all [xl, fs, nbits]=wavread('hong_l.wav',524288); sound(2*xl, fs); % 播放 [xr, fs, nbits]=wavread('hong_r.wav',524288); sound(2*xr,fs); % 播放 x=zeros(length(xr),2); x(:,1)=xl; % 左声道 x(:,2)=xr; % 右声道 wavwrite(x,fs,16,'hong_new.wav'); sound(2*x, fs); % 播放
三、实验内容 2. 两个声音文件的合成 读取声音文件w1.wav ,观察其各声道波形; clear all close all [x, fs, nbits]=wavread('w1.wav',65536); sound(2*x, fs); % 播放 time=(1:length(x))/fs; % 时间轴向量 plot(time,x); % 波形 left=x(:,1); % 左声道 right=x(:,2); % 右声道 figure subplot(2,1,1), plot((1:length(left))/fs, left); subplot(2,1,2), plot((1:length(right))/fs, right); x2=wavread('w2.wav',65536); y=x+x2; %声音合成 wavwrite(y,fs,16,'w3.wav'); sound(2*y,fs);
三、实验内容 3. 声音文件加噪声并滤噪 对w1.wav添加高斯分布的白噪声,回放试听效果变化;采用平滑滤波器,进行滤波,看效果是否得到改善。 程序流程 读入w1.wav 回放声音 加入噪声y=x+系数*randn(length(x),2); 回放(比较2次的声音) 截断(为了plot和求fft的方便) 画出原始信号以及加入噪声后的信号的时域和频域的图 对含噪声信号y去噪 (调用filter5_3) 显示去噪后信号的时域和频域波形,进行比较