信号的基本运算和波形变换一、实验目的对某一特定信号的运算有:放大、衰减、沿时间轴压缩、展宽、翻转、差分运算等等,借助MATLAB完成语音信号的采集,并以采集到的信号为研究对象,完成上述运算,体验运算效果。二、实验原理以PC机上的声卡为主要硬件,使用MATLAB软件完成语音信号的采集,通过实验可以让大家切实体验对某一信号的运算所带来的效果。根据个人要求效果的不同,通过修改实验中的相关参数,可以使其效果更佳。以上方法简单使用,性价比高。语音信号的频率范围大约是20Hz~20kHz,其频率成分主要集中在300~3400Hz,因此语音通信中国际上广泛采用8kHz的采样速率,而目前一般的PC机声卡采样速率都达到44.1kHz或48kHz,其16位的A/D精度比普通的16位A/D卡都要高,是性价比很高数据采集卡,完全能满足一般的语音信号的采集分析要求。借用PC机的现有资源加上MATLAB软件,可以方便的完成语音信号的采集、运算、频谱分析和滤波等。使用MATLAB与声卡的接口函数完成语音信号的采集,可以将采集到的数据保存为wav格式的文件或者保存为数据,并编程实现采集到的语音信号的运算,通过听觉切实体验数字信号运算所带来的效果。三、实验内容1MATLAB中语音信号的采集对于配置了声卡并连接了麦克风的计算机,MATLAB中可以采用命令wavrecord来录音,其调用格式是:y=wavrecord(n,Fs,ch,dtype);其中,n为总的取样点数,Fs为取样速率(样点/s),标准取样速率可设为8000、11025(默认)、22050以及44100样点/s。用户也可以设定其他取样速率值,如Fs=10000,但必须满足采样定理的要求,否则将导致录音结果失真。ch为录音声道数,默认ch=1,为单声道录音;若ch=2,则为立体声录音,这时需要声卡能够支持双声道录音并配有两个话筒。dtype为记录的数据格式,有double(默认),single,int16,int8等几种类型。需要强调的是,录音采用均匀量化规则,输出序列y是一个1n´的数字序列,对于double(默认),single,int16的数据类型,每个样值的量化精度将大于等于16bit(最高精度取决于声卡指标),这对于一般工程研究是足够的,可以忽略量化过程中引入的量化误差。例如,当要研究8bitA律PCM的语音质量时,就可以将16bit的输出录音结果视为量化之前的采样结果。使用指令wavplay和sound可以将一个数字序列按照指定的采样率通过声卡输出到扬声器。wavplay指令一般用于windows操作系统下,sound指定则用于跨平台的操作。wavplay指令的用法是:wavplay(y,Fs);wavplay(y,Fs,’mode’)%mode可取值async或sync;其中,y是被播放序列(取值范围必须在-1~+1之间),当y为1n´矩阵时,为单声道播出;当y为2n´矩阵时,则将各列分别送入左右两个声道播出。Fs为播放的采样率,默认值为11025Hz,一般声卡支持的Fs范围是5000~44100Hz。当播放模式设置为sync(默认)时,表示同步播放,即执行该指令完毕之后(声音播放完毕)才执行下一条语句;当播放模式设置为async时,则表示异步播放,即将该命令的数据送入声卡后,立即开始执行下一语句。MATLAB也可以将记录的音频信号直接保存为wav格式。在windows环境下,wav格式是最常用的。利用命令wavwrite(y,Fs,’filename’);就可以将向量y存储为取样率为Fs的wav格式音频文件。wav文件可以采用windows中的多媒体播放器播放。MATLAB中也可以直接读取wav格式的音频文件,其常用的调用命令是:[y,Fs]=wavread(‘filemane’);wavread指令中的filename为wav格式文件名,返回值y为样值序列,对于单声道音频文件,y是n行1列的,对于双声道文件,y是n行2列的。Fs是返回的音频采样率。以上命令都属于MATLAB与声卡的接口函数[3],运用它们可以完成语音信号的采集、存储以及回放。2语音信号的运算和效果体验对某一信号的运算包括:放大、衰减、延时间轴压缩、展宽、翻转、差分运算等等。在此通过编写MATLAB中的脚本文件,完成语音信号的采集并对信号进行上述的运算,通过播放体验其运算效果。首先调用wavrecord函数,完成语音信号的采集,并保存为wav格式的文件,调用wavplay函数播放声音信号产生听觉体验,然后进行信号运算。提到语音,有人可能会想到回声,回声是我们日常生活中常见的一种现象。语音信号在传播过程中,碰到大的反射面(如建筑物的墙壁等)在界面将发生反射,回声是能够与原声区分开的反射信号。人耳能辨别出回声的条件是反射信号具有足够大的声强,并且与原声的时差须大于0.1秒。当反射面的尺寸远大于入射声波长时,听到的回声最清楚。任务要求大家编写程序,在程序中在体会信号运算及波形变换,完后简单模拟回声效果。四、结论以PC机上的声卡为主要硬件,使用MATLAB软件完成语音信号的采集,通过实验可以让大家切实体验对某一信号的运算所带来的效果。根据个人要求效果的不同,通过修改实验中的相关参数,可以使其效果更佳。以上方法简单使用,性价比高。与以上过程相对应的MATLAB的m文件如下:%此m文件完成声音信号的采集与运算,用到的硬件为配有耳麦和声卡装置的PC机,软件为Matlab.fs=8000;T=30;n=T*fs;disp('开始录音');%给出运行提示,开始声音信号的采集,将语音信号对准麦克风,完成其采集y=wavrecord(n,fs);%loadsy2.mat;wavwrite(y,fs,'rerod.wav')%保存为wav格式disp('原声播放');wavplay(y,fs);%原声播放效果disp('放大播放');wavplay(5*y,fs);%语音信号的放大及效果体验disp('衰减播放');wavplay(0.5*y,fs);%语音信号的衰减及效果体验disp('加速播放');wavplay(y,2*fs);%沿时间轴压缩及效果体验%wavplay(y(1:2:end),fs);disp('减速播放');wavplay(y,0.5*fs);%沿时间轴展宽及效果体验disp('反转播放');yy=y(end:-1:1);wavplay(yy,fs);%信号的翻转及效果体验disp('差分播放')cf=diff(y);%对声音信号进行差分处理wavplay(cf,fs)%播放差分处理后的声音信号及效果体验disp('回声效果');%简单模拟回声效果tao=2;y1=y;y1(n+1:(T+tao)*fs)=0;y2=y1;y2(1:tao*fs)=0;y2(tao*fs+1:(T+tao)*fs)=y;y3=0.5*y1+0.5*y2;wavplay(y3,fs);%回声播放效果体验savesy2.maty通过运行以上脚本文件,完成语音信号的采集,存储,可以让大家真实感受到对某一语音信号的相关运算所带来的效果。回声是大家生活中常见的现象,以上通过简单的模拟实现了回声效果。