MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图

##MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形
在上一篇文章中我们认识了GUI并且学习了一些基础操作,这节我们开始进入使用GUI处理语音信号的主题,直接看最终效果:
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第1张图片

本节学习构建基础界面和绘制时域图、幅域图和相频图。

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形

  • 一.绘制基础界面
  • 二.完善代码

一.绘制基础界面

一.绘制基础界面
首先我们明确需求,要实现的功能为:
1.选择并导入音频文件;
2.播放音频;
3.绘制时域图、频域图以及相频图;

首先,选择并导入音频文件需要一个按钮来选择文件,再加上一个静态文本来提示用户应该选择格式为.wav的波形文件,步骤如下:
(1)输入guide命令
在这里插入图片描述

(2)新建一个空白GUI编辑界面
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第2张图片MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第3张图片

(3)拖动一个按钮和一个可编辑文本放到合适位置
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第4张图片

(4)修改名称并选择合适的字号
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第5张图片

至此完成,效果如下:
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第6张图片

接下来,播放音频,只需要一个按钮
参考上面步骤很容易画出,这里不再过多解释,直接看图:
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第7张图片

最后是画图,这里再给大家介绍一种新的界面,坐标轴,用来显示图像
在这里插入图片描述

具体步骤如下:
(1)直接拖动三个控件到合适位置,并且调整到合适大小即可:
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第8张图片

(2)这里添加三个静态文本,来标识图形;
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第9张图片

(3)最后添加三个按钮,通过点击来控制显示图形。
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第10张图片

至此界面已经全部构建完,直接点击绿色的运行按钮,生成代码进行修改
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第11张图片

二.完善代码

二.完善代码
1.首先单击“选择文件按钮”,查看其标签为“pushbutton1”(可能不同,看自己具体情况),在相应函数下输入以下代码:

[filename,pathname]=uigetfile({
     '*.wav','ALLFILES(*.*)'},'选择声音文件');
if isequal([filename pathname],[0,0])
    return;
end
str=[pathname filename];%选择的声音文件路径和文件名
global temp;
global Fs;
[temp,Fs]=audioread(str);%temp表示声音数据 Fs表示频率
handles.y=temp;handles.Fs=Fs;

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第12张图片

这里为选择文件,并且创建temp、Fs两个全局变量,并将音频文件的相关数据储存到这两个变量中。
这里使用全局变量的目的是在其他函数中还要调用,要注意的是global为全局变量。

2.接下来查看“播放”按钮的标签为“pushbutton2”
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第13张图片

在相应函数下输入以下代码:

global temp;
global Fs;
sound(temp,Fs);%播放音频文件

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第14张图片

注意在调用temp和Fs之前要声明一下这两个全局变量。

3.接下来我们将三幅图分别在对应坐标轴中显示

(1)在绘制时域图按钮对应的函数中添加如下代码:

global temp;
global Fs;
plot(handles.axes1,temp);%画出时域图,放到坐标轴1xlabel(handles.axes1,'时间')
ylabel(handles.axes1,'幅值')

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第15张图片

注意axes1为放置时域图的坐标轴对应的标签,这样就很容易理解它的意思了,将图像放在哪个坐标轴中。

(2)在绘制幅频图按钮对应的函数中添加如下代码:

global temp;
global Fs;
global n;
global temp1;
global len;
n=length(temp);%提取信号长度
temp1=fft(temp,n);%进行快速傅里叶变化
len=round((length(temp1))/2);%选取一半长度
plot(handles.axes2,abs(temp1(1:len)));%画出频域图
xlabel(handles.axes2,'频率');
ylabel(handles.axes2,'幅值');

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第16张图片

代码具体含义参考使用脚本分析的那篇文章,这里不再过多解释,要注意的是声明全局变量和将图片放到指定的坐标轴中。

(3)在绘制相频图按钮对应的函数中添加如下代码:

global n;
global temp1;
global Fs;
f0=(-n/2:n/2-1)*(Fs/n);%进行相位计算
ph_y0=fftshift(temp1);
phase=unwrap(angle(ph_y0));% 矫正相角跳变范围在pi以内
plot(handles.axes3,phase);%画出相频图
xlabel(handles.axes2,'频率');
ylabel(handles.axes2,'相位');

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第17张图片

至此全部完成,我们来直接运行。
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第18张图片MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第19张图片
##之后我将会上传全部源码和文件,后续内容也将在博客继续更新,请持续关注
##有任何不足之处请及时指出,共同学习
##有任何问题可以关注公众号“歌者X”发送信息,看到后会及时回复。
下面是我的公众号,扫码或者搜索“歌者X”
MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_第20张图片

你可能感兴趣的:(matlab之GUI,matlab,gui)