当前位置:   article > 正文

MATLAB之使用GUI处理语音信号(二)基本界面和绘制波形图_matlab读取音频文件并画出波形

matlab读取音频文件并画出波形

##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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

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

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

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

global temp;
global Fs;
sound(temp,Fs);%播放音频文件
  • 1
  • 2
  • 3

在这里插入图片描述

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

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

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

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

在这里插入图片描述

注意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,'幅值');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

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

(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,'相位');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/287788
推荐阅读
相关标签
  

闽ICP备14008679号