日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab与音频处理

發布時間:2025/5/22 循环神经网络 151 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab与音频处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MATLAB?與 音頻處理 相關內容摘記

MATLAB?與 音頻處理 相關內容摘記?1

MATLAB?音頻相關函數?1

MATLAB?處理音頻信號的流程?2

音量標準化?2

聲道分離合并與組合?3

數字濾波?3

數據轉換?5

基于MATLAB?的數字濾波實驗?6

MATLAB?音頻相關函數

聲音數據輸入輸出函數:

可以方便地讀寫auway文件,并可控制其中的位及頻率。

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

程序運行結果如圖?1?所示 由圖可知 濾波對波形影響不大

但對高頻有較大衰減 試聽會感覺到處理后的聲音比較沉悶

數據轉換

數據轉換是指改變音頻格式中的采樣頻率或量化位數 轉換原理是 先用矩陣插值或抽取技術實現變量變換 如果是抽取數據還需在變換前作濾波處理使之滿足采樣定理 變量變換完成后再用Wavwrite?函數重新定義量化位數和采樣頻率即可實現數據轉換 數據轉換過程中 要注意采樣頻率與原始采樣頻率及插值或抽取系數的關系?MATLAB?實現插值或抽取的函數有?decimate ,interp?resample

這里以?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?所示 由圖可知在滿足采樣定律條件下 實現數據抽取 在原采樣率下波形變密頻譜變寬且幅度減半 但在新采樣率下波形和頻譜都很好 通過試聽輸出文件還可感受處理效果

基于MATLAB?的數字濾波實驗

總結

以上是生活随笔為你收集整理的matlab与音频处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。