您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用matlab MFCC+GMM的安全事件聲學檢測系統,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
公共安全問題是社會安全穩定所聚焦的話題之一。近年來,檢測技術與監控自動化正深刻地改變著人們的生活。尤其在安防領域,閉路電視CCTV(Closed Circuit Television)、視頻流分析、智能監控等新技術得到了廣泛應用,大大提高了安防監控的管理效率。然而值得注意的是,基于視頻流的監控手段不可避免地也具有一定的先天性缺漏,例如存在視野盲區、易受光照影響等問題,對于事件檢測,還可能存在語義不明的問題,監控手段不夠全面。純視頻手段在槍擊、爆炸、暴恐襲擊、人群恐慌等具有較強語義性的突發公共安全事件中,往往不如聲學檢測分析手段敏感和有效。聲學事件檢測主要是使用一些聲學處理方法,刻畫現場音頻流的聲學特征,再結合適當的分類器進行檢測分類,從而實現對音頻流中出現的聲學事件進行檢測分析。基于聲學的公共安全事件檢測在反恐、維穩、社會治安等多個領域具有廣泛的使用價值和應用前景。本課題重點針對槍擊與爆炸兩類突發公共安全事件,對相應的聲學檢測方法進行了研究。
對于槍聲的研究聚焦在對于膛口波和彈道波的研究分析上。吳松林等深基于彈丸的空氣動力學模型,深入分析了彈道激波的成因和理論波形;蔣灝等分析了小口徑武器發射的膛口波和彈道激波,并設計了基于膛口激波的DOA模型對彈丸彈道軌跡進行估計;盧慧洋分析了彈道波和膛口波在槍聲檢測與定位中的作用,并設計了一套基于正三角形麥克風陣列的槍聲定位與測距軟硬件系統。
對于聲信號處理和聲學特征的研究,趙力等給出了常用的信號加窗成幀、端點檢測以及常用聲學特征的計算方法;韓紀慶等對聲學事件檢測技術與常用模型做了綜述性介紹。徐大為等對比了基于不同聲信號特征的端點檢測方法,并分析了他們對噪聲的抵制能力和運算實時性。
針對槍聲的信號處理與聲學事件檢測研究中,蔣小為和張文等[7]通過低通濾波和譜減法針對膛口波進行去噪處理,在實驗中得到了與理論波形高度相近的膛口波信號波形,如圖1.22所示,并提出可以使用相關分析進行槍聲檢測。張克剛等人研究了基于短時能量分析對槍聲信號進行端點檢測的方法,并提出使用持續時間處理來剔除瞬時大能量噪聲。張濤、張文、朱強強等人的研究中指出,可以采用MFCC作為目標片段的特征,用于進一步給分類器進行分類檢測。
對于聲學事件檢測的分類器,Clavel等討論了監控環境中的槍聲檢測,并通過PCA選擇13維特征作為GMM模型的輸入特征;劉力維等提出使用10階中值濾波處理端點檢測中的能量序列,并用GMM對目標片段的按MFCC特征進行分類;朱強強分析了Logo、FFS、Adaboost三種特征選擇算法,用特征選擇算法對時域特征、頻域特征、感知域特征、基于自相關函數的特征等共計9個特征組成的特征全集進行特征選擇,并最后輸入到GMM中進行分類;Pimentel等人提出了通過分析聚類過程中的WSS指標來確定聚類算法中聚類中心數目的方法。
關于聲學事件數據庫,Fonseca等人所在的龐培法布拉大學(Universitat Pompeu Fabra, Barcelona)音樂技術研究小組為了解決目前數據驅動型(data-driven)聲學計算研究所遇到的瓶頸和困難,發起了Freesound Datasets項目,并建立了一個基于眾包(crowdsourcing)、規模宏大、音頻種類較齊全的大型公開數據庫Freesound;坦佩雷理工大學(Tampere University of Technology,TUT)信號處理學系Mesaro等人發起了事件檢測挑戰TUT Sound Events Challenge與聲學場景檢測挑戰Acoustic Scene Classification Challenge,加速了基于聲學的事件檢測和場景分析的相關研究。
for ii = 1:24 % 7 8 wav分別為背景聲和背景+槍聲,21-24是爆炸聲 if 8 < ii && ii < 21 continue; end % 取信號 file_name = strcat('gun',num2str(ii)); file_name = strcat(file_name,'.wav'); fprintf('reading %s...\n',file_name); [y,fs] = audioread(file_name); sz = size(y); gun = (y(:,1))'; % 單聲道 % 原信號 figure(ii); p2 = abs(fft(gun)/length(gun)); % size(gun) % size(1:length(gun)/2+1) gun_fft = p2(1:length(gun)/2+1); gun_fft(2:end-1) = 2*gun_fft(2:end-1); f = fs*(0:(length(gun)/2))/length(gun); subplot(3,2,1);plot(gun);xlabel('t / s');title('signal'); subplot(3,2,2);plot(f,gun_fft);title('spectrum');xlabel('frequency / Hz'); % 短時能量分析 N = 300; % 窗寬(張克剛) inc = 100; % 幀移(張克剛) win = hamming(N); % frameout: num x N % t: num x 1, centers of frames % energy: 1 x num [frameout,t,energy]=enframe(y,win,inc); t = t'; % 自適應短時能量閾值分割 %size(energy) threshold = min(energy)+0.2*(max(energy)-min(energy)); processed_energy = energy; for i = 1:length(energy) processed_energy(i) = 0; if energy(i) >= threshold processed_energy(i) = 1; end %fprintf('%d: %f > %f = %d\n',ii,energy(i),threshold,processed_energy(i)); end subplot(3,2,3); plot(energy,'b');title('energy'); hold on;plot(threshold*ones(size(energy)),'g'); subplot(3,2,5); plot(processed_energy);title('binarized energy') % 持續時間分析 thr = 30; % 持續采樣點 cnt = 0; for i = 1:length(processed_energy) if processed_energy(i) == 1 if cnt > 0 cnt = cnt+1; %計數器累加 elseif cnt == 0 cnt = 1; %初始化計數器 end if i == length(processed_energy) && cnt < thr processed_energy((i-cnt):i) = 0; end elseif processed_energy(i) == 0 if cnt > 0 if cnt < thr processed_energy((i-cnt):i) = 0; end end cnt = 0; end %fprintf('%f, %f\n',i,processed_energy(i)); end subplot(3,2,3);hold on;plot(processed_energy*max(energy),'r');hold off; subplot(3,2,5);hold on;plot(processed_energy,'r');hold off; end function [f,t,eng,zcr]=enframe(x,win,inc) %ENFRAME split signal up into (overlapping) frames: one per row. [F,T]=(X,WIN,INC) % % F = ENFRAME(X,LEN) splits the vector X(:) up into % frames. Each frame is of length LEN and occupies % one row of the output matrix. The last few frames of X % will be ignored if its length is not divisible by LEN. % It is an error if X is shorter than LEN. % % F = ENFRAME(X,LEN,INC) has frames beginning at increments of INC % The centre of frame I is X((I-1)*INC+(LEN+1)/2) for I=1,2,... % The number of frames is fix((length(X)-LEN+INC)/INC) % % F = ENFRAME(X,WINDOW) or ENFRAME(X,WINDOW,INC) multiplies % each frame by WINDOW(:) % % The second output argument, T, gives the time in samples at the centre % of each frame. T=i corresponds to the time of sample X(i). % nx=length(x); nwin=length(win); if (nwin == 1) len = win; else len = nwin; end if (nargin < 3) inc = len; end len = nwin; nf = fix((nx-len+inc)/inc); f=zeros(nf,len); indf= inc*(0:(nf-1)).'; inds = (1:len); f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); if (nwin > 1) w = win(:)'; f = f .* w(ones(nf,1),:); end t = floor((1+len)/2)+indf; %fprintf('size of f\n'); szf = size(f); % ff = f(:).*f(:); for i = 1:szf(1) %ff = f(i,:).*f(i,:) % ff = abs(f(i,:)); % eng(i) = sum(ff); eng(i) = 0; zcr(i) = 0; for j = 1:szf(2) eng(i) = eng(i)+abs(f(i,j)); if j+1 <= szf(2) zcr(i) = zcr(i)+abs(sign(f(i,j+1))-sign(f(i,j))); end end zcr(i) = 0.5*zcr(i); end
看完了這篇文章,相信你對“如何使用matlab MFCC+GMM的安全事件聲學檢測系統”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。