MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf

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

院 系 电气与电子工程学院

专业班级

姓 名

学 号

指导教师

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); %fix 函数是将(s-n)/h 的小数舎去

d=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、实验结果说明

语音数据波形 语谱图

四、总结

这次做了一些准备工作所以比较顺利,在语谱图的绘制过程中曾经忘了添加

先前wav 录音文件的具体位置导致编译失败,在matlab 报错后可以仔细看看弹

出的关于相关语句的解析,十分有助于更改错误并提高对语句的熟练程度。

你可能感兴趣的:(MATLAB实现实时录音)