一、enframe函數詳解
function framedSig = enframe(sig, win, inc) %ENFRAME split signal up into (overlapping) frames % Usage: framedSig = enframe(sig, win, inc) % framedSig = enframe(sig, win) % framedSig = enframe(sig) % Inputs: % sig: input signal, one dimension vector % win: window function, one dimension vector. Default is hamming window % inc: increment (in sample). Default is win/2. % Outputs: % framedSig: A matrix with framed signal. Row is the frame. % Author: Written by Gary Hu % Date: June 2002 % Modified: 19/8/2002, handle even length case carefully % 22/05/2017, change document to MATLAB help style % Reference: Chapter 5, Understanding Digital Signal Processing, % Richard G. Lyons, Prentice Hall, 2000. % ISBN 0-201-61221-9 % Tested on: MATLAB R2017a % Keyword: Overlapping segmented frame, window % default window is hamming window. if nargin < 2 || isempty(win) win = hamming(256, 'periodic'); end % default increment is half of window length if nargin < 3 || isempty(inc) inc = length(win)/2; end siglen = length(sig); % handle even length window if rem(length(win),2) == 0 win = [win;0]; end winlen = length(win); slideLen = winlen-inc; nframe = ceil(siglen/inc); % pad signal to be integer times of inc sig = [sig; zeros((nframe-1)*inc+winlen-siglen,1)]; c = 1; framedSig = zeros(nframe, winlen); for i = 1:winlen:siglen if i+winlen <= siglen framedSig(c,:) = sig(i:i+winlen-1)'; else % handle the tail of the input signal tmp = sig(siglen-winlen+1:siglen)'; framedSig(c,:) = [win(1:length(tmp)).*tmp, zeros(1,winlen-length(tmp))] ; end c = c+1; end
enframe函數的主要目的是將信號分割為許多可重疊的幀。這在一些信號處理方面,例如音頻處理、語音處理方面很有幫助。enframe函數通過傳入一個信號sig,一個窗函數win和一個幀移inc來實現信號的分幀。它返回每個幀或分段信號的矩陣,其中每行表示一個幀或分段。它默認使用具有其最大幅度值在幀內的Hamming窗口函數,但也可以使用其他窗口函數,也可以自己定義使用。
二、matlab分幀函數enframe
使用enframe函數,你可以輕鬆地將音頻信號分割成許多可重疊的幀,以供後續處理。
三、enframe函數的作用
enframe函數的主要功能是將信號分割為可重疊的幀。可以將短時信號分析為頻域上的一系列獨立的頻譜。然後,將每個頻譜分為相鄰的幀,以確定短時間內的信號屬性。這種方法用於時間-頻率分析,如短時傅里葉變換和小波變換。因此,分幀是語音識別中非常重要的預處理步驟。
四、getframe函數
在Matlab編程中,enframe函數可以與getframe函數一起使用,該函數每次從enframe函數返回的幀矩陣中獲取一幀。
五、enframe函數無法識別
enframe函數是在Matlab語音處理工具箱中定義的,但是,在沒有安裝此工具箱的情況下,請手動複製enframe函數的代碼並將其粘貼到程序中以使用。
六、enframe函數每個產量
enframe函數將信號sig分解為可重疊的窗口,並以幀為單位存儲它們。輸出是一個矩陣,其中每行代表一個幀。
七、函數forecast
enframe函數也可以與forecast函數一起使用。該函數是使用由enframe函數生成的矩陣建立模型,然後預測使用這種模型的數據。
八、enframe函數未定義
如果您無法在Matlab中找到enframe函數,則表示您尚未安裝語音處理工具箱。請從官方Matlab網站上下載並安裝。
九、enframe函數自定義怎麼寫
以下是自定義的enframe函數的例子:
function framedSignal = my_enframe(sig, win, inc) siglen = length(sig); if nargin < 2 || isempty(win) win = hamming(256, 'periodic'); end if nargin < 3 || isempty(inc) inc = length(win)/2; end if rem(length(win),2) == 0 win = [win;0]; end winlen = length(win); slideLen = winlen-inc; nframe = ceil(siglen/inc); sig = [sig; zeros((nframe-1)*inc+winlen-siglen,1)]; c = 1; framedSig = zeros(nframe, winlen); for i = 1:winlen:siglen if i+winlen <= siglen framedSig(c,:) = sig(i:i+winlen-1)'; else tmp = sig(siglen-winlen+1:siglen)'; framedSig(c,:) = [win(1:length(tmp)).*tmp, zeros(1,winlen-length(tmp))] ; end c = c+1; end end
自定義enframe函數與原始enframe函數非常相似,只是沒有對函數規模的限制。因此,在進行處理較大數據時,可能需要自定義enframe函數以改善性能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/181592.html