पिंक (


20

(गुलाबी) शोर के लिए एक अच्छा छद्म यादृच्छिक सन्निकटन उत्पन्न करने के लिए कुछ एल्गोरिदम क्या हैं , फिर भी पूर्णांक डीएसपी पर कम कम्प्यूटेशनल लागत के साथ कार्यान्वयन के लिए उपयुक्त हैं?1/f


स्मृति के बारे में कैसे? यदि यह चिंता का विषय नहीं है, लेकिन संगणना है, तो मैं कहूंगा कि वांछित आवृत्ति वक्र का एक यादृच्छिक चरण iDFT करें और इसे अपने डिवाइस में स्थिर स्थिर तरंग के रूप में सहेजें।
लेफ्टरनैबाउट

@leftaroundabout - या यादृच्छिक सफ़ेद शोर के DFT को 1 / f फ़्रीक्वेंसी कर्व से गुणा किया जाएगा, तो IDFT करने से बेहतर यादृच्छिकता विशेषताएँ होती हैं?
हॉटपावर 2

1
व्हाइट शोर है अनिवार्य रूप से, लगातार समारोह के एक यादृच्छिक चरण IFT तो यह ज्यादा फर्क नहीं करना चाहिए।
लेफ्टरेंबाउट

जवाबों:


11

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

@ कोरटुक: उत्तर सामुदायिक विकि है, इसलिए स्वयं ऐसा करने के लिए स्वतंत्र महसूस करें! अन्य वेब सन्दर्भों की ओर इशारा करने के लिए पर्याप्त जानकारी होनी चाहिए (जैसे कि पहले विकल्प के लिए डेटजिस्ट का उत्तर )। मैं मानता हूं, हालांकि, अधिक विवरण अच्छा होगा।
पीटर के.एच.

20

रैखिक फ़िल्टरिंग

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

कोई सटीक (तर्कसंगत, परिमित-क्रम) फ़िल्टर नहीं है जो सफेद शोर से गुलाबी शोर पैदा कर सकता है। ऐसा इसलिए है क्योंकि फ़िल्टर का आदर्श आयाम प्रतिक्रिया अपरिमेय फ़ंक्शन 1 / ampl के आनुपातिक होना चाहिए , जहाँfHz में फ़्रीक्वेंसी को दर्शाता है। हालांकि, अनुमानित रूप से सटीक सहित किसी भी वांछित डिग्री के लिए गुलाबी शोर उत्पन्न करना काफी आसान है।1/ff

उनके द्वारा दिए गए फ़िल्टर के गुणांक निम्नानुसार हैं:

B = [0.049922035, -0.095993537, 0.050612699, -0.004408786];
A = [1, -2.494956002, 2.017265875, -0.522189400];

वे MATLAB फ़िल्टर फ़ंक्शन के मापदंडों के रूप में स्वरूपित किए गए हैं , इसलिए स्पष्टता के लिए, वे निम्नलिखित स्थानांतरण फ़ंक्शन के अनुरूप हैं:

H(z)=.041.096z1+.051z2.004z312.495z1+2.017z2.522z3

जाहिर है, व्यवहार में गुणांक के पूर्ण परिशुद्धता का उपयोग करना बेहतर है। यहाँ उस फ़िल्टर का उपयोग करके उत्पन्न होने वाले गुलाबी शोर की एक कड़ी है:

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

H(z)=1b1z11a1z1 1b2z11a2z1 1b3z11a3z1

where

b1=0.98223157, b2=0.83265661, b3=0.10798089
a1=0.99516897, a2=0.94384177, a3=0.55594526

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.


Any idea how he came up with these filter coefficients? I guess it's just a nonlinear fit to the desired slope, but I'd be quite interested to know if there is a more specific algorithm.
nibot

My best guess would be one of the approximation techniques mentioned in his thesis. It's a great read either way.
datageist

Wow, that is quite a document! Thanks for the link.
nibot

1
The problem with the filter white noise method is you don't get the same magnitude phase relationships as you do with an autocorrelated time series. Thus if you are trying to emulate natural processes you should not generate white noise and filter it. You should actually create autocorrelated noise as a time series, i.e. current value depends on previous value + noise. See in statistics "AR" processes. You can test this by generating noise using both methods, then FFT, and plot real versus imaginary (complex plane of the frequency domain). You'll notice a big difference in the pattern
Paul S

Hi Paul, welcome to DSP.SE. If you just care about how the noise sounds (in audio work, for example) then the magnitude spectrum is the primary concern. It would be great if you could detail your thoughts in a new answer, though. I don't think we have anything on the site describing that technique yet.
datageist

1

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.

PSD for 1/f noise via Corsini and Saletti algorithm


यह कोर्सीनी और सालेटी (सी एंड एस) शोर जनरेटर पर मेरी पिछली पोस्ट तक है। अगले दो आंकड़े बताते हैं कि 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 हर्ट्ज से अधिक था। एड वी Low frequency PSDs High frequency PSDs Comparing 2 1/f noise generators

कोर्सीनी और सालेट्टी के रूप में उनके पेपर में, सी10, कहाँ पे सी नमूना आवृत्ति है और "आवृत्ति बैंड की ऊपरी सीमा है जिस पर हम शोर के नमूने उत्पन्न करेंगे"। डिजिटल फ़िल्टर गुणांक उनके समीकरणों (5.1) द्वारा दिए गए हैं:

मैं=एक्सपी[-2π10(मैं-एन)/-γ/2-सी]
मैं=एक्सपी[-2π10(मैं-एन)/-सी]
जहाँ c = 1. ऊपर दिखाए गए लोगों की तरह C & S PSDs प्राप्त करने के लिए, c = 0 और =0.5सी


1
Corsini and Saletti state "This filter consists of N cascaded first-order sections, each with a real pole-zero pair" and the N poles are "uniformly distributed with respect to the frequency logarithm with a density of h poles per frequency decade (p/d), and the N zeros follow accordingly." The Discussion section of the paper was exceptionally nicely done, so there was no problem just programming what they said to do. All I have is my old hardcopy and a scanned copy of it. For the PSD above, I used 3 poles/decade and the PSD is mean-subtracted and unilateral. Ed V
Ed V
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.