यह पता लगाने का सबसे सरल तरीका है कि ऑडियो लिफाफे कहां शुरू और बंद होते हैं


43

नीचे एक संकेत है जो किसी बात कर रहे व्यक्ति की रिकॉर्डिंग का प्रतिनिधित्व करता है। मैं इसके आधार पर छोटे श्रव्य संकेतों की एक श्रृंखला बनाना चाहूंगा। 'महत्वपूर्ण' ध्वनि शुरू होने और समाप्त होने का पता लगाने के लिए विचार किया जा रहा है और मार्करों के लिए ऑडियो का नया स्निपेट बनाने के लिए उपयोग किया जाता है। दूसरे शब्दों में, मैं मौन को संकेतक के रूप में उपयोग करना चाहूंगा जब एक ऑडियो 'चंक' शुरू हो गया हो या बंद हो गया हो और इसके आधार पर नए ऑडियो बफ़र्स बनाए।

उदाहरण के लिए, यदि कोई व्यक्ति खुद को रिकॉर्ड करता है

Hi [some silence] My name is Bob [some silence] How are you?

तब मैं इसमें से तीन ऑडियो क्लिप बनाना चाहूंगा। एक वह कहता है Hi, एक जो कहता है My name is Bobऔर एक कहता है How are you?

मेरा प्रारंभिक विचार ऑडियो बफर के माध्यम से लगातार जांच करना है जहां कम आयाम वाले क्षेत्र हैं। शायद मैं पहले दस नमूनों को ले कर ऐसा कर सकता था, मूल्यों को औसत कर सकता हूं और यदि परिणाम कम है तो इसे चुपचाप लेबल करें। मैं अगले दस नमूनों की जांच करके बफर को आगे बढ़ाऊंगा। इस तरह से बढ़ते हुए मैं यह पता लगा सकता था कि लिफाफे कहाँ से शुरू होते हैं और रुकते हैं।

अगर किसी के पास अच्छे, लेकिन सरल तरीके से ऐसा करने की सलाह है, तो यह बहुत अच्छा होगा। मेरे उद्देश्यों के लिए समाधान काफी अल्पविकसित हो सकता है।

मैं डीएसपी में समर्थक नहीं हूं, लेकिन कुछ बुनियादी अवधारणाओं को समझता हूं। इसके अलावा, मैं यह प्रोग्रामेटिक रूप से कर रहा हूं इसलिए एल्गोरिदम और डिजिटल नमूनों के बारे में बात करना सबसे अच्छा होगा।

पूरी सहायताके लिए शुक्रिया!

यहाँ छवि विवरण दर्ज करें


EDIT 1

अब तक की शानदार प्रतिक्रियाएँ! बस यह स्पष्ट करना चाहता था कि यह लाइव ऑडियो पर नहीं है और मैं स्वयं एल्गोरिदम को सी या ऑब्जेक्टिव-सी में लिखूंगा, इसलिए पुस्तकालयों का उपयोग करने वाले कोई भी समाधान वास्तव में एक विकल्प नहीं हैं।


1
ऐसा लगता है जैसे आप ब्रेक पॉइंट्स के रूप में मौन की अवधि का उपयोग करके इसे तोड़ने की कोशिश कर रहे हैं। केवल "चुप्पी" निर्धारित करने के लिए पावर थ्रेशहोल्डिंग का उपयोग क्यों न करें, और यह निर्धारित करने के लिए थ्रेशोल्ड समय है कि क्या यह एक ब्रेक का गठन करने के लिए पर्याप्त है?
जिम क्ले

@JimClay हां, यह वही है जो मैं करने की कोशिश कर रहा हूं। मैंने पावर थ्रेशहोल्ड के बारे में कभी नहीं सुना है, लेकिन यह ऐसा लगता है जैसे मैं उपयोग कर सकता हूं। क्या यह जटिल है? क्या आप उस पर थोड़ा विस्तार कर सकते हैं?
एरिक ब्रेटो

@ EricBrotto शायद आपको हमें थोड़ा बताना चाहिए कि आपके पुस्तकालयों में क्या क्षमताएं हैं। यह हमें बेहतर तरीके से आपके लिए वास्तविक कार्यप्रणाली की मालिश करने की अनुमति देगा।
स्पेसी

मौन का पता लगाने के लिए यह दृष्टिकोण बेहतर है ?? 0.05 x = wavread ('s1.wav') के अलावा अन्य स्तर क्या होना चाहिए; i = 1; एब्स (x (i)) <0.05% साइलेंस डिटेक्शन i = i + 1; अंत x (1: i) = []; x (6000: 10000) = 0;
zeee

जवाबों:


26

यह भाषण का पता लगाने की क्लासिक समस्या है । पहली बात यह है कि Google की अवधारणा होगी। यह डिजिटल संचार में व्यापक रूप से उपयोग किया जाता है और इस विषय पर बहुत सारे शोध किए गए हैं और वहाँ से अच्छे पेपर हैं।

आम तौर पर, अधिक पृष्ठभूमि के शोर से आपको अपने भाषण का पता लगाने की विधि के बारे में अधिक विस्तृत जानकारी प्राप्त करनी होगी। यदि आप एक शांत कमरे में ली गई रिकॉर्डिंग का उपयोग कर रहे हैं, तो आप इसे बहुत आसानी से (अधिक बाद में) कर सकते हैं। यदि आपके पास हर तरह का शोर है, जब कोई बात कर रहा है (ट्रक गुजर रहे हैं, कुत्ते भौंक रहे हैं, प्लेटें गल रही हैं, एलियंस हमला कर रहे हैं), तो आपको कुछ अधिक चतुर उपयोग करना होगा।

आपके द्वारा संलग्न तरंग को देखते हुए, आपका शोर न्यूनतम है, इसलिए मैं निम्नलिखित सुझाव देता हूं:

  1. संकेत लिफाफा निकालें
  2. एक अच्छी दहलीज उठाओ
  3. उन स्थानों का पता लगाएं, जहां लिफाफा की ऊंचाई सीमा से अधिक है

इस सबका क्या मतलब है? एक सिग्नल का एक लिफाफा एक वक्र है जो समय के साथ इसकी परिमाण का वर्णन करता है, स्वतंत्र रूप से इसकी आवृत्ति सामग्री कैसे इसे दोलन बनाती है (छवि देखें)।

यहाँ छवि विवरण दर्ज करें

{1,45,6,2,43,2}{1,45,6,2,43,2} प्रयोगात्मक रूप से पाया जा सकता है और कई चीजों पर निर्भर कर सकता है जैसे कि आपका नमूना दर।

आप उस छवि से देख सकते हैं जो आपके पास बहुत अधिक शोर मौजूद नहीं है, आपका सिग्नल लिफाफा हमेशा एक निश्चित सीमा (लाउडनेस स्तर) से ऊपर होगा, और आप उन क्षेत्रों पर विचार कर सकते हैं जैसे कि भाषण का पता लगाने वाले क्षेत्र।


3
मैं वास्तव में good'ol winamp में प्लग-इन में से एक के रूप में इसे लागू किया था। आप जो वर्णन कर रहे हैं वह अच्छा है लेकिन पर्याप्त नहीं है। आमतौर पर आवाज़ वाली आवाज़ें (स्वर) और बिना आवाज़ वाली आवाज़ें (कॉन्सन्ट्रेटर्स) होती हैं। यदि केवल आवाज़ की आवाज़ें थीं, तो आप जो वर्णन कर रहे हैं वह काम करेगा - लेकिन बिना आवाज़ वाली ध्वनि बहुत कम ऊर्जा है और वे सामान्य शोर से बिल्कुल अलग नहीं हैं। और स्टूडियो में भी शोर की स्थिति बहुत दुर्लभ नहीं है।
दीपन मेहता

अजगर में इसे कैसे प्राप्त करें?
krazzy आर

26

जो आप वास्तव में करना चाहते हैं उसे अनिवार्य रूप से वॉयस एक्टिविटी डिटेक्शन या स्पीच डिटेक्शन कहा जाता है ।

मूल रूप से किसी भी शुद्ध भाषण संकेत (जिसमें कोई संगीत नहीं है) के तीन भाग होते हैं।

  1. स्वरयुक्त ध्वनि - जो मूल रूप से स्वरों के कारण होती है
  2. बिना आवाज़ वाली ध्वनि - जिसमें व्यंजन होते हैं।

मानव ध्वनि की विशेषता ऐसी है कि ध्वनि में बहुत अधिक ऊर्जा का उपयोग किया जाता है जबकि वास्तविक जानकारी व्यंजन में निहित होती है। इसके अलावा, आवाज़ वाली ध्वनि आमतौर पर कम आवृत्ति होती है, जहां बिना आवाज़ के उच्च आवृत्ति होती है। [सटीक होने के लिए सभी ध्वनित ध्वनि को किसी दिए गए व्यक्ति के लिए निरंतर या कम आवृत्ति प्रतिध्वनित किया जाता है जो कि उसकी पिच है]।

अब, किसी भी प्रणाली के रूप में शोर है। आवाज की गई ध्वनि आमतौर पर काफी शक्तिशाली होती है जिससे इसे स्पष्ट रूप से देखा जा सकता है। जब आप एक कम आवृत्ति फ़िल्टरिंग लागू करते हैं तो आवाज़ों की अच्छी मात्रा को इकट्ठा करना संभव है, हालांकि, बिना आवाज़ वाली ध्वनि (सभी समृद्ध जानकारी के साथ) खो जाएगी।

यह कैसे हल करने के लिए सवाल आ रहा है:

यह चाल इस तथ्य में निहित है कि अभी भी ध्वनि नहीं गूंजती स्रोत से आती है; और एक निश्चित आवृत्ति पर स्वाभाविक रूप से प्रतिबंधित है। जहां जैसा है, शोर बल्कि एक समान है। तो एक साधारण उपाय जो तीनों को अलग करता है, वह है "स्थानीय शक्ति" या वैकल्पिक रूप से, लेकिन खिड़की के ऑटो-सहसंबंध को लेना बराबर है।

यदि आप एक समय में 100 नमूने कहते हैं - और ऑटो स्वयं को सहसंबंधित करते हैं, अगर इसमें केवल शोर होता है, तो परिणाम बहुत अधिक शून्य होंगे (यह सफेद शोर की संपत्ति है) जहां भाषण संकेत के लिए, यह परिमाण देखने योग्य होगा क्योंकि संकेत अभी भी बेहतर संरचना है। इसने मेरे लिए अतीत में काम किया है।

VAD एक सक्रिय अनुसंधान क्षेत्र रहा है- क्योंकि लगभग सभी मोबाइल फोन संचार गैर वाक् भाग का पता लगाना चाहते हैं और उन्हें एन्कोडिंग से हटा सकते हैं। लेकिन अगर वे गैर-आवाज़ वाले भाषण को हटा देंगे, तो यह टेलीफोनी को बेकार कर देगा।

G.729 मानक VAD की गणना करता है जैसे कि लाइन वर्णक्रमीय आवृत्तियों, पूर्ण-बैंड ऊर्जा, कम-बैंड ऊर्जा (<1 kHz) और शून्य-क्रॉसिंग दर।

जीएसएम मानक निम्नानुसार काम करता है: विकल्प 1 नौ बैंडों में एसएनआर की गणना करता है और इन मूल्यों पर एक सीमा लागू करता है। विकल्प 2 विभिन्न मापदंडों की गणना करता है: चैनल पावर, वॉइस मेट्रिक्स और शोर पावर। इसके बाद थ्रेसहोल्ड का उपयोग करके वॉयस मेट्रिक्स को थ्रेसहोल्ड किया जाता है जो अनुमानित एसएनआर के अनुसार बदलता रहता है। (विकिपीडिया से)

अधिक उन्नत तकनीकों के लिए मैं इस विषय पर कुछ संदर्भ सूचीबद्ध कर रहा हूं।

  1. सबसे अधिक उद्धृत संदर्भ: जोंगसेओ सोहन; नाम सूं किम; वेनॉन्ग सुंग; "एक सांख्यिकीय मॉडल आधारित आवाज गतिविधि का पता लगाने" सिग्नल प्रोसेसिंग पत्र, आईईईई, जनवरी 1999, वॉल्यूम: 6 अंक: 1 पीपी: 1-3

  2. आपके लिए सबसे अधिक प्रासंगिक: मार्क मार्ज़िनज़िक और बिगर कोल्लमियर "स्पीच पोज़ डिटेक्शन फॉर नॉइज़ स्पेक्ट्रम एट्रिमेशन बाय ट्रैकिंग पावर एनवेल्ड डायनेमिक्स" IEEE ट्रांज़ेक्शंस ऑन स्पीच एंड ऑडियो प्रोसेसिंग, वीओएल। १०, सं। 2, फरवरी 2002 pp.109

  3. रामिरेज़, जे।; जेएम गौरीज़, जेसी सेगुरा (2007)। "वॉयस एक्टिविटी डिटेक्शन। फंडामेंटल्स एंड स्पीच रिकॉग्निशन सिस्टम रोबस्टनेस"। एम। ग्रिम और के। क्रुशेल में। मजबूत भाषण मान्यता और समझ। पीपी। 1-22। आईएसबीएन 978-3-902613-08-0।

  4. परिचयात्मक: जोनाथन कोला, कैरोल एस्पी-विल्सन और तरुण प्रूथी "वॉयस एक्टिविटी डिटेक्शन"


अजगर में इसे कैसे प्राप्त करें?
krazzy आर

9

मैं उनके दृष्टिकोण पर जिम क्ले को पूरी तरह से छोड़ दूंगा, लेकिन लिफाफे के उपयोग से स्वाद में थोड़ा बदलाव आएगा:

हम जानते हैं कि भाषण मुख्य रूप से 1-2kHz के आसपास होता है। आपका डेटा नमूनाकरण 44kHz होने की संभावना है (यह आपके रिकॉर्डिंग डिवाइस पर निर्भर करता है)। इसलिए मैं पहले जो करूंगा वह 10 अंकों के पार वास्तविक समय में स्क्वेर्ड सिग्नल का मूविंग एवरेज है, सिग्नल पावर का एक लिफाफा होना चाहिए। यह पता लगाने में देरी को प्रेरित करेगा, इसलिए आप इसे कम रखना चाहते हैं।

फिर, मैं आपके सिस्टम पर एक अंशांकन चरण जोड़ूंगा: उपयोगकर्ता को चुप रहने के लिए कहें, एक बटन दबाएं, और पृष्ठभूमि के शोर को 10 सेकंड के लिए कहने दें। लिफाफे के माध्य या मध्य आयाम को लें, सुरक्षा के लिए 2 से गुणा करें, और इससे आपको थ्रेशोल्ड जिम के बारे में, स्वचालित रूप से बात हो रही है।

यदि यह वास्तविक समय की रिकॉर्डिंग नहीं है, तो आप देरी के कारण होने वाली झुंझलाहट को कम करने के लिए 0-चरण मूविंग औसत का उपयोग करने के लिए उपयोगी हो सकते हैं। हमें बताएं कि क्या यह आपके लिए काम करता है।


9

एरिक,

यदि आप कुछ जल्दी और गंदे के बाद सही मायने में हैं, तो आपको जो पहली चीज मिलनी है, वह लिफाफा है, और मैं इसे बस (MATLAB में) करूंगा:

 envelope = abs(hilbert(yourSignal));

यदि आप एक निश्चित सीमा से ऊपर हैं, तो उस समय, मैं बस दहलीज और 'आवाज़ मौजूद है'।

यह एक बहुत ही सरल समाधान btw है, लेकिन यह आपके लिए काम कर सकता है।


1
+1। शायद आप कोड की इस पंक्ति के पीछे की विधि के बारे में विस्तार से बता सकते हैं? मुझे यकीन है कि ओपी हिल्बर्ट ट्रांसफॉर्म के माध्यम से लिफाफा निष्कर्षण से परिचित नहीं है।
फोनन

@ मोहम्मद धन्यवाद! लेकिन कृपया मेरे EDIT 1 देखें। मैं निश्चित रूप से त्वरित और गंदे को पसंद करूंगा, लेकिन खुद को एल्गोरिदम भी करने की आवश्यकता है :)
एरिक ब्रेटो

@EricBrotto आह ठीक है, ठीक है, मैं आपको बता सकता हूं कि एक हिल्बर्ट ट्रांसफार्मर को कैसे लागू किया जाए, लेकिन मैं मान रहा हूं कि आपके सी / ओबज-सी पुस्तकालयों में एफएफटी करने की क्षमता है? यदि ऐसा नहीं है कि एक समस्या होने जा रही है ... :-)
Spacey

अजगर में इसे कैसे प्राप्त करें?
krazzy आर

दयालु सर / मैम क्या आप मुझे इस बात की ओर संकेत कर सकते हैं कि पायथन में इस हिल्बर्ट को कैसे लागू किया जाएगा?
kRazzy R

6

मैं यह मानता हूं कि आप वास्तविक के साथ काम कर रहे हैं, न कि जटिल संकेतों से- यदि ऐसा नहीं है, तो मुझे बताएं और मैं उत्तर में संशोधन कर सकता हूं।

पावर को सिग्नल के वर्ग के रूप में परिभाषित किया गया है (यानी सिग्नल के नमूने खुद से गुणा किए जाते हैं)। आप यह निर्धारित करने के लिए कुछ थ्रेसहोल्ड की शक्ति की तुलना कर सकते हैं कि क्या भाषण मौजूद है या नहीं। संभवतः आपको अपनी रिकॉर्डिंग पर कुछ माप करने की आवश्यकता होगी ताकि आप एक अच्छी सीमा का अनुभव कर सकें।

यदि आपकी रिकॉर्डिंग "साफ" (यानी ज्यादा शोर नहीं) है, तो मैं संभवत: तात्कालिक शक्ति (यानी एक एकल नमूना) की दहलीज से तुलना करके जितना संभव हो उतना सरल होगा। इसका मतलब यह है कि अगर आप नहीं चाहते हैं, तो आपको इसे वर्गाकार भी नहीं करना है, आपको बस निरपेक्ष मूल्य की जरूरत है और इसे पावर थ्रेशोल्ड के वर्गमूल से तुलना करना चाहिए, जो कि पूर्वव्यापी हो सकता है। जब आप भाषण का पता लगा लेते हैं और उससे पहले कुछ मात्रा में रिकॉर्डिंग कर लेते हैं, तो यह सुनिश्चित करने के लिए कि आप सभी भाषण प्राप्त करते हैं (शायद 1/10 सेकंड का दूसरा?)। तब तक चलते रहें, जब तक कि आप लंबे समय तक बिना नमूनों के लंबे समय तक न पाएं। फिर से, अवधि की लंबाई अनुभवजन्य रूप से निर्धारित करने की आवश्यकता होगी।

धोये और दोहराएं।


4

मैंने जावा में एक एक्टिविटी डिटेक्टर क्लास लिखा है। यह मेरे ओपन-सोर्स जावा डीएसपी संग्रह का हिस्सा है । आप परीक्षण कार्यक्रम WavSplitter.java का उपयोग इनपुट के रूप में WAV फ़ाइल के साथ जांचने के लिए कर सकते हैं।


ओपी को ध्यान में रखते हुए, विशेष रूप से कहते हैं कि उन्हें एल्गोरिदम को सी में खुद लिखने की आवश्यकता है
सैम मैलोनी

इस तरह के एल्गोरिदम को जावा से सी में परिवर्तित करना बहुत आसान है
क्रिश्चियन डी'ह्योर्यूज

सर, इसे अजगर में कैसे हासिल किया जाए?
kRazzy R
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.