国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【語音識(shí)別】基于mfcc特征模板匹配算法實(shí)現(xiàn)語音識(shí)別matlab源碼含GUI

2021-08-18 08:47 作者:Matlab工程師  | 我要投稿

?在任意一個(gè)Automatic speech recognition 系統(tǒng)中,第一步就是提取特征。換句話說,我們需要把音頻信號(hào)中具有辨識(shí)性的成分提取出來,然后把其他的亂七八糟的信息扔掉,例如背景噪聲啊,情緒啊等等。

????? 搞清語音是怎么產(chǎn)生的對(duì)于我們理解語音有很大幫助。人通過聲道產(chǎn)生聲音,聲道的shape(形狀?)決定了發(fā)出怎樣的聲音。聲道的shape包括舌頭,牙齒等。如果我們可以準(zhǔn)確的知道這個(gè)形狀,那么我們就可以對(duì)產(chǎn)生的音素phoneme進(jìn)行準(zhǔn)確的描述。聲道的形狀在語音短時(shí)功率譜的包絡(luò)中顯示出來。而MFCCs就是一種準(zhǔn)確描述這個(gè)包絡(luò)的一種特征。

?????? MFCCs(Mel Frequency Cepstral Coefficents)是一種在自動(dòng)語音和說話人識(shí)別中廣泛使用的特征。它是在1980年由Davis和Mermelstein搞出來的。從那時(shí)起。在語音識(shí)別領(lǐng)域,MFCCs在人工特征方面可謂是鶴立雞群,一枝獨(dú)秀,從未被超越?。ㄖ劣谡fDeep Learning的特征學(xué)習(xí)那是后話了)。

?????? 好,到這里,我們提到了一個(gè)很重要的關(guān)鍵詞:聲道的形狀,然后知道它很重要,還知道它可以在語音短時(shí)功率譜的包絡(luò)中顯示出來。哎,那什么是功率譜?什么是包絡(luò)?什么是MFCCs?它為什么有效?如何得到?下面咱們慢慢道來。


一、聲譜圖(Spectrogram)

?????????我們處理的是語音信號(hào),那么如何去描述它很重要。因?yàn)椴煌拿枋龇绞椒庞乘煌男畔?。那怎樣的描述方式才利于我們觀測(cè),利于我們理解呢?這里我們先來了解一個(gè)叫聲譜圖的東西。

?????? 這里,這段語音被分為很多幀,每幀語音都對(duì)應(yīng)于一個(gè)頻譜(通過短時(shí)FFT計(jì)算),頻譜表示頻率與能量的關(guān)系。在實(shí)際使用中,頻譜圖有三種,即線性振幅譜、對(duì)數(shù)振幅譜、自功率譜(對(duì)數(shù)振幅譜中各譜線的振幅都作了對(duì)數(shù)計(jì)算,所以其縱坐標(biāo)的單位是dB(分貝)。這個(gè)變換的目的是使那些振幅較低的成分相對(duì)高振幅成分得以拉高,以便觀察掩蓋在低幅噪聲中的周期信號(hào))。

??

?????? 我們先將其中一幀語音的頻譜通過坐標(biāo)表示出來,如上圖左。現(xiàn)在我們將左邊的頻譜旋轉(zhuǎn)90度。得到中間的圖。然后把這些幅度映射到一個(gè)灰度級(jí)表示(也可以理解為將連續(xù)的幅度量化為256個(gè)量化值?),0表示黑,255表示白色。幅度值越大,相應(yīng)的區(qū)域越黑。這樣就得到了最右邊的圖。那為什么要這樣呢?為的是增加時(shí)間這個(gè)維度,這樣就可以顯示一段語音而不是一幀語音的頻譜,而且可以直觀的看到靜態(tài)和動(dòng)態(tài)的信息。優(yōu)點(diǎn)稍后呈上。

?????????這樣我們會(huì)得到一個(gè)隨著時(shí)間變化的頻譜圖,這個(gè)就是描述語音信號(hào)的spectrogram聲譜圖。

????? 下圖是一段語音的聲譜圖,很黑的地方就是頻譜圖中的峰值(共振峰formants)。

????? 那我們?yōu)槭裁匆诼曌V圖中表示語音呢?

????? 首先,音素(Phones)的屬性可以更好的在這里面觀察出來。另外,通過觀察共振峰和它們的轉(zhuǎn)變可以更好的識(shí)別聲音。隱馬爾科夫模型(Hidden Markov Models)就是隱含地對(duì)聲譜圖進(jìn)行建模以達(dá)到好的識(shí)別性能。還有一個(gè)作用就是它可以直觀的評(píng)估TTS系統(tǒng)(text to speech)的好壞,直接對(duì)比合成的語音和自然的語音聲譜圖的匹配度即可。

  通過對(duì)語音進(jìn)行分幀進(jìn)行時(shí)頻變換,得到每一幀的FFT頻譜再將各幀頻譜按照時(shí)間順序排列起來,得到時(shí)間-頻率-能量分布圖。很直觀的表現(xiàn)出語音信號(hào)隨時(shí)間的頻率中心的變化。



二、倒譜分析(Cepstrum Analysis)

?????? 下面是一個(gè)語音的頻譜圖。峰值就表示語音的主要頻率成分,我們把這些峰值稱為共振峰(formants),而共振峰就是攜帶了聲音的辨識(shí)屬性(就是個(gè)人身份證一樣)。所以它特別重要。用它就可以識(shí)別不同的聲音。

??????? 既然它那么重要,那我們就是需要把它提取出來!我們要提取的不僅僅是共振峰的位置,還得提取它們轉(zhuǎn)變的過程。所以我們提取的是頻譜的包絡(luò)(Spectral Envelope)。這包絡(luò)就是一條連接這些共振峰點(diǎn)的平滑曲線。

????? 我們可以這么理解,將原始的頻譜由兩部分組成:包絡(luò)和頻譜的細(xì)節(jié)。這里用到的是對(duì)數(shù)頻譜,所以單位是dB。那現(xiàn)在我們需要把這兩部分分離開,這樣我們就可以得到包絡(luò)了。

????? 那怎么把他們分離開呢?也就是,怎么在給定log X[k]的基礎(chǔ)上,求得log H[k]?和?log E[k]以滿足log X[k] = log H[k] + log E[k]呢?

????? 為了達(dá)到這個(gè)目標(biāo),我們需要Play a Mathematical Trick。這個(gè)Trick是什么呢?就是對(duì)頻譜做FFT。在頻譜上做傅里葉變換就相當(dāng)于逆傅里葉變換Inverse FFT (IFFT)。需要注意的一點(diǎn)是,我們是在頻譜的對(duì)數(shù)域上面處理的,這也屬于Trick的一部分。這時(shí)候,在對(duì)數(shù)頻譜上面做IFFT就相當(dāng)于在一個(gè)偽頻率(pseudo-frequency)坐標(biāo)軸上面描述信號(hào)。

?????????由上面這個(gè)圖我們可以看到,包絡(luò)是主要是低頻成分(這時(shí)候需要轉(zhuǎn)變思維,這時(shí)候的橫軸就不要看成是頻率了,咱們可以看成時(shí)間),我們把它看成是一個(gè)每秒4個(gè)周期的正弦信號(hào)。這樣我們?cè)趥巫鴺?biāo)軸上面的4Hz的地方給它一個(gè)峰值。而頻譜的細(xì)節(jié)部分主要是高頻。我們把它看成是一個(gè)每秒100個(gè)周期的正弦信號(hào)。這樣我們?cè)趥巫鴺?biāo)軸上面的100Hz的地方給它一個(gè)峰值。

?????????把它倆疊加起來就是原來的頻譜信號(hào)了。

????? 在實(shí)際中咱們已經(jīng)知道log X[k],所以我們可以得到了x[k]。那么由圖可以知道,h[k]是x[k]的低頻部分,那么我們將x[k]通過一個(gè)低通濾波器就可以得到h[k]了!沒錯(cuò),到這里咱們就可以將它們分離開了,得到了我們想要的h[k],也就是頻譜的包絡(luò)。

???????x[k]實(shí)際上就是倒譜Cepstrum(這個(gè)是一個(gè)新造出來的詞,把頻譜的單詞spectrum的前面四個(gè)字母順序倒過來就是倒譜的單詞了)。而我們所關(guān)心的h[k]就是倒譜的低頻部分。h[k]描述了頻譜的包絡(luò),它在語音識(shí)別中被廣泛用于描述特征。

????? 那現(xiàn)在總結(jié)下倒譜分析,它實(shí)際上是這樣一個(gè)過程:

1)將原語音信號(hào)經(jīng)過傅里葉變換得到頻譜:X[k]=H[k]E[k];

  只考慮幅度就是:|X[k] |=|H[k]||E[k] |;

2)我們?cè)趦蛇吶?duì)數(shù):log||X[k] ||= log ||H[k] ||+ log ||E[k] ||。

3)再在兩邊取逆傅里葉變換得到:x[k]=h[k]+e[k]。

?????? 這實(shí)際上有個(gè)專業(yè)的名字叫做同態(tài)信號(hào)處理。它的目的是將非線性問題轉(zhuǎn)化為線性問題的處理方法。對(duì)應(yīng)上面,原來的語音信號(hào)實(shí)際上是一個(gè)卷性信號(hào)(聲道相當(dāng)于一個(gè)線性時(shí)不變系統(tǒng),聲音的產(chǎn)生可以理解為一個(gè)激勵(lì)通過這個(gè)系統(tǒng)),第一步通過卷積將其變成了乘性信號(hào)(時(shí)域的卷積相當(dāng)于頻域的乘積)。第二步通過取對(duì)數(shù)將乘性信號(hào)轉(zhuǎn)化為加性信號(hào),第三步進(jìn)行逆變換,使其恢復(fù)為卷性信號(hào)。這時(shí)候,雖然前后均是時(shí)域序列,但它們所處的離散時(shí)域顯然不同,所以后者稱為倒譜頻域。

????? 總結(jié)下,倒譜(cepstrum)就是一種信號(hào)的傅里葉變換經(jīng)對(duì)數(shù)運(yùn)算后再進(jìn)行傅里葉反變換得到的譜。它的計(jì)算過程如下:

以下部分還未整理?



三、Mel頻率分析(Mel-Frequency Analysis)?

?????????好了,到這里,我們先看看我們剛才做了什么?給我們一段語音,我們可以得到了它的頻譜包絡(luò)(連接所有共振峰值點(diǎn)的平滑曲線)了。但是,對(duì)于人類聽覺感知的實(shí)驗(yàn)表明,人類聽覺的感知只聚焦在某些特定的區(qū)域,而不是整個(gè)頻譜包絡(luò)。

?????????而Mel頻率分析就是基于人類聽覺感知實(shí)驗(yàn)的。實(shí)驗(yàn)觀測(cè)發(fā)現(xiàn)人耳就像一個(gè)濾波器組一樣,它只關(guān)注某些特定的頻率分量(人的聽覺對(duì)頻率是有選擇性的)。也就說,它只讓某些頻率的信號(hào)通過,而壓根就直接無視它不想感知的某些頻率信號(hào)。但是這些濾波器在頻率坐標(biāo)軸上卻不是統(tǒng)一分布的,在低頻區(qū)域有很多的濾波器,他們分布比較密集,但在高頻區(qū)域,濾波器的數(shù)目就變得比較少,分布很稀疏。

???????人的聽覺系統(tǒng)是一個(gè)特殊的非線性系統(tǒng),它響應(yīng)不同頻率信號(hào)的靈敏度是不同的。在語音特征的提取上,人類聽覺系統(tǒng)做得非常好,它不僅能提取出語義信息,?而且能提取出說話人的個(gè)人特征,這些都是現(xiàn)有的語音識(shí)別系統(tǒng)所望塵莫及的。如果在語音識(shí)別系統(tǒng)中能模擬人類聽覺感知處理特點(diǎn),就有可能提高語音的識(shí)別率。

??????? 梅爾頻率倒譜系數(shù)(Mel Frequency Cepstrum Coefficient, MFCC)考慮到了人類的聽覺特征,先將線性頻譜映射到基于聽覺感知的Mel非線性頻譜中,然后轉(zhuǎn)換到倒譜上。

??????? 將普通頻率轉(zhuǎn)化到Mel頻率的公式是:
?


????? 由下圖可以看到,它可以將不統(tǒng)一的頻率轉(zhuǎn)化為統(tǒng)一的頻率,也就是統(tǒng)一的濾波器組。

??????在Mel頻域內(nèi),人對(duì)音調(diào)的感知度為線性關(guān)系。舉例來說,如果兩段語音的Mel頻率相差兩倍,則人耳聽起來兩者的音調(diào)也相差兩倍。


四、Mel頻率倒譜系數(shù)(Mel-Frequency Cepstral Coefficients)?

?????? 我們將頻譜通過一組Mel濾波器就得到Mel頻譜。公式表述就是:log X[k] = log (Mel-Spectrum)。這時(shí)候我們?cè)趌og X[k]上進(jìn)行倒譜分析:

1)取對(duì)數(shù):log X[k] = log H[k] + log E[k]。

2)進(jìn)行逆變換:x[k] = h[k] + e[k]。

??????在Mel頻譜上面獲得的倒譜系數(shù)h[k]就稱為Mel頻率倒譜系數(shù),簡(jiǎn)稱MFCC。

?????????現(xiàn)在咱們來總結(jié)下提取MFCC特征的過程:(具體的數(shù)學(xué)過程網(wǎng)上太多了,這里就不想貼了)

1)先對(duì)語音進(jìn)行預(yù)加重、分幀和加窗;(加強(qiáng)語音信號(hào)性能(信噪比,處理精度等)的一些預(yù)處理)

2)對(duì)每一個(gè)短時(shí)分析窗,通過FFT得到對(duì)應(yīng)的頻譜;(獲得分布在時(shí)間軸上不同時(shí)間窗內(nèi)的頻譜)

3)將上面的頻譜通過Mel濾波器組得到Mel頻譜;(通過Mel頻譜,將線形的自然頻譜轉(zhuǎn)換為體現(xiàn)人類聽覺特性的Mel頻譜)

4)在Mel頻譜上面進(jìn)行倒譜分析(取對(duì)數(shù),做逆變換,實(shí)際逆變換一般是通過DCT離散余弦變換來實(shí)現(xiàn),取DCT后的第2個(gè)到第13個(gè)系數(shù)作為MFCC系數(shù)),獲得Mel頻率倒譜系數(shù)MFCC,這個(gè)MFCC就是這幀語音的特征;(倒譜分析,獲得MFCC作為語音特征)

?????? 這時(shí)候,語音就可以通過一系列的倒譜向量來描述了,每個(gè)向量就是每幀的MFCC特征向量。

???? 這樣就可以通過這些倒譜向量對(duì)語音分類器進(jìn)行訓(xùn)練和識(shí)別了。


五、參考文獻(xiàn)

[1]這里面還有一個(gè)比較好的教程:

http://practicalcryptography.com/miscellaneous/machine-learning/guide-mel-frequency-cepstral-coefficients-mfccs/

[2]本文主要參考:cmu的教程:

?http://www.speech.cs.cmu.edu/15-492/slides/03_mfcc.pdf

[3] C library for computing Mel Frequency Cepstral Coefficients (MFCC)

function varargout = GUI(varargin) % GUI MATLAB code for GUI.fig % ? ? ?GUI, by itself, creates a new GUI or raises the existing % ? ? ?singleton*. % % ? ? ?H = GUI returns the handle to a new GUI or the handle to % ? ? ?the existing singleton*. % % ? ? ?GUI('CALLBACK',hObject,eventData,handles,...) calls the local % ? ? ?function named CALLBACK in GUI.M with the given input arguments. % % ? ? ?GUI('Property','Value',...) creates a new GUI or raises the % ? ? ?existing singleton*. ?Starting from the left, property value pairs are % ? ? ?applied to the GUI before GUI_OpeningFcn gets called. ?An % ? ? ?unrecognized property name or invalid value makes property application % ? ? ?stop. ?All inputs are passed to GUI_OpeningFcn via varargin. % % ? ? ?*See GUI Options on GUIDE's Tools menu. ?Choose "GUI allows only one % ? ? ?instance to run (singleton)". % % See also: GUIDE, GUIDATA, GUIHANDLES ? % Edit the above text to modify the response to help GUI % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', ? ? ? mfilename, ... ? ? ? ? ? ? ? ? ? 'gui_Singleton', ?gui_Singleton, ... ? ? ? ? ? ? ? ? ? 'gui_OpeningFcn', @GUI_OpeningFcn, ... ? ? ? ? ? ? ? ? ? 'gui_OutputFcn', ?@GUI_OutputFcn, ... ? ? ? ? ? ? ? ? ? 'gui_LayoutFcn', ?[] , ... ? ? ? ? ? ? ? ? ? 'gui_Callback', ? []); if nargin && ischar(varargin{1}) ? ?gui_State.gui_Callback = str2func(varargin{1}); end if nargout ? ?[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else ? ?gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before GUI is made visible. function GUI_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject ? ?handle to figure % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % varargin ? command line arguments to GUI (see VARARGIN) % Choose default command line output for GUI handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes GUI wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = GUI_OutputFcn(hObject, eventdata, handles) % varargout ?cell array for returning output args (see VARARGOUT); % hObject ? ?handle to figure % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) %% 載入語音庫 % 數(shù)據(jù)庫路徑 dirName = './wav/Database'; dirName = uigetdir(dirName); if isequal(dirName, 0) ? ?return; end handles.dirName = dirName; guidata(hObject, handles); set(handles.text1,'string','語音庫選擇完畢!') % hObject ? ?handle to pushbutton1 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) %% 提取特征參數(shù) if isequal(handles.dirName, 0) ? ?msgbox('請(qǐng)選擇音頻庫目錄', '提示信息', 'modal'); ? ?return; end S = GetDatabase(handles.dirName); handles.S = S; guidata(hObject, handles); set(handles.text1,'string','特征參數(shù)提取完畢!') % hObject ? ?handle to pushbutton2 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) %% 選擇測(cè)試文件 file = './wav/Test/1.wav'; [Filename, Pathname] = uigetfile('*.wav', '打開新的語音文件',... ? ?file); if Filename == 0 ? ?return; end fileurl = fullfile(Pathname,Filename); [signal, fs] = audioread(fileurl); plot(signal); title('待識(shí)別語音信號(hào)', 'FontWeight', 'Bold'); handles.fileurl = fileurl; handles.signal = signal; handles.fs = fs; guidata(hObject, handles); %% 播放測(cè)試文件 if isequal(handles.fileurl, 0) ? ?msgbox('請(qǐng)選擇音頻文件', '提示信息', 'modal'); ? ?return; end sound(handles.signal, handles.fs); set(handles.text1,'string','選擇語音完畢!') % hObject ? ?handle to pushbutton3 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hobject, eventdata, handles) %% 識(shí)別 set(handles.text1,'string','識(shí)別中。。。') pause(3) if isequal(handles.fileurl, 0) ? ?msgbox('請(qǐng)選擇音頻文件', '提示信息', 'modal'); ? ?return; end %if isequal(handles.S, 0) % ? msgbox('請(qǐng)計(jì)算音頻庫MFCC特征', '提示信息', 'modal'); ?% ?return; %end S = handles.S; [num, MC] = Reco(S, handles.fileurl); result = S(num).name; result = result(1:2); set(handles.edit1,'string',result); %判斷垃圾的種類 if strcmp(result,'廢紙')||strcmp(result,'瓶子')||strcmp(result,'塑料')||strcmp(result,'毛毯')||strcmp(result,'剪刀')||strcmp(result,'床單')||strcmp(result,'罐頭')||strcmp(result,'紙盒')||strcmp(result,'紙箱')||strcmp(result,'塑料')||strcmp(result,'鏡子')||strcmp(result,'酒瓶') ? ?set(handles.edit2,'string','可循環(huán)利用垃圾') elseif strcmp(result,'剩菜')||strcmp(result,'果皮')||strcmp(result,'剩飯')||strcmp(result,'菜葉')||strcmp(result,'果殼')||strcmp(result,'骨頭')||strcmp(result,'貝殼')||strcmp(result,'羽毛')||strcmp(result,'魚鱗')||strcmp(result,'果核')||strcmp(result,'菜梗') ? ?set(handles.edit2,'string','廚余垃圾') elseif strcmp(result,'電池')||strcmp(result,'燈管')||strcmp(result,'電池')||strcmp(result,'藥品')||strcmp(result,'化妝品')||strcmp(result,'殺蟲劑')||strcmp(result,'膠片')||strcmp(result,'農(nóng)藥')||strcmp(result,'相紙')||strcmp(result,'油漆')||strcmp(result,'礦物油') ? ?set(handles.edit2,'string','有害垃圾') else ? ?set(handles.edit2,'string','其他垃圾') ? ? end % hObject ? ?handle to pushbutton4 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, handles) clc close % hObject ? ?handle to pushbutton5 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) function edit1_Callback(hObject, eventdata, handles) % hObject ? ?handle to edit1 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % ? ? ? ?str2double(get(hObject,'String')) returns contents of edit1 as a double % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject ? ?handle to edit1 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % ? ? ? See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) ? ?set(hObject,'BackgroundColor','white'); end function edit2_Callback(hObject, eventdata, handles) % hObject ? ?handle to edit2 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit2 as text % ? ? ? ?str2double(get(hObject,'String')) returns contents of edit2 as a double % --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) % hObject ? ?handle to edit2 (see GCBO) % eventdata ?reserved - to be defined in a future version of MATLAB % handles ? ?empty - handles not created until after all CreateFcns called % Hint: edit controls usually have a white background on Windows. % ? ? ? See ISPC and COMPUTER. if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) ? ?set(hObject,'BackgroundColor','white'); end


【語音識(shí)別】基于mfcc特征模板匹配算法實(shí)現(xiàn)語音識(shí)別matlab源碼含GUI的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
锦屏县| 屏南县| 漾濞| 高唐县| 黑山县| 西乌珠穆沁旗| 乌恰县| 长丰县| 澄迈县| 阳谷县| 梁河县| 通山县| 烟台市| 平安县| 成都市| 临洮县| 平罗县| 昭觉县| 会昌县| 阳原县| 灯塔市| 穆棱市| 三明市| 神农架林区| 洛浦县| 泸水县| 肥东县| 麻阳| 息烽县| 扬州市| 綦江县| 牟定县| 通许县| 勃利县| 太康县| 靖安县| 沧源| 丹寨县| 廊坊市| 泾源县| 金平|