2009-07-29 15 views
6

यह मेरी "सप्ताहांत" शौक समस्या है।8 बिट ऑडियो नमूने 16 बिट

मैं एक क्लासिक सिंथेसाइज़र के रोम से कुछ अच्छी तरह से प्यार करता था एकल चक्र waveforms की है।

ये 8-बिट नमूने (256 संभावित मान) हैं।

क्योंकि वे केवल 8 बिट हैं, शोर तल बहुत अधिक है। यह मात्राकरण त्रुटि के कारण है। मात्रा त्रुटि बहुत अजीब है। यह सभी आवृत्तियों को थोड़ा सा गड़बड़ कर देता है।

मैं इन चक्र लेने के लिए और "क्लीन" उनमें से 16-बिट संस्करण करना चाहते हैं। (हां, मुझे पता है कि लोग गंदे संस्करणों से प्यार करते हैं, इसलिए मैं उपयोगकर्ता को गंदे और साफ-सुथरा करने के लिए जो भी चाहें उन्हें अलग कर दूंगा।)

यह असंभव लगता है, ठीक है, क्योंकि मैंने हमेशा के लिए कम 8 बिट खो दिए हैं , सही? लेकिन यह थोड़ी देर के लिए मेरे सिर के पीछे रहा है, और मुझे पूरा यकीन है कि मैं इसे कर सकता हूं।

याद रखें कि ये एकल-चक्र तरंगों हैं जो प्लेबैक के लिए बार-बार बार-बार मिलते हैं, इसलिए यह एक विशेष मामला है। (बेशक, synth लिफाफे, मॉड्यूलेशन, फ़िल्टर क्रॉस-फ़ेडिंग इत्यादि सहित ध्वनि को दिलचस्प बनाने के लिए सभी प्रकार की चीजें करता है)

प्रत्येक व्यक्तिगत बाइट नमूना के लिए, मुझे वास्तव में पता है कि यह 256 में से एक है 16-बिट संस्करण में मूल्य। (रिवर्स प्रक्रिया की कल्पना करें, जहां 16-बिट मान को छोटा कर दिया जाता है या 8 बिट्स तक गोल किया जाता है।)

मेरा मूल्यांकन फ़ंक्शन न्यूनतम शोर फ़्लोर प्राप्त करने का प्रयास कर रहा है। मुझे एक या अधिक एफएफटी के साथ इसका फैसला करने में सक्षम होना चाहिए।

संपूर्ण परीक्षण शायद हमेशा के लिए ले जाएगा, तो मैं एक कम संकल्प पहले पारित हो सकता है। या क्या मैं यादृच्छिक रूप से यादृच्छिक रूप से चुने गए मूल्यों को चारों ओर धक्का देता हूं (ज्ञात मानों के भीतर जो समान 8-बिट संस्करण रखेंगे) और मूल्यांकन करें और क्लीनर संस्करण रखें? या क्या मैं कुछ तेज कर सकता हूं? क्या मुझे स्थानीय न्यूनतम स्थानों में गिरने का खतरा है जब खोज स्थान में कहीं और बेहतर न्यूनतम हो सकता है? मैंने ऐसा ही इसी तरह की स्थितियों में किया है।

वहाँ किसी भी प्रारंभिक अनुमान मैं कर सकते हैं, हो सकता है पड़ोसी मूल्यों को देखकर कर रहे हैं?


संपादित करें: कई लोगों ने बताया है कि समस्या आसान है अगर मैं आवश्यकता है कि नई तरंग मूल करने के लिए नमूना हैं हटा दें। यह सच है। वास्तव में, अगर मैं सिर्फ क्लीनर ध्वनियों की तलाश में हूं, तो समाधान छोटा है।

+0

मैं किसी भी तरह से कर रहा हूँ एक डीएसपी विशेषज्ञ का मतलब है, लेकिन एक छोटी खोज (http://www.google.com/search?&q=improve++audio++bit+rate) कुछ कागजात लाया: http://www2.computer.org/portal/web/csdl/doi?doc=abs/proceedings/icme/2001/1198/00/11980031abs.htm, http://iwaenc05.ele.tue.nl/proceedings/papers/S04 -02.pdf। शायद यह आपको अगले सप्ताहांत के लिए कुछ विचार देता है ;-) –

+0

धन्यवाद divo! मैं उनको पढ़ूंगा। – Nosredna

+0

अधिकांश कागजात मुझे कम नमूना दर के बारे में बात मिली है। क्वांटिज़ेशन त्रुटि से पुनर्प्राप्त करने के बारे में केवल कुछ ही बात। मैंने अभी भी तय नहीं किया है कि नमूना दर त्रुटि के बारे में भी सोचना है, क्योंकि मेरे पास पहले से ही एक अच्छा ऑडियो-गुणवत्ता इंटरपोलेटर है। – Nosredna

उत्तर

1

अपने प्रश्न में दृष्टिकोण के साथ जा रहे हैं, मैं पहाड़ी चढ़ाई एल्गोरिदम और की तरह में रखने का सुझाव देते हैं।

http://en.wikipedia.org/wiki/Hill_climbing पर इसके बारे में अधिक जानकारी है और साइडबॉक्स में अन्य एल्गोरिदम के लिंक हैं जो अधिक उपयुक्त हो सकते हैं।

ऐ कीमिया की तरह है - हम अंतिम लक्ष्य नहीं पहुंचे, लेकिन अच्छी चीजें के बहुत सारे रास्ते बाहर आया था।

+0

यह वही है जो मैं चाहता हूं। मेरी सामान्य रणनीति यह है कि प्रति पास I 1) चुनें कि कितनी संख्याएं अलग-अलग हैं। 2) प्रत्येक के लिए आंदोलन की यादृच्छिक सीमा तय करें। 3) उस सीमा में एक यादृच्छिक उत्पन्न करें। 4) eval करो और फैसला करें कि वहाँ फिर से शुरू करना है या नहीं। वह आमतौर पर मुझे स्थानीय मिनटों से बाहर रखता है। – Nosredna

2

आप अपने मौजूदा 8-बिट नमूना को अपने नए 16-बिट नमूने के उच्च-क्रम बाइट में डाल सकते हैं, और उसके बाद निम्न ऑर्डर बाइट linear interpolate प्रत्येक मूल 8-बिट नमूना के बीच कुछ नए 16 बिट डेटापॉइंट्स का उपयोग कर सकते हैं।

यह अनिवार्य रूप से, अपने मूल 8 बिट के नमूने में से प्रत्येक के बीच एक 16 बिट सीधी रेखा से कनेक्ट कई नए नमूने का उपयोग होगा। यह आपके पास अब जो कुछ है उससे कहीं ज्यादा शांत होगा, जो दो मूल नमूनों के बीच अचानक, 8-बिट कूद है।

तुम भी कुछ low-pass filtering लागू की कोशिश कर सकते।

+0

यह पहली बात थी जो मैंने किया था। ;-) सबसे पहले मैंने रैखिक की कोशिश की, फिर मैंने एक बेहतर विधि पर स्विच किया। यह सिर्फ थोड़ी सफाई करता है क्योंकि जब आप नमूने के बीच में हिट करते हैं तो यह बेहतर काम करता है। यह कच्चे से थोड़ा बेहतर है, लेकिन वास्तव में इस तथ्य को संबोधित नहीं करता है कि अंक, मात्रात्मक त्रुटि के कारण, गलत जगह पर हैं। – Nosredna

+0

हो सकता है कि मुझे आपका सुझाव गलत हो रहा है लेकिन एस/एन अनुपात में सुधार करने के बजाय नमूना दर को दोगुना नहीं करना चाहिए? –

+0

इसी तरह, कम-पास उच्च शोर को हटा देता है, लेकिन सिग्नल के शीर्ष के नीचे शोर में मदद नहीं करता है। एक, ज़ाहिर है, यह चरण को प्रभावित करता है। असल में, इन सभी पुराने synths वैसे भी कम पास था। मैं वास्तव में यहाँ मात्रा कटाई कट्टर के बाद जा रहा हूँ। :-) लेकिन सुझावों के लिए धन्यवाद। – Nosredna

1

ठीक है, मैं कुछ प्राथमिकी छानने उम्मीद होती है (IIR यदि आप वास्तव में प्रसंस्करण चक्र की जरूरत है, लेकिन एफआईआर अस्थिरता के बिना बेहतर परिणाम दे सकते हैं) शोर साफ करने के लिए। आपको जिस प्रभाव को आप चाहते हैं उसे प्राप्त करने के लिए आपको इसके साथ खेलना होगा, लेकिन मूल समस्या 8 बिट संकल्पों पर नमूना करके बनाए गए ऑडियो में तेज किनारों को चिकनाई कर रही है। मैं ऑडियो की केंद्र आवृत्ति के लिए व्यापक जन्म देता हूं और कम पास फ़िल्टर करता हूं, और फिर यह सुनिश्चित करना सुनता हूं कि मैंने इसे चुने गए फ़िल्टर के साथ "फ्लैट" नहीं बनाया है।

हालांकि यह कठिन है, वहाँ केवल इतना आप कर सकते है, कम 8 बिट खो दिया है, सबसे अच्छा आप कर सकते हैं यह अनुमानित है।

आपके सिग्नल की तरह दिखने वाले शोर से छुटकारा पाने के लिए लगभग असंभव है। यदि आप अपने फ्रीक्वेंसी बैंड में सामानों को ट्वीक करना शुरू करते हैं तो यह ब्याज का संकेत लेगा।

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

पीट

संपादित करें: टिप्पणियां एक छोटे से हो रही है लंबे समय तक तो मैं जवाब देने के लिए कुछ कर देंगे।

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

सिग्नल सरल/जटिल साइनसॉइड हैं, या क्या उनके पास कठोर किनार हैं? यानी त्रिभुज, वर्ग तरंगें, आदि। मुझे लगता है कि उनके पास चक्र से चक्र तक निरंतरता है, क्या यह मान्य है? यदि ऐसा है तो आप अपने एफएफटी को खिलाए गए तरंगों के चक्रों की संख्या में वृद्धि करके अपने एफएफटी रिज़ॉल्यूशन को अधिक सटीक रूप से निश्चित करने के लिए बढ़ा सकते हैं। यदि आप आवृत्तियों के उपयोग की सटीक पहचान कर सकते हैं, मानते हैं कि वे कुछ हद तक अलग हैं, तो आप इच्छित सिग्नल को पूरी तरह से फिर से बनाने में सक्षम हो सकते हैं।

छंटनी आवश्यकता के माध्यम से 16-बिट से 8-बिट परिणाम उत्पन्न करेगा जो मूल स्रोत से मेल नहीं खाता है। (इस प्रकार एक इष्टतम उत्तर खोजने में अधिक कठिन लग रहा है।) आमतौर पर आप "निकटतम मैच प्राप्त करने" का प्रयास करके एक निश्चित बिंदु तरंग का उत्पादन करेंगे जिसका अर्थ है निकटतम संख्या (ट्रंकिंग एक फर्श ऑपरेशन) है। यह सबसे अधिक संभावना है कि वे मूल रूप से कैसे उत्पन्न हुए थे। 0.5 जोड़ना (इस मामले में 0.5 128 है) और उसके बाद आउटपुट ट्रंकिंग आपको अधिक सटीक परिणाम उत्पन्न करने की अनुमति देगा। अगर यह कोई चिंता नहीं है तो ठीक है, लेकिन यह निश्चित रूप से सटीकता पर नकारात्मक प्रभाव डालेगा।

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

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

+0

सौभाग्य से, सिग्नल को देखते हुए, ज्यादातर मामलों में यह बहुत स्पष्ट है - शोर सिग्नल की तरह दिखता नहीं है। मुझे एहसास है कि मैं वास्तविक सिग्नल को पुनर्प्राप्त नहीं कर सकता, लेकिन मैं श्रव्य सीमा से शोर फर्श को छोड़ने से खुश हूं। मुझे पता है कि मैं _could_ व्यस्त एफएफटी करता हूं। मेरा लक्ष्य 166 बिट नमूने को 256 तक विभाजित करने में सक्षम होना है और मेरे साथ शुरू किया गया वही डेटा है। यही कारण है कि मैं उलटा एफएफटी के बारे में चिंतित था। क्या आप लाभ उठाने की आवश्यकता के बारे में आखिरी चीज को समझा सकते हैं? मैंने वहां जो मतलब था उसे पकड़ नहीं लिया। – Nosredna

+0

मेरा विचार यह है कि _any_ 16-बिट परिणाम मुझे मिलते हैं जिन्हें 8-बिट मूल चक्रों में छोटा किया जा सकता है, इस अर्थ में "मान्य" है कि यह एक संभावित इनपुट था। लेकिन शोर के इस तल से घिरा स्पष्ट (-श) संकेत शिखर है जो दर्ज की गई ध्वनि में नहीं था। मुझे पता है कि युग के synth निर्माताओं के साथ साक्षात्कार के कारण, जो 12 और 16 बिट डीएसी चले गए जैसे ही वे कर सकते थे। – Nosredna

+0

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

1

तरंगों की आवधिकता का लाभ लेने का एक आसान तरीका हो सकता है। कैसे के बारे में अगर आप:

  1. एक 16-बिट तरंग बनाने जहां उच्च बाइट्स तरंग कर रहे हैं और कम बाइट्स शून्य कर रहे हैं - फोन यह x [n]।

  2. की गणना असतत फूरियर एक्स के बदलने [n] = एक्स [डब्ल्यू]।

  3. बनाओ एक संकेत Y ​​[डब्ल्यू] = (dBMag (एक्स [डब्ल्यू])> थ्रेसहोल्ड)? एक्स [डब्ल्यू]: 0, जहां डीबीएमएजी (के) = 10 * लॉग 10 (असली (के)^2 + कल्पना (के)^2), और थ्रेसहोल्ड शायद 40 डीबी है, 8 बिट्स के आधार पर लगभग 48 डीबी गतिशील रेंज है, और ~ 1.5 बिट शोर की इजाजत देता है।

  4. उलटा वाई बदलने [डब्ल्यू] पाने के लिए y [n], अपने नए 16 बिट तरंग।

  5. y [n] अच्छा ध्वनि नहीं करता है, कुछ बहुत ही निम्न स्तर शोर के साथ यह बेचैनी।

नोट्स:

ए इस तकनीक को केवल मूल waveforms में काम करता है वास्तव में समय-समय पर कर रहे हैं!

बी चरण 5 चरण 3 में वाई में यादृच्छिक शोर करने के लिए "0" मूल्य निर्धारित [डब्ल्यू] के साथ प्रतिस्थापित किया जा सकता है, तो आप एक सा प्रयोग करने के लिए क्या बेहतर काम करता है देखने के लिए होगा।

यह ऑप्टिमाइज़ेशन दृष्टिकोण की तुलना में आसान (मेरे लिए कम से कम) लगता है। लेकिन truncated y [n] शायद आपके मूल तरंगों के बराबर नहीं होगा। मुझे यकीन नहीं है कि बाधा कितनी महत्वपूर्ण है। मुझे लगता है कि इस दृष्टिकोण से वेवफॉर्म उत्पन्न होंगे जो अच्छा लगता है।

+0

बाधा महत्वपूर्ण है। मैं वेवफॉर्म प्राप्त करने में सक्षम होना चाहता हूं जो 8-बिट्स और मैच में नमूना देगा। अन्यथा समस्या आसान है। लेकिन मैं इसके बारे में सोचूंगा। – Nosredna

+0

हो सकता है कि आप एक अनुकूलन दृष्टिकोण कर सकें जहां लागत कार्य को कम करना है | y [n] - x [n] | + | वाई [डब्ल्यू] |, और खोज स्थान वाई [डब्ल्यू] के "0" मान है। | वाई [एन] - एक्स [एन] | लागत समारोह का हिस्सा वाई [एन] मिलान एक्स [एन] उच्च आदेश बिट्स में रखेगा, और | वाई [डब्ल्यू] | भाग शोर तल नीचे धक्का। मुझे नहीं पता कि ऑप्टिमाइज़ेशन खोज अंतरिक्ष और लागत समारोह के बीच व्यस्त फूरियर ट्रांसफ़ॉर्म के साथ कैसे निपटेंगे, मेरे पास ऑप्टिमाइज़ेशन तकनीकों के साथ बहुत कम अनुभव है। – mtrw

संबंधित मुद्दे