मैं शोर संकेत के SNR की गणना कैसे करूं?


14

मुझे यह समझने में समस्या हो रही है कि इसे व्यावहारिक रूप से कैसे किया जाए

मेरे पास एक wav फ़ाइल है जिसमें शुद्ध भाषण और एक और ave फ़ाइल है जिसमें बस पृष्ठभूमि शोर शामिल है (विभिन्न चीजें हो सकती हैं, जैसे कि सफेद शोर, भीड़ का शोर, हवा बहने की रिकॉर्डिंग आदि)। ये या तो विशुद्ध रूप से भाषण हैं या विशुद्ध रूप से शोर हैं। इसलिए मुझे लगता है कि मैं दोनों फाइलों में संबंधित नमूनों (या नमूनों के एक फ्रेम के औसत) के सरल विभाजन द्वारा उनसे एक एसएनआर मूल्य प्राप्त कर सकता हूं। मैं फिर उन्हें एक शोर भाषण फ़ाइल प्राप्त करने के लिए दुस्साहस में संयोजित करता हूं। मुझे लगता है कि इस फाइल में अभी भी वही SNR होगा।

अब मैं अपने शोर में कमी कार्यक्रम के माध्यम से इस फाइल को पास करता हूं और परिणामस्वरूप दूसरी फाइल प्राप्त करता हूं। मैं इस "शोर कम" फ़ाइल के एसएनआर की गणना कैसे करूं?

--- संपादित करें ---

अनुवर्ती प्रश्न यहां पोस्ट किया गया

जवाबों:


8

एसएनआर की सामान्य परिभाषा शोर शक्ति द्वारा विभाजित वांछित संकेत की शक्ति है। मान लीजिए कि आपने सरणियों के रूप में वांछित और शोर संकेत प्राप्त किया है, शोर में कमी से पहले मतलाब में एसएनआर की गणना इस तरह की जा सकती है:

snr_before = mean( signal .^ 2 ) / mean( noise .^ 2 );
snr_before_db = 10 * log10( snr_before ) % in dB

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

residual_noise = signal - noise_reduced_signal; 
snr_after = mean( signal .^ 2 ) / mean( residual_noise .^ 2 ); 
snr_after_db = 10 * log10( snr_after )

1
सिग्नल और शोर_प्रमाणित_सिग्नल को आपके मामले में समय-संरेखित करना होगा।
dspGuru

@dspGuru सच, मैंने माना कि शोर में कमी एल्गोरिथ्म एक समय देरी का परिचय नहीं देता है।
एच.डी.

@ डस्पगुरु और देव: इन स्थानों में, पूरे संकेत के संस्करण और माध्य लेने के बजाय, क्या होगा यदि मैं संकेत के कुछ हिस्से को निर्दिष्ट करता हूं जिसमें निश्चित रूप से भाषण होता है? माटलाब में s \ उदाहरण के लिए, सिग्नल को सिग्नल (start_speech: end_speech) से बदलें क्योंकि मेरा संकेत शब्दों के बीच ठहराव के साथ 5 सेकंड लंबा है
user13267

@ user13267 किस संकेत के? शोर कम करने से पहले या बाद में? आमतौर पर, आप जिस संकेत का बेहतर विश्लेषण करते हैं वह SNR का आपका अनुमान होगा।
एच.डी.

वो दोनों। मेरा क्या मतलब है, मेरे ध्वनि नमूने में कुछ एक छोटा वाक्य है, इसलिए जब मैं इसे दुस्साहस में खोलता हूं तो मैं तरंग उच्च तीव्रता और कम तीव्रता वाले क्षेत्रों (शब्दों की उपस्थिति और मेरे विचार के बीच मौन) देख सकता हूं। इसलिए मैं सिर्फ उन नमूनों का चयन करना चाहता हूं जिनमें शब्द हैं और उन नमूनों को शामिल नहीं करना है जिनमें चुप्पी है।
user13267

3

इनपुट पक्ष पर:

  1. DB1 = 10 * log10 (var (शोरसाइनल)) की गणना करें)
  2. DB2 = 10 * log10 (var (cleanSpeechSignal)) की गणना करें

SNR = DB2 - DB1 है

आउटपुट पक्ष पर:

  1. अपने शोर दमन के माध्यम से स्वच्छ भाषण संकेत भेजें। आउटपुट Y1 को अस्वीकार करें।
  2. अपने शोर दमन अहंकार के माध्यम से शोर भाषण संकेत भेजें। उस आउटपुट Y2 को निरूपित करें।
  3. Z = Y2 - Y1 की गणना करें
  4. निवासस्थान = 10 * log10 (var (Z))
  5. speechDB = 10 * log10 (var (Y1))
  6. एसएनआर = स्पीचबीडी - अवशिष्ट नोइसेबीडी

क्या वास्तव में शोर में कमी एल्गोरिथ्म के माध्यम से स्वच्छ भाषण संकेत को पारित करना आवश्यक है? शोर में कमी एल्गोरिथ्म से पहले और बाद में भाषण संकेत समान नहीं होना चाहिए ताकि हमारे पास एक सामान्य संदर्भ बिंदु हो?
user13267

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

आउटपुट (जब स्वच्छ भाषण शोर में कमी एल्गोरिथ्म के माध्यम से पारित किया जाता है) वास्तव में इनपुट से मेल नहीं खाता है, लेकिन मुझे पूरा यकीन है कि एल्गोरिथ्म किसी भी देरी का परिचय नहीं देता है। कृपया मेरे अनुवर्ती प्रश्न की जाँच करें (लिंक इस प्रश्न में संपादित किया गया है)। इसमें शोर के घटने से पहले (आकृति के ऊपर) और बाद में (आंकड़े के नीचे) शोर में कमी के साथ स्वच्छ भाषण की तरंगें हैं। इसमें कोई देरी नहीं है, लेकिन बहुत अधिक प्रवर्धन है और कुछ भाषण को फ़िल्टर किया गया है।
user13267
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.