999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

語音文件的讀取及軟件實現

2010-04-29 00:00:00肖敏雷,肖敏蓮
電腦知識與技術 2010年11期

摘要:從語音文件中正確地讀取實際的語音數據是進行語音技術研究的首要任務,WAVE文件是語音文件的一種,它被廣泛地使用于語音技術研究中。該文分析討論WAVE文件的存儲結構,用C語言實現PCM編碼的WAVE文件的讀取,濾波以及存儲。

關鍵詞: WAVE文件;存儲結構;讀取;濾波

中圖分類號:TP37 文獻標識碼:A文章編號:1009-3044(2010)11-2750-02

Reading of Voice File and Software Implementation

XIAO Min-lei, XIAO Min-lian

(Department of Computer Science and Technology, Hunan Institute of Humanities, Science and Technology, Loudi 417000, China)

Abstract: It's the first task to read the real data from a voice file correctly. WAVE file is one kind of voice files and has been applied in voice technology research widely. This paper analyzes and discusses the memory structure of WAVE file, using C language realization of PCM-coded WAVE files to read, filter and storage.

Key words: WAVE file; memory structure; read; filtering

伴隨著計算機技術、軟件技術和儲存技術突飛猛進的發展,語音技術對計算機發展和社會生活的重要性日益顯示出來,它正在直接與辦公、旅游、通信等行業的語音咨詢與管理、工業控制、電話、電信系統的自動撥號、輔助控制與查詢等各種實際應用領域相接軌。因此研究語音技術有著重要的社會意義和經濟意義。WAVE文件是語音文件的一種,它廣泛地使用于語音技術研究中,當用其進行語音技術研究時,首先必須正確地提取語音文件的實際數據。

WAVE文件是語音文件中的一種,它被廣泛地使用在語音技術研究中,當用其進行語音技術研究時,必須正確提取語音文件中的實際數據,在MATLAB中有一個自帶函數可以返回實際語音數據,如使用其它語言進行程序開發時,就必須清楚WAVE語音文件的格式及其在計算機中的存儲結構,才能正確地讀取實際數據,本文先分析討論了WAVE文件的存儲結構,然后說明如何使用Visual c++ 6.0實現WAVE文件讀取及濾波等操作。

1 WAV文件

1.1WAVE文件的存儲結構[1]

WAVE文件作為多媒體中使用的聲波文件格式之一,它是以RIFF格式為標準的。RIFF是英文Resource Interchange File Format的縮寫,WAVE文件由文件頭和數據體兩大部分組成。其中文件頭又分為RIFF/WAV文件標識段和聲音數據格式說明段兩部分。

常見的聲音文件主要有兩種,分別對應于單聲道(11.025KHz采樣率、8Bit的采樣值)和雙聲道(44.1KHz采樣率、16Bit的采樣值)。采樣率是指:聲音信號在“模→數”轉換過程中單位時間內采樣的次數。采樣值是指每一次采樣周期內聲音模擬信號的積分值。對于單聲道聲音文件,采樣數據為8位的短整數(short int 00H-FFH);而對于雙聲道立體聲聲音文件,每次采樣數據為一個16位的整數(int),高8位和低8位分別代表左右兩個聲道。WAVE文件數據塊包含以脈沖編碼調制(PCM)格式表示的樣本。WAVE文件是由樣本組織而成的。在單聲道WAVE文件中,聲道0代表左聲道,聲道1代表右聲道。在多聲道WAVE文件中,樣本是交替出現的。表1為其中一種WAVE文件格式。

1.2 WAVE文件讀取程序實現

typedef struct

{WORD wFormatag;//編碼格式

WORD nChannls; //聲道數,單聲道為1,雙聲道為2;

DWORD nSamplesPerSec;//采樣頻率;

DWORD nAvgBytesperSec;//每秒的數據量;

WORD nBlockAlign; //塊對齊;

}WAVEFORMAT;

BYTE * GetData(Cstring *pString) //獲取聲音文件數據的函數,pString參數指向要打開的聲音文件;

{if (pString==NULL)

return NULL;

HMMIO file1;//定義HMMIO文件句柄;

file1=mmioOpen((LPSTR)pString,NULL,MMIO_READWRITE);//以讀寫模式打開

if(file1==NULL)

{MessageBox(\"WAVE文件打開失敗!\");

return NULL;}

char style[4];巧//定義一個四字節的數據,用來存放文件的類型

mmioSeek(file1,8,SEEK_SET);//定位到WAVE文件的類型位置

mmioRead(file1,style,4);

if(style[0]!='W'||style[1]!='A'||style[2]!='V'||style[3]!='E')

//判斷該文件是否為\"WAVE\"文件格式

{MessageBox(\"該文件不是WAVE格式的文件!\");

return NULL;}

PCMWAVEFORMAT format; //定義PCMWAVEFORMAT結構對象,用來判斷WAVE文件格式;

mmioSeek(file1,20,SEEK_SET);

//對打開的文件進行定位,指向WAVE文件的PCMWAVEFORMAT結構的數據;

mmioRead(file1,(char*)format,sizeof(PCMWAVEFORMAT));//獲取該結構的數據;

if(format.wf.nChannels!=2)//判斷是否是立體聲聲音;

{MessageBox(\"該聲音文件不是雙通道立體聲文件\");

return NULL;}

mmioSeek(file1,24+sizeof(PCMWAVEFORMAT),SEEK_SET);

//獲取WAVE文件的聲音數據的大小;

long size;

mmioRead(file1,(char*)size,4);

BYTE *pData;

pData=(BYTE*)new char[size]; //根據數據的大小申請緩沖區;

mmioSeek(file1,28+sizeof(PCMWAVEFORMAT),SEEK_SET); //對文件重新定位;

mmioRead(file1,(char*)pData,size);//讀取聲音數據;

mmioClose(file1, MMIO_FHOPEN); //關閉WAVE文件;

return pData; }

2 WAVE文件濾波

2.1 濾波算法[2]

語音濾波的最終效果度量是人耳的主觀感覺,所以在語音濾波中可以利用人耳感覺特性來減少運算的代價,利用自適應濾波器可以獲得令人滿意的解。

自適應橫向濾波器具有以下功能:

1) 按照某種自適應算法自動調節濾波系數的橫向濾波器:分別以W1(n)…Wn(n)表示各個濾波器所在時刻的權系數。

2) 調節這些系數的過程:首先自動調節濾波器系數的自適應訓練步驟,然后利用濾波系數加權延遲線抽頭上的信號來產生輸出信號,將輸出信號與期望信號進行對比,所得誤差值通過一定的自適應控制算法再來調整權值,以保證濾波器處在最佳狀態,達到實現濾波目的。

令 W(n)=[W1(n), W2(n),…, Wm(n)], x(n)=[x(n),x(n-1),…,x(n-m+1)]T

則輸出信號:y(n)=WT(n)x(n) (1)

誤差序列:e(n)=d(n)-y(n) (2)

其中d(n)為期望信號。顯然,自適應濾波器控制機理是用誤差序列e(n)按照某種準則和自適應算法對其系數{Wi(n)},=1,2,3,…m進行調節,最終使自適應濾波器的目標函數最小化達到最佳濾波狀態。按照均方誤差(MSE)準則定義:

ζ(n)=E[e2(n)](3)

將e(n)=d(n)-y(n)帶入上式,均方誤差函數重寫為:

ξ(n)=E[d2(n)]-2E[d(n)wT(n)x(n)]+E[wT(n)x(n)xT(n)w(n)] (4)

當濾波器系數固定時,均方誤差函數又可寫成:

ξ(n)=E[d2(n)]-2WTP+WTRW(5)

其中:R=E[X(n)XT(n)]是輸入信號的自相關矩陣;P=E[d(n)X(n)]是期望信號與輸入信號的互相關矢量;將上式對W求導,并令其等于零,同時假設R是非奇異的,由此可得最佳濾波系數W0為:W0=R-1P (6)

由式可見,均方誤差ξ(n)是權矢量{Wj(n)},i =1,2,…,M的二次函數它代表以{w,(n)},i =1,2,…,M為自變量的一個“超拋物面”,均方誤差ξ(n)達到最小值ξmin。幾何上這相當于超拋物面的最小點。在一般情況下,濾波器在迭代過程中或當輸入過程統計特性發生變化時,權矢量W并不正好等于W。,而是處于某一最佳值W(n)上。為了減小誤差,一個顯然的方法是找出該工作點處使均方誤差ξ(n)減小速率最大的方向,亦即梯度的負方向,然后令權矢量w(n)沿著梯度的負方向修正。令▽(n)代表n時刻的M×I維梯度矢量,則權矢量W(n+1)可用下列簡單遞歸關系計算:

W(n+1)=W(n)+1/2*u[-▽(n)](7)

式中,u是一個正實數,通常稱它為自適應收斂系數或步長因子。

根據梯度矢量定義,▽(n)可寫成:

(8)

可計算出濾波系數更新值:

W(n+1)=W(n)+u[P-RW(n)] (9)

上式是最陡下降法的數學公式,由此公式信號流程圖圖2。

2.2 最陡下降算法計算步驟

算法計算步驟如下:

1) 根據所處理信號的特征,選取濾波器的階數M及收斂因子u。

2) 令W(0)=0,W(0)表示一維數為M,各分量為0的向量。

3) for(k = M ; k<= N; k++)

X=[x(k),…,x(k-M+1)]T

y(k)=W(k)*X

e(k)=x(k)-y(k)

W(k+1)=W(k)+2*u*e(k)*X

3 結束語

本文分析討論WAVE文件的存儲結構以及其樣本數據的存儲結構,用C語言實現PCM編碼的WAVE文件的讀取,濾波以及存儲,得到了正確的結果。

參考文獻:

[1] WAV波形文件的結構及其應用實踐[J].微計算機信息,2005,21(8):114-119.

[2] 張賢達,保錚.通信信號處理[M].北京:國防工業出版社,2002:258-270.

主站蜘蛛池模板: 久无码久无码av无码| 久久久久无码国产精品不卡| 精品国产香蕉在线播出| 久久无码高潮喷水| 手机精品视频在线观看免费| 一区二区欧美日韩高清免费| 东京热一区二区三区无码视频| 无码高潮喷水专区久久| 亚洲美女一区二区三区| 九九热免费在线视频| 她的性爱视频| 久久免费精品琪琪| 国产精品尹人在线观看| 国产日韩欧美在线视频免费观看| 18禁色诱爆乳网站| 制服丝袜 91视频| 国产精品无码制服丝袜| 亚洲日本精品一区二区| 中文字幕va| 亚洲精品大秀视频| 亚洲婷婷丁香| 最新国语自产精品视频在| 美女视频黄频a免费高清不卡| 国产女人在线| 99re在线观看视频| h视频在线观看网站| 在线播放91| h视频在线播放| 国内精品九九久久久精品| 成人年鲁鲁在线观看视频| 囯产av无码片毛片一级| 欧美第二区| 国产在线欧美| 色哟哟精品无码网站在线播放视频| 国产精品成人一区二区| 久久香蕉国产线看精品| 国产麻豆91网在线看| 国产AV毛片| 亚洲AV无码精品无码久久蜜桃| 久久福利片| 欧美成人免费午夜全| 国内精自视频品线一二区| 91精品人妻一区二区| 人妻精品全国免费视频| 国产福利在线观看精品| 欧美色视频日本| 亚洲第一成年网| 91福利一区二区三区| 2021国产在线视频| 久久这里只有精品66| 国产熟睡乱子伦视频网站| 亚洲色图另类| 亚洲清纯自偷自拍另类专区| 九色在线观看视频| 日本免费福利视频| 欧美一级夜夜爽www| jizz国产在线| 亚洲AⅤ无码日韩AV无码网站| 国产一区二区三区精品欧美日韩| 亚洲天堂色色人体| 国产精品19p| 日韩天堂视频| 99热国产在线精品99| 在线观看网站国产| 久久精品人妻中文视频| 精品国产99久久| 久久综合亚洲色一区二区三区| 国产精品手机视频一区二区| 亚洲人在线| 国产一级裸网站| 国产黄色视频综合| 日韩专区欧美| 91美女视频在线| 国产精品久久久久久久久久久久| 欧美黄网站免费观看| 国产久操视频| 国产亚洲高清视频| 亚洲人妖在线| 午夜毛片免费看| 亚洲成年人网| 91小视频版在线观看www| 伊伊人成亚洲综合人网7777|