जब ऑडियो के लिए डबल (64 बिट) फ्लोटिंग पॉइंट पर विचार करें


12

आधुनिक प्रोसेसर पर ऑडियो को संश्लेषित और संसाधित करते समय, कोई एकल सटीक (32 बिट) फ़्लोटिंग पॉइंट के अलावा किसी अन्य चीज़ का उपयोग करने पर विचार करेगा? जाहिर है, वास्तविक दुनिया में आने और बाहर जाने वाला ऑडियो 16/24 बिट का है, इसलिए मैं केवल सॉफ्टवेयर में संकेतों की शुद्धता (ऑडियो ऑडियो और फिल्टर गुणांक जैसी चीजें) के बारे में बात कर रहा हूं।

मान लो की:

  • CPU / DSP में सिंगल और डबल प्रिसिजन दोनों के लिए हार्डवेयर फ्लोटिंग पॉइंट सपोर्ट है
  • प्राथमिकता गुणवत्ता ऑडियो है, उच्च प्रदर्शन नहीं। उदाहरण के लिए, डबल परिशुद्धता पर विचार किया जाएगा यदि यह बेहतर (अवधारणात्मक) गुणवत्ता की पेशकश करता है।

जवाबों:


9

आईईईई फ्लोट सिंगल्स केवल 24 बिट्स मंटिसा प्रदान करते हैं। लेकिन कई DSP / फ़िल्टरिंग एल्गोरिदम (यूनिट सर्कल के पास डंडे / शून्य के साथ IIR biquads, आदि) मध्यवर्ती कम्प्यूटेशनल उत्पादों (संचायक, आदि) के लिए मंटिसा के 24 से अधिक बिट्स की आवश्यकता होती है, बस अंतिम परिणाम प्राप्त करने के लिए लगभग 16 या सटीक है। 24 बिट्स। इन प्रकार के एल्गोरिदम के लिए, 32, 40 और 48-बिट स्केल किए गए पूर्णांक संचायक अक्सर डीएसपी के साथ उपयोग किए जाते थे, जिनमें कोई एफपीयू नहीं था।

लेकिन कई वर्तमान प्रोसेसर कार्यान्वयन (पीसी, स्मार्टफोन, आदि के लिए) पर, डबल सटीक FPU 32 या 64 बिट स्केल पूर्णांक का उपयोग करने की कोशिश करने की तुलना में बहुत तेज है जब आपके एल्गोरिथ्म को मध्यवर्ती उत्पाद के 24 से अधिक बिट्स की आवश्यकता होती है।

डेटा कैश को ट्रैश करने से रोकने के लिए, कच्चा डेटा कम पूर्णांक या एकल परिशुद्धता फ्लोट प्रारूप में हो सकता है, जबकि केवल अधिक स्थानीय कम्प्यूटेशनल कर्नेल उच्च रिज़ॉल्यूशन प्रारूप का उपयोग कर सकता है। लेकिन अगर आप डीएसपी मॉड्यूल के बीच मध्यवर्ती संगणना परिणाम साझा कर रहे हैं, तो मॉड्यूल के बीच इंटरचेंज प्रोटोकॉल एक उच्च रिज़ॉल्यूशन (24-बिट mantissa से अधिक) बस या डेटा प्रारूप से भी लाभान्वित हो सकता है।


यह उस तरह की जानकारी है जैसा मैं था। मैं इस उत्तर को स्वीकार करूंगा यदि आप किसी ऐसे मामले का ठोस उदाहरण प्रदान कर सकते हैं जिसमें फिल्टर कार्य करने के लिए दोहरी परिशुद्धता की आवश्यकता होती है, अर्थात, यह एकल परिशुद्धता के साथ खराब (या कम से कम काफी सामान्य) ध्वनि करेगा, लेकिन मक्खन के रूप में चिकनी दोहरी सटीकता के साथ।
user1849104

इसके अलावा, कैशे को ट्रैश करने से आपका क्या मतलब है ? क्या आपका मतलब है कि इससे दुगुना डेटा होने से चीजें बुरी तरह से धीमी हो जाएंगी?
user1849104

एक उदाहरण दिया गया था, IIR इकाई सर्कल के पास डंडे / शून्य के साथ। यदि कैश है, तो एल्गोरिदम और काम करने वाले डेटा सेट जो इस कैश में फिट होते हैं, वे उन लोगों की तुलना में काफी तेज हो सकते हैं जो नहीं करते हैं।
hotpaw2

9

CPU / DSP में सिंगल और डबल प्रिसिजन दोनों के लिए हार्डवेयर फ्लोटिंग पॉइंट सपोर्ट है।

यह वास्तव में इस बात पर निर्भर करता है कि आप किस तरह के समर्थन की बात कर रहे हैं। X86 पर, x87 शैली फ्लोटिंग पॉइंट निर्देशों का उपयोग करते समय, आपको पूर्ण 80-बिट आंतरिक परिशुद्धता और समान प्रसंस्करण समय मिलता है - चाहे आप सिंगल या डबल परिशुद्धता के साथ काम कर रहे हों।

लेकिन जब SIMD निर्देशों का उपयोग करते हैं, तो आप 64-बिट फ़्लोट्स की तुलना में 32-बिट फ़्लोट्स का उपयोग करके दो बार अधिक काम कर सकते हैं। यह एक बड़ी बात है।

ध्यान में रखने वाली एक और बात मेमोरी है - कैश मेमोरी के सबसे तेज स्तरों में फिट होने वाले डेटा की दो मात्राओं द्वारा दोहरे परिशुद्धता विभाजन का उपयोग करना।

आधुनिक प्रोसेसर पर ऑडियो को संश्लेषित और संसाधित करते समय,

यह नीचे आ जाएगा कि आप किस प्रकार का संश्लेषण और प्रसंस्करण करते हैं। यदि इसमें IIR फिल्टर (या आमतौर पर राज्य चर और / या प्रतिक्रिया के साथ कुछ भी) शामिल हैं, तो आप 32-बिट के साथ, अपने आप को पैर में आसानी से गोली मार सकते हैं (गुणांक या कम-कटऑफ अशुद्धि के कारण गुणांक)। आप जो कर रहे हैं उसके बारे में बहुत अधिक सोचें। कुछ फ़िल्टर टोपोलॉजी 32-बिट के साथ त्रुटिपूर्ण रूप से काम करती हैं।

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


क्या यह कहना सुरक्षित होगा कि SIMD निर्देशों के साथ एकल परिशुद्धता का उपयोग करने से आपको हमेशा दोहरे परिशुद्धता पर लगभग दोगुना प्रदर्शन मिलेगा ?
user1849104

चूंकि अब मैं पिछली टिप्पणी को संपादित नहीं कर सकता: मुझे कभी भी (SIMD) निर्देश सेट का (सीधे) उपयोग करने का अवसर नहीं मिला। क्या केवल एक परिशुद्धता का उपयोग करना और दो बार प्रदर्शन प्राप्त करना संभव है? या वास्तविकता रास्ते में आती है?
user1849104 1

6

आपको अपने एल्गोरिथ्म की संख्यात्मक आवश्यकताओं को जानना होगा और तदनुसार परिशुद्धता का चयन करना होगा।

तो चलो यहाँ गणित करते हैं: एक 32-बिट फ़्लोटिंग पॉइंट में 24 बिट मंटिसा और 8 बिट एक्सपोनेंट है। यह आपको लगभग 1540 डीबी की एक गतिशील रेंज पर शोर अनुपात के बारे में 150 डीबी सिग्नल देता है। यह अधिकांश चीजों के लिए काफी है ऑडियो। दोगुना सटीक आपको लगभग दो बार देता है।

प्रत्येक एल्गोरिथ्म में संख्यात्मक परिशुद्धता के लिए कुछ आवश्यकताएं हैं। यदि सभी ऑडियो एल्गोरिदम को ठीक से डिज़ाइन किया गया है, जो कि मैं 32-बिट फ्लोटिंग पॉइंट के साथ ठीक करने के लिए जानता हूं। "ठीक से डिज़ाइन किया गया" यहां कीवर्ड है। उदाहरण के लिए, ६०-२०० हर्ट्ज से ६४.२ हर्ट्ज पर नमूना ६१-६० बैंड बैंड पास जो द्वितीय IIR द्वि-क्वाड फिल्टर से प्रत्यक्ष के रूप में लागू किया गया है, वास्तव में ३२-बिट पर कुछ शोर की समस्या होगी। हालाँकि यह ट्रांसपोज़्ड फॉर्म II या डायरेक्ट फॉर्म I फ़िल्टर के रूप में पूरी तरह से ठीक है।

यदि आप उदाहरण के लिए Matlab के अवशेष () फ़ंक्शन का उपयोग करके उसी बैंड पास फ़िल्टर के आंशिक अंश विस्तार का प्रयास करते हैं, तो आपको डबल परिशुद्धता के साथ भी खराब परिणाम मिलेंगे। दोबारा उस विशिष्ट इनपुट डेटा के लिए एल्गोरिथ्म की संख्यात्मक आवश्यकताओं से अधिक दोहरी सटीकता की पेशकश करना है। इसे ठीक करने की कुंजी सटीक रूप से आँख बंद करके नहीं है, बल्कि इसके बजाय एक बेहतर एल्गोरिथ्म का उपयोग करना है।

अंत में चलिए एक नज़र डालते हैं कि कौन सी फ्लोटिंग (32 बिट या 64 बिट) कमजोर होती है: आपके पास बहुत अधिक गतिशील रेंज होती है, यानी आप 200dB तक सिग्नल को स्केल कर सकते हैं, 500dB से बढ़ा सकते हैं, फिर से 300dB तक कम कर सकते हैं और आप ठीक उसी तरह से समाप्त कर देंगे जैसे आपने शुरू किया था सटीक में लगभग कोई नुकसान नहीं है। तो यह बात नहीं है। फ्लोटिंग पॉइंट में उन संख्याओं को जोड़ने में परेशानी होती है जो आकार में बहुत भिन्न होती हैं। वहाँ एक बिंदु है जहाँ एक छोटी संख्या को जोड़ने से कोई फर्क नहीं पड़ता है, यानी आपको 1 + dx = 1 मिलता है। यह संख्या "dx" 32-बिट फ्लोटिंग पॉइंट के लिए 1.2e-7 और 64 बिट के लिए 2.2e-16 है। यदि आप एल्गोरिथ्म में उन संख्याओं को जोड़ना या घटाना शामिल है जो उस परिमाण में अलग हैं, तो आप समस्याओं में भाग सकते हैं।

इसके लिए एक अच्छा उदाहरण प्रत्यक्ष रूप से उल्लेख किया गया प्रत्यक्ष प्रपत्र II फ़िल्टर है: II से प्रत्यक्ष फ़िल्टर (उदाहरण के लिए https://ccrma.stanford.edu/~jos/fp/Direct_Form_II.html ) मूल रूप से इनपुट को फ़िल्टर करने वाले राज्य चर की गणना करता है पोल-ओनली ट्रांसफर फ़ंक्शन के साथ पहले और फिर आउटपुट बनाने के लिए शून्य के साथ फ़िल्टरिंग। अब यदि पोल यूनिट सर्कल के करीब हैं, तो पोल-ओनली ट्रांसफर फंक्शन बहुत, बहुत बड़ा हो जाता है। तो राज्य चर इनपुट (80db से 100dB बड़ा) की तुलना में बहुत बड़ा हो सकता है और इनपुट के साथ राज्य चर का योग बहुत शोर पैदा करता है।

यहाँ समाधान एक ट्रांसपोज़्ड फॉर्म II या डायरेक्ट फॉर्म I फ़िल्टर पर जाना है। विश्लेषण से पता चलता है कि राज्य चर इनपुट / आउटपुट से बड़ा नहीं हो सकता है, फिर शायद 12dB या इसके स्थान पर, इसलिए समस्या परिमाण बेमेल पहले स्थान पर नहीं होती है।


2

एकल परिशुद्धता के सापेक्ष दोहरे परिशुद्धता में जाने के दो लाभ हैं: बढ़ी हुई सीमा और बेहतर संकल्प। मुझे बहुत आश्चर्य होगा अगर बढ़ी हुई सीमा आपके आवेदन में कोई अंतर लाएगी। अगर ऐसा होता है, तो आपके स्केलिंग में कुछ गड़बड़ है।

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


2

यदि आप संश्लेषित ऑडियो के साथ काम कर रहे हैं जो पीढ़ी और प्रतिपादन (16/24 बिट पूर्णांक में रूपांतरण) के बीच बहुत अधिक प्रसंस्करण से गुजरता है, तो आपको अपनी मशीन के सर्वश्रेष्ठ संख्यात्मक परिशुद्धता में काम करने से लाभ होगा।

पूर्णांक और फ्लोटिंग पॉइंट संख्या के बीच एक मौलिक अंतर करना भी महत्वपूर्ण है। एक डबल-सटीक फ़्लोटिंग पॉइंट (64 बिट) 64 बिट पूर्णांक से अलग है, और आप सॉफ़्टवेयर में मनमाने ढंग से सटीक पूर्णांक के साथ भी काम कर सकते हैं, जो आपके द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर टूल पर निर्भर करता है। यह महत्वपूर्ण होगा यदि आपको उन्हें उत्पन्न करने के बजाय ध्वनियों को रिकॉर्ड करना होगा (जहाँ तक मुझे पता है, AD रूपांतरण हमेशा पूर्णांक स्वरूप में सैंपल ध्वनियों को बचाता है)।

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

वास्तव में, चूंकि अधिकांश मशीनों में आजकल एक देशी "डबल" (64 बिट) सटीक होता है, इसलिए मुझे 32 बिट्स के साथ काम करने का कोई कारण नहीं दिखता ...

उम्मीद है की वो मदद करदे!


3
"जब तक आप SIMD का उपयोग नहीं करते हैं, तब तक मैं 32 बिट्स के साथ काम करने का कोई कारण नहीं देखता ..."
18
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.