matlab app设计步骤_MATLAB之时域及频域的乐器信号分析及处理

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

https://blog.csdn.net/weixin_44936771/article/details/107726586?utm_source=app
   后续会上传源码及文件,请关注并收藏。

##设计题目及要求
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                     //在图中添加网格线,增加可读性

matlab app设计步骤_MATLAB之时域及频域的乐器信号分析及处理_第1张图片
    ##注意:
        这里仅仅为作时域图的方法,在建立整个项目时还需要考虑美观性等因素,一般来说需要
        建立一个专门的图形界面,完整整合代码将会放在后面。

三.进行快速傅里叶变化及数据选取
    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 app设计步骤_MATLAB之时域及频域的乐器信号分析及处理_第2张图片

五.构建滤波器
    这里我用的是MATLAB自带的fdatool工具来构建的滤波器,在MATLAB中直接输入fdatool就可以打开这个工具。
    这里有两种滤波器可供选择,IIR滤波器和FIR滤波器,本人使用的是IIR滤波器。
    具体参数可根据自己需要进行设置。

matlab app设计步骤_MATLAB之时域及频域的乐器信号分析及处理_第3张图片
    设置好参数后需要将滤波器模型导出,具体步骤如下:
    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);
    单引号中为文件名,自己取即可,注意加后缀。

##以上就是全部的过程,后续会上传全部源码及文件
##不足之处请及时指出,互相学习

你可能感兴趣的:(matlab,app设计步骤,matlab,length,matlab,mat文件变成图片,matlab,plot,网格设置,matlab,二维高斯滤波,傅里叶,matlab保存生成的图像)