MATLAB之时频域乐器信号的分析与处理
##MATLAB之時(shí)域及頻域的樂(lè)器信號(hào)分析及處理
MATLAB之時(shí)域及頻域的樂(lè)器信號(hào)分析及處理
- 前言
- 設(shè)計(jì)題目及要求
- 詳細(xì)步驟
- 一.創(chuàng)建腳本,導(dǎo)入音頻文件并播放
- 二.畫(huà)出信號(hào)的時(shí)域波形
- 三.進(jìn)行快速傅里葉變化及數(shù)據(jù)選取
- 四.畫(huà)出頻域圖像
- 五.構(gòu)建濾波器
- 六.導(dǎo)入濾波器并得出傳遞系數(shù)
- 七.進(jìn)行濾波
- 八.畫(huà)出濾波后信號(hào)的時(shí)域、頻域圖
- 九.畫(huà)濾波圖像
- 十.導(dǎo)出濾波后的音頻文件
前言
這是之前使用MATLAB做的一個(gè)項(xiàng)目,來(lái)對(duì)語(yǔ)音信號(hào)進(jìn)行分析處理,設(shè)計(jì)語(yǔ)音信號(hào)的導(dǎo)入及播放操作,讀取信號(hào)長(zhǎng)度、畫(huà)圖及生成濾波等操作,MATLAB小白可零基礎(chǔ)上手,只要跟著教程一步一步來(lái)就可以,非常簡(jiǎn)單。
后續(xù)會(huì)上傳源碼及文件,請(qǐng)關(guān)注并收藏。
設(shè)計(jì)題目及要求
##設(shè)計(jì)題目及要求
1.設(shè)計(jì)題目:時(shí)頻域樂(lè)器信號(hào)的分析與處理
2.設(shè)計(jì)目標(biāo):對(duì)樂(lè)器不同音階信號(hào)進(jìn)行時(shí)頻域分析和處理的基本方法
3.設(shè)計(jì)要求
(1)分別錄制鋼琴、吉他、口琴等樂(lè)器在不同音階的聲音文件,并將文件導(dǎo)入Matlab中;
(2)分別分析各樂(lè)器(兩種或兩種以上)的不同音階聲音的頻譜,繪制其頻譜圖,分析聲音信號(hào)的頻譜;
(3)設(shè)計(jì)相應(yīng)的濾波器,剔除聲音信號(hào)的高頻諧波,并分析濾波信號(hào)的頻譜;
(4)生成濾波后的語(yǔ)音文件,分析聽(tīng)覺(jué)效果。
詳細(xì)步驟
##下面開(kāi)始詳細(xì)教程
一.創(chuàng)建腳本,導(dǎo)入音頻文件并播放
1.在MATLAB中創(chuàng)建一個(gè)新腳本并保存
2.選擇音頻文件導(dǎo)入MATLAB中并播放
(1)首先要注意的是MATLAB處理的音頻信號(hào)為波形文件,.wav格式,所以不能直接導(dǎo)入.mp3等格式,改格式直接修改后綴名即可;
(2)注意一定要將要處理的音頻文件放到運(yùn)行目錄下;
(3)接下來(lái)在腳本中導(dǎo)入音頻文件
這里用到的函數(shù)是audioread,這個(gè)一般是通用的,任何版本都可以用。函數(shù)中需要寫(xiě)出要導(dǎo)入的音頻文件,注意文件名稱(chēng)中不能有中文!
audioread函數(shù)為采集音頻信號(hào)數(shù)據(jù),采樣值將放在向量MU中,fs為表示采樣頻率。
MU和fs可根據(jù)喜好修改為其他名字。
(4)在MATLAB中該播放音頻
這里只需要一個(gè)函數(shù)即可,無(wú)需過(guò)多解釋。
二.畫(huà)出信號(hào)的時(shí)域波形
plot(MU); //直接畫(huà)出數(shù)組MU的圖形,即為時(shí)域圖title('初始信號(hào)波形'); //設(shè)置圖像的標(biāo)題xlable('時(shí)間'); //設(shè)置圖像X軸名稱(chēng)ylable('幅度'); //設(shè)置圖像Y軸名稱(chēng)grid //在圖中添加網(wǎng)格線(xiàn),增加可讀性##注意:
這里僅僅為作時(shí)域圖的方法,在建立整個(gè)項(xiàng)目時(shí)還需要考慮美觀(guān)性等因素,一般來(lái)說(shuō)需要
建立一個(gè)專(zhuān)門(mén)的圖形界面,完整整合代碼將會(huì)放在后面。
三.進(jìn)行快速傅里葉變化及數(shù)據(jù)選取
1.計(jì)算信號(hào)長(zhǎng)度
n=length(MU);2.快速傅里葉變化
MU1=fft(MU,n);數(shù)據(jù)MU傅里葉變化后的數(shù)據(jù)將儲(chǔ)存到MU1中
3.選取一半數(shù)據(jù)
這里要注意傅里葉變化后的數(shù)據(jù)為一個(gè)對(duì)稱(chēng)圖形,這里為了美觀(guān)性選取了其中的一般數(shù)據(jù),
這里無(wú)所謂,影響不大
四.畫(huà)出頻域圖像
plot(abs(gq1(1:len))); //畫(huà)出頻譜圖title('初始信號(hào)頻譜'); //設(shè)置標(biāo)題xlabel('頻率'); //設(shè)置X軸名稱(chēng)ylabel('幅度'); //設(shè)置Y軸名稱(chēng)grid on //添加網(wǎng)格線(xiàn)五.構(gòu)建濾波器
這里我用的是MATLAB自帶的fdatool工具來(lái)構(gòu)建的濾波器,在MATLAB中直接輸入fdatool就可以打開(kāi)這個(gè)工具。
這里有兩種濾波器可供選擇,IIR濾波器和FIR濾波器,本人使用的是IIR濾波器。
具體參數(shù)可根據(jù)自己需要進(jìn)行設(shè)置。
設(shè)置好參數(shù)后需要將濾波器模型導(dǎo)出,具體步驟如下:
File-Export
在彈出的窗口中,Export To這里選擇MAT-File,Export As這里選擇Objects
之后點(diǎn)擊下方Export,保存文件就可以到處濾波器的模型文件了,格式為.mat
六.導(dǎo)入濾波器并得出傳遞系數(shù)
load('E:\lowpass.mat'); //導(dǎo)入濾波器[b,a]=tf(Hd); //得出傳遞系數(shù)這里load函數(shù)為導(dǎo)入文件,單引號(hào)中寫(xiě)濾波器模型文件的位置,注意加上后綴,而且路徑中不
要有中文。
七.進(jìn)行濾波
x=filter(b,a,MU);這一步直接寫(xiě)即可,無(wú)需過(guò)多解釋
八.畫(huà)出濾波后信號(hào)的時(shí)域、頻域圖
這一步與畫(huà)原始信號(hào)的時(shí)域頻域圖大同小異,無(wú)非是把MU換成了x,下面直接放代碼。
##時(shí)域圖plot(x); //畫(huà)出濾波后音頻的時(shí)域圖title('濾波后信號(hào)的波形'); //設(shè)置標(biāo)題xlabel('時(shí)間'); //設(shè)置X軸單位ylabel('幅度'); //設(shè)置Y軸單位grid on //添加網(wǎng)格線(xiàn)##頻域圖n=length(x); //計(jì)算濾波后音頻數(shù)據(jù)長(zhǎng)度X1=fft(x,n); //對(duì)濾波后音頻進(jìn)行傅里葉變化len = round((length(X1))/2); //選取一半長(zhǎng)度plot(abs(X1(1:len))); //畫(huà)出濾波后音頻的頻譜圖title('濾波后信號(hào)的頻譜'); //設(shè)置標(biāo)題xlabel('頻率'); //設(shè)置X軸ylabel('幅度'); //設(shè)置Y軸grid on //添加網(wǎng)格線(xiàn)九.畫(huà)濾波圖像
這一步在構(gòu)建濾波器的時(shí)候上面就已經(jīng)顯示了,但是為了方便直接看,就加了這一步。
fvtool(Hd,'Analysis','magestimate');這也是MATLAB自帶的功能,里面的三個(gè)參數(shù),第一個(gè)是要畫(huà)的參數(shù),后面兩個(gè)是X軸和Y軸的名稱(chēng)。
十.導(dǎo)出濾波后的音頻文件
audiowrite('newpiano.wav',x,fs);單引號(hào)中為文件名,自己取即可,注意加后綴。
##以上就是全部的過(guò)程,后續(xù)會(huì)上傳全部源碼及文件
##不足之處請(qǐng)及時(shí)指出,互相學(xué)習(xí)
##文件已上傳,自行下載
https://download.csdn.net/download/weixin_44936771/12677957
總結(jié)
以上是生活随笔為你收集整理的MATLAB之时频域乐器信号的分析与处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HBase的微博案例
- 下一篇: e431装linux系统恢复,联想E43