मैं चोटियों को सीमित करने के लिए एक ऑडियो तरंग को प्रभावी ढंग से संपीड़ित करने के लिए एक सूत्र की तलाश कर रहा हूं। यह "स्वचालित वॉल्यूम नियंत्रण" अनुप्रयोग नहीं है, जहां कोई एम्पलीफायर को वॉल्यूम स्तर बनाए रखने के लिए नियंत्रित करेगा, बल्कि मैं व्यक्तिगत चोटियों को सीमित करना चाहता हूं ("सॉफ्ट" ट्रंकट)। (मुझे पता है कि यह हार्मोनिक्स का परिचय देता है, लेकिन मैं डेटा का विश्लेषण करने की कोशिश कर रहा हूं, इसे सुनने के लिए नहीं।)
अब तक मेरा (बहुत क्रूड) फॉर्मूला है:
factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))
जहां स्तर तात्कालिक ध्वनि स्तर है, औसत ऐतिहासिक औसत ध्वनि स्तर है, और कारक "समायोजित" स्तर ( कारक समय स्तर ) का उत्पादन करने के लिए उपयोग किया जाने वाला गुणक है ।
इसके अलावा, इस गुणक को केवल तभी लागू किया जाता है जब यह 1 से कम मूल्य पर गणना करता है। अन्यथा स्तर अनजाने में छोड़ दिया जाता है।
मंशा ऐतिहासिक औसत के लिए समायोजित स्तर को कुछ कई (लगभग 15x इस सूत्र के साथ) सीमित करने की है। यह सूत्र है कि मुझे क्या चाहिए, सॉर्ट करें, लेकिन संख्याओं के बढ़ने पर "डिप" प्रदर्शित करता है। यही है, समायोजित स्तर (यानी, कारक समय स्तर ) एक स्तर तक बढ़ जाता है जिसके साथ अन्यायपूर्ण स्तर बढ़ता है लेकिन फिर, स्पर्शोन्मुख जाने के बजाय, वास्तव में छोटा होने लगता है। (वास्तव में, सूत्र को मुख्य रूप से अत्यंत उच्च मूल्यों के साथ शून्य से जाने से रोकने के लिए जोड़ा गया था।)
(इस तरह से मूल्यों को सीमित करने की इच्छा के कारण मुख्य रूप से इतना क्षणिक शोर ध्वनि स्तर के चलने वाले औसत को गंभीर रूप से परेशान नहीं करता है। लेकिन जब आप खर्राटों का विश्लेषण कर रहे हैं "क्षणिक शोर" काफी महत्वपूर्ण है, तो मैं बस इसे हटा सकता हूं। ।)
तो, क्या कोई बेहतर कुछ सुझा सकता है? (ऐसा लगता है कि जब आप नहीं चाहते हैं तो असममित व्यवहार उत्पन्न करना आसान होता है, लेकिन जब आप ऐसा करते हैं तो कठिन होता है।)