यह फिर से मेरे खर्राटे डिटेक्टर है।
मैंने एक संकेत का पता लगाने में बहुत अच्छा प्राप्त किया है जब वहाँ कुछ भी होता है - एक दीवार-छीलने वाले खर्राटे से श्वास को ट्रैक कर सकते हैं जिसे आप रिकॉर्डिंग में भी नहीं सुन सकते हैं। समस्या यह है कि मैं यह नहीं बता सकता कि सिग्नल का पता लगाने योग्य स्तर से नीचे चला गया है और ऐप केवल "सुनवाई की चीजें" है। और, दुर्भाग्यवश, खर्राटे / सांस लेना अक्सर अनियमित होता है कि एक साधारण ऑटोक्रॉलेशन या इसी तरह की अंतराल समय योजना बहुत मदद करने की संभावना नहीं है। (और यह वास्तव में संभावना है कि कुछ मामलों में शोर श्वास से अधिक नियमित है।)
तो, क्या कोई संकेत है जो मुझे पता लगाने के लिए गायब है जब कोई संकेत नहीं है? यह इस तरह का लगता है कि मैं यहाँ एक कठिन जगह के खिलाफ हूं, जिसे देखते हुए "सिग्नल" इतना शोर-शराबा है, जिसे शुरू करना है।
(और शायद यह मेरे पास होने वाली एक और समस्या से संबंधित है: अजीब तरह से, जब मैं बहुत जोर से सही ढंग से (या लगभग भी) सिग्नल स्तर को माप नहीं सकता हूं। चूंकि मुझे सिग्नल का पता लगाने के लिए रोलिंग औसत और अनुपात का उपयोग करने की आवश्यकता है। स्तर की जानकारी की तरह खो जाता है। मैं इसे फिर से संगठित करने के लिए कुछ तरकीबों की तलाश कर रहा हूं।)
मूल तकनीक
(योदा के लिए)
ऑडियो सिग्नल का नमूना (आमतौर पर 8000Hz पर, विभिन्न कारणों से) लिया जाता है, फिर 1024 ब्लॉक में FFTed किया जाता है। (मेरे प्रयोगों में हैमिंग फिल्टर और ओवरलैपिंग ब्लॉक का बहुत कम प्रभाव पड़ता है, हालांकि बाद में इन्हें फिर से देखा जा सकता है।)
एफएफटी को "बैंड" (वर्तमान में 5, आकार में थोड़ा तिरछा कम अंत पर अधिक विस्तार देने के लिए) और "वर्णक्रमीय अंतर" और प्रत्येक बैंड के स्तर को विभाजित किया गया है। शिखर-सीमित मूल्यों के दीर्घकालिक औसत का उपयोग "थ्रेसहोल्ड" के रूप में किया जाता है, और आगे के बायस समायोजन का उपयोग लगभग 20% "ओवर थ्रेशोल्ड" दर को बनाए रखने के लिए किया जाता है।
प्रत्येक "ओवर थ्रेशोल्ड" मूल्य को 1 का वजन दिया जाता है (थ्रेशोल्ड का वजन 0 दिया जाता है), लेकिन फिर उस वजन को बैंड में स्पष्ट "परिवर्तनशीलता" (लगभग 2 हर्ट्ज पर) द्वारा समायोजित किया जाता है, ताकि बैंड को अधिक वजन दिया जा सके कि अधिक स्पष्ट संकेत ले।
बैंड के वज़न को सारांशित किया जाता है और फिर बाद के ब्लॉकों के सममित वज़न को एक "रन" स्कोर बनाने के लिए लगभग एक सेकंड में अभिव्यक्त किया जाता है। खर्राटों की शुरुआत / ऑफसेट का पता लगाने के लिए यह फिर से एक औसत औसत सीमा (प्लस कई उत्तराधिकारियों) की तुलना में है।
अपडेट करें
यह अचानक मेरे साथ हुआ है कि अगर मेरा एल्गोरिथ्म प्रभावी रूप से एक निरंतर-स्तरीय सिग्नल (मेरी सिग्नल स्तर की समस्या के अनुसार) को बनाए रखता है, तो एसएनआर को प्रभावी ढंग से गेज करने का तरीका शोर को मापने का है जब कोई संकेत नहीं है।
आसानी से, खर्राटे रुक-रुक कर होते हैं, जिसमें बहुत सारी "मृत हवा" होती है। और मैं पहले से ही खर्राटों के लिफाफे का पता लगा रहा हूं। तो लिफाफे के बाहर कुछ भी (एक खर्राटे के अंत और अगले की शुरुआत के बीच) संभवतया शोर है! यह मैं (सटीकता / दोहराव के कुछ मामूली डिग्री के साथ) उपाय कर सकता हूं। (यह एक आधे सभ्य सभ्य एल्गोरिथ्म के साथ आने की कोशिश करता है, निश्चित रूप से - वास्तविकता कभी भी सिद्धांत से मेल नहीं खाती है।)
इसलिए मेरे पास अभी तक पूर्ण उत्तर नहीं है, लेकिन मैंने प्रगति की है।
(जबकि उपरोक्त तकनीक मुझे एसएनआर के लिए काफी अच्छा प्रॉक्सी देती है, मुझे अभी भी वास्तविक सिग्नल स्तर का अनुमान लगाने में परेशानी हो रही है। मेरे "सापेक्ष स्तर" के संकेत एक बमुश्किल श्रव्य सांस के लिए पैमाने पर हो सकते हैं और एक खिड़की के खड़खड़ के लिए इतने पर। मुझे पूर्ण स्तर के लिए किसी प्रकार की प्रॉक्सी की आवश्यकता है।)