(गुलाबी) शोर के लिए एक अच्छा छद्म यादृच्छिक सन्निकटन उत्पन्न करने के लिए कुछ एल्गोरिदम क्या हैं , फिर भी पूर्णांक डीएसपी पर कम कम्प्यूटेशनल लागत के साथ कार्यान्वयन के लिए उपयुक्त हैं?
(गुलाबी) शोर के लिए एक अच्छा छद्म यादृच्छिक सन्निकटन उत्पन्न करने के लिए कुछ एल्गोरिदम क्या हैं , फिर भी पूर्णांक डीएसपी पर कम कम्प्यूटेशनल लागत के साथ कार्यान्वयन के लिए उपयुक्त हैं?
जवाबों:
वहाँ कई हैं। इस साइट की एक उचित (लेकिन संभवतः पुरानी) सूची है:
रैखिक फ़िल्टरिंग
पीटर के जवाब में पहला दृष्टिकोण (यानी सफेद शोर को फ़िल्टर करना) एक बहुत ही सीधा दृष्टिकोण है। में स्पेक्ट्रल ऑडियो सिग्नल प्रोसेसिंग , JOS एक कम क्रम फिल्टर है कि निर्माण करने के लिए इस्तेमाल किया जा सकता देता है एक सभ्य सन्निकटन , एक साथ विश्लेषण कैसे अच्छी तरह से जिसके परिणामस्वरूप पावर वर्णक्रमीय घनत्व आदर्श से मेल खाता है की। रैखिक फ़िल्टरिंग हमेशा एक सन्निकटन पैदा करेगा, लेकिन व्यवहार में यह कोई मायने नहीं रख सकता है। JOS को फ़ैलाने के लिए:
कोई सटीक (तर्कसंगत, परिमित-क्रम) फ़िल्टर नहीं है जो सफेद शोर से गुलाबी शोर पैदा कर सकता है। ऐसा इसलिए है क्योंकि फ़िल्टर का आदर्श आयाम प्रतिक्रिया अपरिमेय फ़ंक्शन 1 / ampl के आनुपातिक होना चाहिए , जहाँfHz में फ़्रीक्वेंसी को दर्शाता है। हालांकि, अनुमानित रूप से सटीक सहित किसी भी वांछित डिग्री के लिए गुलाबी शोर उत्पन्न करना काफी आसान है।
उनके द्वारा दिए गए फ़िल्टर के गुणांक निम्नानुसार हैं:
B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];
वे MATLAB फ़िल्टर फ़ंक्शन के मापदंडों के रूप में स्वरूपित किए गए हैं , इसलिए स्पष्टता के लिए, वे निम्नलिखित स्थानांतरण फ़ंक्शन के अनुरूप हैं:
जाहिर है, व्यवहार में गुणांक के पूर्ण परिशुद्धता का उपयोग करना बेहतर है। यहाँ उस फ़िल्टर का उपयोग करके उत्पन्न होने वाले गुलाबी शोर की एक कड़ी है:
फिक्स्ड-पॉइंट कार्यान्वयन के लिए, चूंकि यह आमतौर पर रेंज [-1,1] में गुणांक के साथ काम करने के लिए अधिक सुविधाजनक है, ट्रांसफर फ़ंक्शन के कुछ पुनः क्रम में होंगे। आम तौर पर, सिफारिश दूसरे क्रम के खंडों में चीजों को तोड़ने के लिए होती है , लेकिन इसका कारण का हिस्सा (जैसा कि पहले-क्रम खंडों का उपयोग करने का विरोध किया जाता है) वास्तविक गुणांक के साथ काम करने की सुविधा के लिए है जब जड़ें जटिल होती हैं। इस विशेष फिल्टर के लिए, सभी जड़ें वास्तविक हैं, और फिर दूसरे क्रम के खंडों में संयोजन करना शायद अभी भी कुछ भाजक गुणांक> 1 का उत्पादन करेगा, इसलिए तीन प्रथम क्रम खंड एक उचित विकल्प है, निम्नानुसार है:
where
Some judicious choice of sequencing for those sections, combined with some choice of gain factors for each section will be required to prevent overflow. I haven't tried any of the other filters given in the link in Peter's answer, but similar considerations would probably apply.
White Noise
Obviously, the filtering approach requires a source of uniform random numbers in the first place. If a library routine isn't available for a given platform, one of the simplest approaches is to use a linear congruential generator. One example of an efficient fixed-point implementation is given by TI in Random Number Generation on a TMS320C5x (pdf). A detailed theoretical discussion of various other methods can be found in Random Number Generation and Monte Carlo Methods by James Gentle.
Resources
Several sources based on following links in Peter's answer are worth highlighting.
The first filter-based chunk of code references Introduction to Signal Processing by Orfanidis. The full text is available at that link, and [in Appendix B] it has coverage of both pink and white noise generation. As the comment mentions, Orfanidis mostly covers the Voss algorithm.
The Spectrum Produced by the Voss-McCartney Pink Noise Generator. Way down near the bottom of the page, after extensive discussion of variants of the Voss algorithm, this link is referenced in giant pink letters. It's much easier reading than some of the preceding ASCII diagrams.
A Bibliograph on 1/f Noise by Wentian Li. This is referenced both in Peter's source and by JOS. It has a dizzying number of references on 1/f noise in general, dating all the way back to 1918.
I have been using Corsini and Saletti's algorithm since 1990: G. Corsini, R. Saletti, "A 1/f^gamma Power Spectrum Noise Sequence Generator", IEEE Transactions on Instrumentation and Measurement, 37(4), December, 1988, 615-619. The gamma exponent is between -2 and +2. It works well for my purposes. Ed
If this attempt to add a screenshot works, the figure below shows an example of how well the Corsini and Saletti algorithm performs (at least as I programmed it back in 1990). The sampling frequency was 1 kHz, gamma = 1, and 1000 32k FFT PSDs were averaged.
यह कोर्सीनी और सालेटी (सी एंड एस) शोर जनरेटर पर मेरी पिछली पोस्ट तक है। अगले दो आंकड़े बताते हैं कि C & S जनरेटर कम आवृत्ति (गामा> 0) और उच्च आवृत्ति (गामा <0) शोर की पीढ़ी के संबंध में कितना अच्छा प्रदर्शन करता है। तीसरा आंकड़ा सी एंड एस जनरेटर के 1 / एफ शोर PSDs (मेरी पहली पोस्ट के समान) और उदाहरण बी। 1 / एफ जनरेटर की तुलना प्रो। ओर्फानिडिस की उत्कृष्ट पुस्तक (eqn B.29, पृष्ठ 736) में करता है। ये सभी PSDs का औसत 1000 32k FFT PSDs है। वे सभी एकतरफा और मतलबी हैं। C & S PSDs के लिए, मैंने वांछित उपयोग सीमा के रूप में 3 डंडे / दशक और निर्दिष्ट 4 दशकों (0.05 से 500 हर्ट्ज) का उपयोग किया। तो C & S जनरेटर में n = 12 पोल और शून्य जोड़े थे। नमूने की आवृत्ति 1 kHz थी, Nyquist 500 हर्ट्ज था, और रिज़ॉल्यूशन तत्व बस 0.0305 हर्ट्ज से अधिक था। एड वी
कोर्सीनी और सालेट्टी के रूप में उनके पेपर में, , कहाँ पे नमूना आवृत्ति है और "आवृत्ति बैंड की ऊपरी सीमा है जिस पर हम शोर के नमूने उत्पन्न करेंगे"। डिजिटल फ़िल्टर गुणांक उनके समीकरणों (5.1) द्वारा दिए गए हैं: