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

您所在的位置:网站首页 公路车cervelo官网 MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图

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

2023-09-27 00:29| 来源: 网络整理| 查看: 265

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

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

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形 一.绘制基础界面二.完善代码

一.绘制基础界面

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

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

(2)新建一个空白GUI编辑界面 在这里插入图片描述在这里插入图片描述

(3)拖动一个按钮和一个可编辑文本放到合适位置 在这里插入图片描述

(4)修改名称并选择合适的字号 在这里插入图片描述

至此完成,效果如下: 在这里插入图片描述

接下来,播放音频,只需要一个按钮 参考上面步骤很容易画出,这里不再过多解释,直接看图: 在这里插入图片描述

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

具体步骤如下: (1)直接拖动三个控件到合适位置,并且调整到合适大小即可: 在这里插入图片描述

(2)这里添加三个静态文本,来标识图形; 在这里插入图片描述

(3)最后添加三个按钮,通过点击来控制显示图形。 在这里插入图片描述

至此界面已经全部构建完,直接点击绿色的运行按钮,生成代码进行修改 在这里插入图片描述

二.完善代码

二.完善代码 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;

在这里插入图片描述

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

2.接下来查看“播放”按钮的标签为“pushbutton2” 在这里插入图片描述

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

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

在这里插入图片描述

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

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

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

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

在这里插入图片描述

注意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,'幅值');

在这里插入图片描述

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

(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,'相位');

在这里插入图片描述

至此全部完成,我们来直接运行。 在这里插入图片描述在这里插入图片描述 ##之后我将会上传全部源码和文件,后续内容也将在博客继续更新,请持续关注 ##有任何不足之处请及时指出,共同学习



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3