900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > MATLAB之时频域乐器信号的分析与处理

MATLAB之时频域乐器信号的分析与处理

时间:2022-06-09 19:30:31

相关推荐

MATLAB之时频域乐器信号的分析与处理

##MATLAB之时域及频域的乐器信号分析及处理

MATLAB之时域及频域的乐器信号分析及处理

前言设计题目及要求详细步骤一.创建脚本,导入音频文件并播放二.画出信号的时域波形三.进行快速傅里叶变化及数据选取四.画出频域图像五.构建滤波器六.导入滤波器并得出传递系数七.进行滤波八.画出滤波后信号的时域、频域图九.画滤波图像十.导出滤波后的音频文件

前言

这是之前使用MATLAB做的一个项目,来对语音信号进行分析处理,设计语音信号的导入及播放操作,读取信号长度、画图及生成滤波等操作,MATLAB小白可零基础上手,只要跟着教程一步一步来就可以,非常简单。

后续会上传源码及文件,请关注并收藏。

设计题目及要求

##设计题目及要求

1.设计题目:时频域乐器信号的分析与处理

2.设计目标:对乐器不同音阶信号进行时频域分析和处理的基本方法

3.设计要求

(1)分别录制钢琴、吉他、口琴等乐器在不同音阶的声音文件,并将文件导入Matlab中;

(2)分别分析各乐器(两种或两种以上)的不同音阶声音的频谱,绘制其频谱图,分析声音信号的频谱;

(3)设计相应的滤波器,剔除声音信号的高频谐波,并分析滤波信号的频谱;

(4)生成滤波后的语音文件,分析听觉效果。

详细步骤

##下面开始详细教程

一.创建脚本,导入音频文件并播放

1.在MATLAB中创建一个新脚本并保存

2.选择音频文件导入MATLAB中并播放

(1)首先要注意的是MATLAB处理的音频信号为波形文件,.wav格式,所以不能直接导入.mp3等格式,改格式直接修改后缀名即可;

(2)注意一定要将要处理的音频文件放到运行目录下;

(3)接下来在脚本中导入音频文件

[MU,fs]=audioread('piano.wav');

这里用到的函数是audioread,这个一般是通用的,任何版本都可以用。函数中需要写出要导入的音频文件,注意文件名称中不能有中文!

audioread函数为采集音频信号数据,采样值将放在向量MU中,fs为表示采样频率。

MU和fs可根据喜好修改为其他名字。

(4)在MATLAB中该播放音频

sound(MU,fs);

这里只需要一个函数即可,无需过多解释。

二.画出信号的时域波形

plot(MU);//直接画出数组MU的图形,即为时域图title('初始信号波形');//设置图像的标题xlable('时间');//设置图像X轴名称ylable('幅度');//设置图像Y轴名称grid //在图中添加网格线,增加可读性

##注意:

这里仅仅为作时域图的方法,在建立整个项目时还需要考虑美观性等因素,一般来说需要

建立一个专门的图形界面,完整整合代码将会放在后面。

三.进行快速傅里叶变化及数据选取

1.计算信号长度

n=length(MU);

2.快速傅里叶变化

MU1=fft(MU,n);

数据MU傅里叶变化后的数据将储存到MU1中

3.选取一半数据

len = round((length(MU1))/2);

这里要注意傅里叶变化后的数据为一个对称图形,这里为了美观性选取了其中的一般数据,

这里无所谓,影响不大

四.画出频域图像

plot(abs(gq1(1:len)));//画出频谱图title('初始信号频谱'); //设置标题xlabel('频率'); //设置X轴名称ylabel('幅度'); //设置Y轴名称grid on//添加网格线

五.构建滤波器

这里我用的是MATLAB自带的fdatool工具来构建的滤波器,在MATLAB中直接输入fdatool就可以打开这个工具。

这里有两种滤波器可供选择,IIR滤波器和FIR滤波器,本人使用的是IIR滤波器。

具体参数可根据自己需要进行设置。

设置好参数后需要将滤波器模型导出,具体步骤如下:

File-Export

在弹出的窗口中,Export To这里选择MAT-File,Export As这里选择Objects

之后点击下方Export,保存文件就可以到处滤波器的模型文件了,格式为.mat

六.导入滤波器并得出传递系数

load('E:\lowpass.mat');//导入滤波器[b,a]=tf(Hd);//得出传递系数

这里load函数为导入文件,单引号中写滤波器模型文件的位置,注意加上后缀,而且路径中不

要有中文。

七.进行滤波

x=filter(b,a,MU);

这一步直接写即可,无需过多解释

八.画出滤波后信号的时域、频域图

这一步与画原始信号的时域频域图大同小异,无非是把MU换成了x,下面直接放代码。

##时域图plot(x);//画出滤波后音频的时域图title('滤波后信号的波形');//设置标题xlabel('时间');//设置X轴单位ylabel('幅度');//设置Y轴单位grid on //添加网格线##频域图n=length(x);//计算滤波后音频数据长度X1=fft(x,n);//对滤波后音频进行傅里叶变化len = round((length(X1))/2);//选取一半长度plot(abs(X1(1:len)));//画出滤波后音频的频谱图title('滤波后信号的频谱');//设置标题xlabel('频率');//设置X轴ylabel('幅度');//设置Y轴grid on //添加网格线

九.画滤波图像

这一步在构建滤波器的时候上面就已经显示了,但是为了方便直接看,就加了这一步。

fvtool(Hd,'Analysis','magestimate');

这也是MATLAB自带的功能,里面的三个参数,第一个是要画的参数,后面两个是X轴和Y轴的名称。

十.导出滤波后的音频文件

audiowrite('newpiano.wav',x,fs);

单引号中为文件名,自己取即可,注意加后缀。

##以上就是全部的过程,后续会上传全部源码及文件

##不足之处请及时指出,互相学习

##文件已上传,自行下载

/download/weixin_44936771/12677957

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。