MATLAB代做  | MATLAB代寫  | MATLAB有償編程
首 頁
當前位置:MATLAB代做|MATLAB代寫|MATLAB有償編程matlab源碼信號處理
基于MATLAB的音頻信號處理技術實現源碼程序        [↓跳到下載地址]
官方主頁:源碼共享網站:www.kggbzb.tw

聯系方式:客服QQ:1747812398 買代碼源碼軟件站,歡迎咨詢

運行環境:Win9X/2000/XP/2003/

源碼語言:簡體中文

源碼類型:源碼程序 - 信號處理

推薦星級:

更新時間:2015-05-03 13:57:03

源碼簡介

1 引言
  
  MATLAB是美國Math Works公司推出的一種面向工程和科學計算的交互式計算軟件。它以矩陣運算為基礎,把計算、可視化、程序設計融合在一個簡單易用的交互式工作環境中,是一款數據分析和處理功能都非常強大的工程實用軟件。本文介紹了用MATLAB處理音頻信號的基本流程,并以實例形式列出了常用音頻處理技術實現程序。
  
  2 MATLAB處理音頻信號的流程
  
  分析和處理音頻信號,首先要對聲音信號進行采集,MATLAB 的數據采集工具箱提供了一整套命令和函數,通過調用這些函數和命令,可直接控制聲卡進行數據采集[1]。Windows自帶的錄音機程序也可驅動聲卡來采集語音信號,并能保存為WAV格式文件,供MATLAB相關函數直接讀取、寫入或播放。本文以WAV格式音頻信號作為分析處理的輸入數據,用MATLAB處理音頻信號的基本流程是:先將WAV格式音頻信號經wavread 函數轉換成MATLAB列數組變量;再用MATLAB強大的運算能力進行數據分析和處理,如時域分析、頻域分析、數字濾波、信號合成、信號變換、識別和增強等等;處理后的數據如是音頻數據,則可用wavwrite轉換成WAV格式文件或用sound、wavplay等函數直接回放。下面分別介紹MATLAB在音量標準化、聲道分離合并與組合、數字濾波、數據轉換等音頻信號處理方面的技術實現。
  
  3 音量標準化
  
  錄制聲音過程中需對聲音電平進行量化處理,最理想的量化是最大電平對應最高量化比特,但實際卻很難做到,常有音輕問題。利用MATLAB很容易實現音量標準化,即最大電平對應最高量化比特。基本步驟是:先用wavread函數將WAV文件轉換成列數組變量;再求出數組變量的極值并對所有元素作歸一化處理;最后用wavwrite函數還原成音量標準化的WAV文件。
  例1:現以微軟自帶的“Windows XP 關機.wav”音頻信號為例,先將其復制另存到文件名為XPexit.wav的MATLAB當前目錄中,再通過音量標準化處理后保存為XPquit.wav文件。實現程序如下:
  clear; close all; clc;
  [Y,FS,NBITS]=wavread('XPexit.WAV');% 將WAV文件轉換成變量

FS,NBITS,% 顯示采樣頻率和量化比特
  Ym=max(max(max(Y)),max(abs(min(Y)))),% 找出雙聲道極值
  X=Y/Ym;% 歸一化處理
  wavwrite(X,FS,NBITS,'XPquit.wav')% 將變量轉換成WAV文件
  試聽可知標準化處理后音量稍大。
  
  4 聲道分離合并與組合
  
  立體聲或雙聲道音頻信號有左右兩個聲道,利用MATLAB實現雙聲道分離、兩路聲道合并和兩個單聲道組合成一個雙聲道等效果,實際上是利用了MATLAB的矩陣抽取、矩陣相加和矩陣重組運算。
  例2:現以例1生成的XPquit.wav為例,實現分離、合并和組合處理的程序如下:
  clear; close all; clc;
  [x,FS,NBITS]=wavread('XPquit.WAV');% 將WAV文件轉換成變量
  x1=x(:,1);% 抽取第1聲道
  x2=x(:,2);% 抽取第2聲道
  wavwrite(x1,FS,NBITS,'XPquit1.WAV');% 實現1聲道分離
  wavwrite(x2,FS,NBITS,'XPquit2.WAV');% 實現2聲道分離
  %如果合并位置不對前面補0 %聲道長度不對后面補0
  x12=x1+x2;% 兩路單聲道列向量矩陣變量合并
  x12m=max(max(x12),abs(min(x12))),% 找出極值
  y12=x12./x12m;% 歸一化處理
  wavwrite(y12,FS,NBITS,'XPquit12.WAV');% 實現兩路聲道合并
  %如果組合位置不對前面補0--聲道長度不對后面補0
  x3=[x1,x2];% 兩路單聲道變量組合
  wavwrite(x3,FS,NBITS,'XPquit3.WAV');% 實現兩路聲道組合
  可以試聽聲道分離、合并與組合的效果,也可對各文件大小進行比較。
  
  5 數字濾波
  
  數字濾波是常用的音頻處理技術。可根據技術指標,先利用FDATool工具,設計一個數字濾波器[2],再用Filter或Filter2函數即可實現濾波處理。調用的Filter函數格式是:Y = filte (B,A,X) 。其中,B和A是濾波器傳輸函數的分子和分母系數,X是輸入變量,Y是實現濾波后的輸出變量。如果處理立體聲音頻信號,可分開處理,但用FIR濾波器時調用Filter2函數更方便。
  例3:現以例2生成的XPquit12.wav為例,實現數字濾波的程序如下:
  clear; close all; clc;
  [X,FS,NBITS]=wavread('XPquit12.WAV');% 將WAV文件轉換成變量
  %利用FDATool設計一個LowpassButterworth濾波器
  %指標FS=22050Hz Fp=1000Hz Ap=1dB Fs=3000Hz As=20dB
  B =[0.0062,0.0187,0.0187,0.0062];% 分子系數
  

 未安裝PDF瀏覽器用戶請先下載安裝
原版頁碼:1211,1212,1213原版全文
  A =[1,-2.1706,1.6517,-0.4312];% 分母系數
  Y=filter(B,A,X);% 實現數字濾波
  t=(0:length(X)-1)/FS;% 計算數據時刻
  subplot(2,2,1);plot(t,X);% 繪制原波形圖
  title('原信號波形圖');% 加標題
  subplot(2,2,3);plot(t,Y);% 繪制濾波波形圖
  title('濾波后波形圖');% 加標題
  xf=fft(X);% 作傅里葉變換求原頻譜
  yf=fft(Y);% 作傅里葉變換求濾波后頻譜
  fm=3000*length(xf)/FS;% 確定繪頻譜圖的上限頻率
  f=(0:fm)*FS/length(xf);% 確定繪頻譜圖的頻率刻度
  subplot(2,2,2);plot(f,abs(xf(1:length(f))));% 繪制原波形頻譜圖

title('原信號頻譜圖');% 加標題
  subplot(2,2,4);plot(f,abs(yf(1:length(f))));% 繪制濾波后頻譜圖
  title('濾波后信號頻譜圖');% 加標題
  wavwrite(Y,FS,NBITS,'XPquitFilter.WAV');% 寫成WAV文件
  程序運行結果如圖1所示。由圖可知,濾波對波形影響不大,但對高頻有較大衰減。試聽會感覺到處理后的聲音比較沉悶。
  
  6 數據轉換
  
  數據轉換是指改變音頻格式中的采樣頻率或量化位數。轉換原理是:先用矩陣插值或抽取技術實現變量變換,如果是抽取數據還需在變換前作濾波處理使之滿足采樣定理;變量變換完成后再用Wavwrite函數重新定義量化位數和采樣頻率即可實現數據轉換。數據轉換過程中,要注意采樣頻率與原始采樣頻率及插值或抽取系數的關系。MATLAB實現插值或抽取的函數有decimate、interp和resample,具體應用可參考有關文獻[3]。這果以2倍抽取為例,將例3中經過濾波后產生的XPquitFilter.WAV文件進行數據轉換處理。具體程序如下:
  clear; close all; clc;
  [x,FS,NBITS]=wavread('XPquitFilter.WAV');% 將WAV文件轉換成變量
  N=length(x);% 計算數據點數
  % 不是偶數點化成偶數點
  if mod(N,2)==0; N=N; else x(N)=[]; N=N-1; end;
  % 原信號波形頻譜分析
  tx=(0:N-1)/FS;% 計算原信號數據點時刻
  subplot(3,2,1);plot(tx,x);% 繪制原信號波形
  title('原信號波形圖');% 加標題
  xf=fft(x);% 求原信號頻譜
  fx=(0:N/2)*FS/N;% 確定頻譜圖頻率刻度
  subplot(3,2,2);plot(fx,abs(xf(1:N/2+1)));% 繪制原信號頻譜
  title('原信號頻譜圖');% 加標題
  % 實現數據抽取
  k=[1:N/2];% 確定抽取位置
  y=x(2*k);% 實現抽取后的數據
  M=length(y);% 計算抽取后數據點數
  % 抽取數據在原采樣頻率FS下的波形頻譜分析
  ty=(0:M-1)/FS;% 計算數據點時刻
  subplot(3,2,3);plot(ty,y);% 繪制信號波形圖
  title('原采樣率下新波形圖');% 加標題
  yf=fft(y);% 求頻譜
  fy=(0:M/2)*FS/M;% 確定頻譜圖頻率刻度
  subplot(3,2,4);plot(fy,abs(yf(1:M/2+1)));% 繪制頻譜圖
  title('原采樣率下新頻譜圖');% 加標題
  % 抽取數據在FS/2采樣頻率下的波形頻譜分析
  tz=(0:M-1)/(FS/2);% 計算數據點時刻
  subplot(3,2,5);plot(tz,y);% 繪制信號波形圖
  title('新采樣率下新波形圖');% 加標題
  fz=(0:M/2)*(FS/2)/M;% 確定頻譜圖頻率刻度
  subplot(3,2,6);plot(fz,abs(yf(1:M/2+1)));% 繪制頻譜圖
  title('新采樣率下新頻譜圖');% 加標題
  % 實現數據轉換
  wavwrite(y,FS/2,NBITS,'XPquit16B.WAV');% 音頻格式PCM 11025Hz 16位
  wavwrite(y,FS/2,NBITS/2,'XPquit8B.WAV');% 音頻格式PCM 11025Hz 8位
  運行程序,在得到的圖形窗口中,執行Edit/Axes Properties…命令,再把各分圖下X標簽中的Limits設為0、0.01和0、1000,得到0—0.01秒的波形和0—1000Hz的頻譜如圖2所示。由圖可知,在滿足采樣定律條件下,實現數據抽取,在原采樣率下波形變密、頻譜變寬且幅度減半,但在新采樣率下波形和頻譜都很好。通過試聽輸出文件還可感受處理效果。

7 結束語
  
  MATLAB提供了許多專用工具箱,靈活利用這些工具箱和函數,可以實現很多信號處理任務。同時,MATLAB還支持用戶對其函數進行二次開發,以滿足不同要求。在信號處理過程中,MATLAB兼顧了專用工具軟件的簡單性和計算機程序語言的靈活性,特別是處理效果的可視性和可感知,有利于理解信號處理的本質,有利于激發學習和研究興趣,也有利于培養MATLAB軟件的操作技能。


提 示:本站所有源碼只提供瀏覽,需要定制的朋友可以聯系在線客服!
注意:價格根據項目的難易程度來定價格業務咨詢

基于MATLAB的音頻信號處理技術實現源碼程序 --下載地址

注意:為避免不必要的誤會,本站項目里的源碼只公開部分需要的聯系在線客服

本站長期招聘程序代寫高手,歡迎加入華南地區matlab團隊

想創業卻沒有經驗的人

無論你是否有過網上開店的經驗,都可以隨時聯系在線客服,建立自己獨立的網站
想開網店卻不知道如何入手

淘寶創業成本低而且風險小,如果想開淘寶店的朋友可以聯系在線客服。
想兼職創業,卻不擅長交際與服務的人

在家創業月入5000元。網站程序+百套群發工具+網賺資料+域名+空間+本站終身代理資格,這樣你網賺的條件全具備了。每天3小時管理、推廣、收錢。
缺乏能快速贏利型產品的人

導入多種最新流行營銷軟件+網賺教程,讓入駐者輕松加盟、復制有效成交技巧、快速賺錢。

源碼評論評論內容只代表網友觀點,與本站立場無關!

   評論摘要(共 0 條,得分 0 分,平均 0 分) 查看完整評論

瀏覽說明

* 本站所有源碼全部公開,隨時隨地瀏覽!
* MATLAB軟件如用于商業用途,請購買正版!
* 如果您發現下載鏈接錯誤,請點擊報告錯誤謝謝!
* 站內提供的所有軟件包含破解及注冊碼均是由網上搜集,若侵犯了你的版權利益,敬請來信通知我們!
Copyright © 2008-2014 www.kggbzb.tw. All Rights Reserved.
頁面執行時間:203.12500 毫秒
安微25选5开奖号