ऑडियो सिस्टम से गूंज को पहचानने और हटाने के लिए किन तरीकों का इस्तेमाल किया जा सकता है?


14

पृष्ठभूमि

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

मुझे माइक्रोफोन द्वारा उठाए जा रहे स्पीकर से ऑडियो की चिंता है और मूल व्यक्ति को वापस भेज दिया गया है। मैं वीओआईपी वार्तालापों के शुरुआती दिनों में हर समय ऐसा सुनता था, लेकिन शायद ही इसे कोई और सुनता हो।

मेरी धारणा यह है कि समूह गूंज को रद्द करने के तरीकों के साथ आए हैं, लेकिन वे इसे कैसे करते हैं?

दृष्टिकोण

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

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

मेरा अगला विचार यह है कि इंटरनेट पर कोई ऐसा व्यक्ति होना चाहिए जिसने सफलता से पहले ऐसा किया हो, लेकिन कोई महान उदाहरण नहीं मिला। इसलिए मैं यहां आता हूं कि इस प्रकार के मुद्दे को हल करने के लिए किन तरीकों का इस्तेमाल किया जा सकता है।


1
ध्वनिक इको कैंसिलेशन एक बड़ा विषय क्षेत्र है जिसमें कई किताबें और दशकों के शोध पत्र शामिल हैं। इस विषय पर एक SO Q & A है: stackoverflow.com/questions/3403152/acoustic-echo-cancellation-in-java
hotpaw2

1
@ hotpaw2 सुनिश्चित नहीं है कि जावा लिंक में आपका ध्वनिक गूंज रद्द करने योग्य क्यों नहीं है।
मार्क बूथ 12

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

जवाबों:


15

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

अनुकूली फिल्टर

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

यहाँ छवि विवरण दर्ज करें

आप चित्र से देख सकते हैं, संकेत द्वारा फ़िल्टर किया जाता है (के साथ convolved) डब्ल्यू एन उत्पादन आउटपुट संकेत करने के लिए [ एन ] । हम तो घटाना [ एन ] से वांछित संकेत [ एन ] के उत्पादन के लिए त्रुटि संकेत [ एन ] । ध्यान दें कि w n गुणांक का एक वेक्टर है, न कि एक संख्या (इसलिए हम w नहीं लिखते हैं [ n ]x[n]wnd^[n]d^[n]d[n]e[n]wnw[n] )। क्योंकि यह हर पुनरावृत्ति (हर नमूना) को बदलता है, हम इन गुणांक के वर्तमान संग्रह को सबस्क्रिप्ट करते हैं । एक बार e [ n ] प्राप्त होने के बाद हम इसे अपडेट करने के लिए उपयोग करते हैंne[n]की पसंद के अपडेट एल्गोरिदम द्वारा (उस पर बाद में)। इनपुट और आउटपुट एक रैखिक संबंध है कि समय के साथ बदल नहीं करता है को संतुष्ट है और एक अच्छी तरह से डिजाइन अद्यतन एल्गोरिथ्म दिया, तोडब्ल्यू एनअंत में इष्टतम फिल्टर और करने के लिए अभिसरण जाएगा [एन]wnwnd^[n] निम्नलिखित बारीकी से किया जाएगा d[n]

गूंज रद्दीकरण

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

enter image description here

x[n]d[n]wnx[n]y[n]d[n]e[n]=d[n]y[n]

wn

xn=(x[n],x[n1],,x[nN+1])T

Nwnx

wn=(w[0],w[1],,x[N1])T

Then we calculate y[n] via (by convolution) finding the inner product (dot product if both signals are real) of =xn and =wn:

y[n]=xnTwn=xnwn

Now that we can calculate the error, we’re using a normalized gradient descent method for minimizing it. We get the following update rule for w:

wn+1=wn+μxne[n]xnTxn=wn+μxnxnTwnd[n]xnTxn

where μ is the adaptation step size such that 0μ2.

Real life applications and challenges

Several things can present difficulty with this method of echo cancellation. First of all, like mentioned before, it is not always true that the other person is silent whilst they receive your “hello” signal. It can be shown (but is beyond the scope of this reply) that in some cases it can still be useful to estimate the impulse response while there is a significant amount of input present on the other end of the line because input signal and echo are assumed to be statistically independent; therefore, minimizing the error will still be a valid procedure. In general, a more sophisticated system is needed to detect good time intervals for echo estimation.

On the other hand, think of what happens when you’re trying to estimate echo when the received signal is approximately silence (noise, actually). In absence of a meaningful input signal, the adaptive algorithm will diverge and quickly start producing meaningless results, culminating eventually in a random echo patter. This means that we also need to take into consideration speech detection. Modern echo cancellers look more like the figure below, but above description is the jist of it.

enter image description here

There are plenty of literature on both adaptive filters and echo cancellation out there, as well as some open source libraries you can tap into.


2
"the adaptive filter's job is to the signal"? You accidentally a word.
endolith

@endolith Thanks. I couldn't think of a nice way of fixing it, so I used alter. You're welcome to edit it with something more interesting. = )
Phonon

3

I am not sure how to determine what the delay is with out some sort of pre-calibration

I would start by modifying an acoustic fingerprinting algorithm such as the one used by Shazam.

Your requirements are similar to Shazam's in many ways (the features must survive a compression algorithm designed for telephony, they also pass through low-quality microphones) so you could probably use the same features (local maxima of power in time/frequency space) though you might want to increase time resolution at the expense of frequency resolution.

There is also the issue of how much to scale the signal by before subtracting it.

Uniform scaling will almost certainly not be accurate enough. You would need to do something like approximating the frequency response with a FIR filter then passing your (delayed) mic signal through the inverted filter before subtracting it from the received signal.


Shazam fingerprinting cannot produce accurate delay approximation. It uses many complex feature extraction processes for comparing audio samples, not all of which are time-based.
Phonon

@Phonon, Shazam may be using additional algorithms now, but the one in the linked paper is time-based and gives a good estimate of the delay.
finnw

Maybe something like cross-correlation of the sent and received spectrograms would tell you the delay. Should be resistant to effects of filtering and added noise
endolith
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.