##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