當前位置:編程學習大全網 - 編程語言 - matlab能夠處理的音頻格式有哪些?

matlab能夠處理的音頻格式有哪些?

matlab能夠處理的音頻格式有.wav和.au文件。

聲音數據輸入輸出函數:

可以方便地讀寫au和way文件,並可控制其中的位及頻率。

wavread()和wavwriteO。

聲音播放:

wavplay():播放wav聲音文件。當然,也可以把處理後的

wav文件保存後再用其它工具播放。

wavrecordO:可以對處理後的wav文件進行錄音。

PS:在日常生活中,我們聽到的聲音壹般都屬於復音,其聲音信號由不同的振幅與頻率的波合成而得到

MATLAB 處理音頻信號的流程

分析和處理音頻信號 首先要對聲音信號進行采集 MATLAB 的數據采集工具箱提供了壹整套命令和函數,通過調用這些函數和命令,可直接控制聲卡進行數據采集[1] Windows 自帶的錄音機程序也可驅動聲卡來采集語音信號 並能保存為 WAV 格式文件供 MATLAB 相關函數直接讀取 寫入或播放 本文以 WAV 格式音頻信號作為分析處理的輸入數據 用 MATLAB 處理音頻信號的基本流程是 先將 WAV 格式音頻信號經 wavread 函數轉換成 MATLAB 列數組變量 再用 MATLAB 強大的運算能力進行數據分析和處理 如時域分析 頻域分析 數字濾波 信號合成 信號變換 識別和增強等等 處理後的數據如是音頻數據 則可用 wavwrite 轉換成 WAV 格式文件或用 sound wavplay 等函數直接回放 下面分別介紹 MATLAB 在音量標準化 聲道分離合並與組合 數字濾波 數據轉換等音頻信號處理方面的技術實現

音量標準化

錄制聲音過程中需對聲音電平進行量化處理 最理想的量化是最大電平對應最高量化比特 但實際卻很難做到 常有音輕問題 利用 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 文件

試聽可知標準化處理後音量稍大

聲道分離合並與組合

立體聲或雙聲道音頻信號有左右兩個聲道 利用 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'); % 實現兩路聲道組合

可以試聽聲道分離 合並與組合的效果 也可對各文件大小進行比較

數字濾波

數字濾波是常用的音頻處理技術 可根據技術指標 先利用 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]; % 分子系數

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 文件

  • 上一篇:中西文化合璧可能嗎?
  • 下一篇:醫學網絡課程有那些
  • copyright 2024編程學習大全網