搜索
您的当前位置:首页用matlab实现录音以及语谱图的绘制

用matlab实现录音以及语谱图的绘制

来源:智榕旅游


《语音信号处理》仿真作业

院 系 电气与电子工程学院 专业班级 姓 名 学 号 指导教师

2020 年 3 月

作业题目:语音采集与读写

一、目的

(1)了解matlab采集语音信号的原理与采用命令; (2)掌握基于matlab的语音文件的创建、读写等操作。 二、要求

(1)利用matlab程序实现录音语音信号“你好,武汉欢迎你”,并保存为wuhan.wav文件。

(2)使用waveread函数读取wuhan.wav文件,并使用plot函数显示出来。要求:横纵坐标带有标注,横轴的单位为秒(s),纵轴显示归一化后的数值。 三、具体步骤(包含原理、具体实现、结果对比等) 1、基本原理

利用matlab的语音工具箱进行录音,用电脑声卡进行声音捕获。

利用matlab打开录音的wav文件,对录音进行分析和归一化,并生成语谱图。 2、具体实现(步骤、代码)

第一步,用matlab软件实现录音,并存储为wav文件,同时绘制语音数据波形,代码如下:

recObj = audiorecorder; disp('Start speaking.')

recordblocking(recObj, 5);%设置录音时间 disp('End of Recording.');% 回放录音数据 play(recObj);% 获取录音数据

myRecording = getaudiodata(recObj);% 绘制录音数据波形 plot(myRecording);%存储语音信号

filename = ' G:\\Desktop\\专业学习教程\\语音信号处理\\wuhan.wav'; audiowrite(filename,myRecording,12000);

第二步,读取wav文件并生成语谱图,代码如下: clear all;

[x,sr]=audioread(' G:\\Desktop\\专业学习教程\\语音信号处理\\wuhan.wav'); %#ok %sr为采样频率 if (size(x,1)>size(x,2)) x=x'; end

s=length(x);

w=round(44*sr/1000); %窗长,取离44*sr/100最近的整数 n=w; %fft的点数 ov=w/2; %50%的重叠 h=w-ov;

% win=hanning(n)'; %哈宁窗 win=hamming(n)'; %汉明窗 c=1;

ncols=1+fix((s-n)/h); %fixd=zeros((1+n/2),ncols); for b=0:h:(s-n)

u=win.*x((b+1):(b+n)); t=fft(u);

d(:,c)=t(1:(1+n/2))'; c=c+1; end

tt=[0:h:(s-n)]/sr; ff=[0:(n/2)]*sr/n;

imagesc(tt/1000,ff/1000,20*log10(abs(d))); colormap(gray); axis xy xlabel('时间/s'); ylabel('频率/kHz'); 3、实验结果说明

语音数据波形

函数是将(s-n)/h的小数舎去 语谱图

四、总结

这次做了一些准备工作所以比较顺利,在语谱图的绘制过程中曾经忘了添加先前wav录音文件的具体位置导致编译失败,在matlab报错后可以仔细看看弹出的关于相关语句的解析,十分有助于更改错误并提高对语句的熟练程度。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top