Hi Underwood,<br><br>Thank you for your help. I agree with your opinion. But it is almost impossible<br>to further reduce the frequent difference between play and capture.<br><br>1. I used a 2^18 step FFT to analyse the echo frequency. So the freq resolution<br>&nbsp;is 8000HZ/(2^17)=0.0625Hz. The analyser need at least 2^18/8000=32 seconds<br>&nbsp;acoustic echo record signal from the microphone.<br>&nbsp;Better freq resolution relies on longer FFT and also longer record echo signal.<br>&nbsp;It is almost not possible for a practical system.<br>2. Better resampler with smaller step size is also a challenge in its performance.<br><br>So it is difficult to reduce the frequent difference further more. <br><br>About the change of sample rates of the ADC and DAC. I don't think it is a problem<br>if the ADC and DAC share the same clock.<br>The real problem is why they have different freq clock even if they if they are<br>assigned with the same sample rate.<br><br>For example:<br><br>1. for a pure hardware sound card.<br><br>There is a a crystal quartz oscillator and two PLL circuits which outputs are clock<br>sources of ADC and DAC respectively. <br><br>When the ADC and DAC are assigned with the same sample rate, two PLLs will share<br>the same sub-frequency coefficient, so their output signal will also have exactly<br>the same frequency.<br><br>2. for a AC97 or HD sound card.<br><br>The clock frequency of both their ADC and DAC is always 48KHZ(AC97) or 192KHZ(HD).<br>Then the outputs of ADC and DAC are resampled according to their assigned sample rate<br>by software. So they will also have exactly the same frequency when they are assigned<br>with the same sample rate.<br><br>NOW THE PROBLEM IS WHY MOST SOUND CARDS ALWAYS HAVE DIFFERENT SAMPLE RATE WHEN<br>BOTH THEIR ARE ASSIGNED WITH THE SAME PLAY AND CAPTURE RATE?<br><br>&gt;----------------------------------------------------------------------<br>&gt;<br>&gt;Message: 1<br>&gt;Date: Thu, 30 Sep 2010 21:27:59 +0800<br>&gt;From: Steve Underwood &lt;steveu@coppice.org&gt;<br>&gt;Subject: Re: [Speex-dev] Sound card problem in acoustic echo<br>&gt;To: speex-dev@xiph.org<br>&gt;Message-ID: &lt;4CA4905F.10106@coppice.org&gt;<br>&gt;Content-Type: text/plain; charset=UTF-8; format=flowed<br>&gt;<br>&gt;&nbsp; Hi,<br>&gt;<br>&gt;0.1Hz is still a *big* difference. It means the transmitted and received <br>&gt;samples are still sliding quite rapidly with respect to each other, and <br>&gt;that means the adaption is proceeding too fast to ever catch up and <br>&gt;eliminate all the echo. Ideally you need to eliminate all the frequency <br>&gt;mismatch, but you certainly need to get so close to that goal that the <br>&gt;creep rate is well within the capability of the adaption to keep up.<br>&gt;<br>&gt;Note that a one off measurement of the frequency difference is not <br>&gt;ideal. The DAC and ADC sample rates will change with temperature, and <br>&gt;not necessarily in the same direction.<br>&gt;<br>&gt;Steve<br>&gt;<br>&gt;On 09/30/2010 04:45 PM, LiMaoquan2000 wrote:<br>&gt;&gt;<br>&gt;&gt; Hi All,<br>&gt;&gt;<br>&gt;&gt; In order to deal with acoustic echo cancellation problems of most PCs <br>&gt;&gt; which<br>&gt;&gt; sound cards have different capture and play frequencies. I made a trial.<br>&gt;&gt;<br>&gt;&gt; At first, a 1000Hz sine wave is played for a long time via a speaker <br>&gt;&gt; and its<br>&gt;&gt; acoustic echo is recoreded.<br>&gt;&gt;<br>&gt;&gt; Seconds, get the frequency of the echo by a FFT analyser. So the <br>&gt;&gt; difference<br>&gt;&gt; between capture and play frequencies is obtained.<br>&gt;&gt;<br>&gt;&gt; Thirdly, before AEC, the signal captured by the soundcard is resampled <br>&gt;&gt; to the<br>&gt;&gt; play frequency. The frequency step of the resampler is 0.1Hz. So for <br>&gt;&gt; the AEC,<br>&gt;&gt; the difference between far-end signal and near-end signal is no more <br>&gt;&gt; than 0.1Hz.<br>&gt;&gt;<br>&gt;&gt; I have tested the speex AEC and my own AEC in a PC that the difference <br>&gt;&gt; between<br>&gt;&gt; its sound card is about 0.8Hz. They show the same result :<br>&gt;&gt;<br>&gt;&gt; WITHOUT the resampler, just a little acoustic echo is eliminated.<br>&gt;&gt; WITH the resampler, most acoustic echo is eliminated. But it still can <br>&gt;&gt; be heared<br>&gt;&gt; clearly, even though the echo is faint.<br>&gt;&gt;<br>&gt;&gt; This performance is still much worse than AEC in PCs which sound cards <br>&gt;&gt; have same<br>&gt;&gt; capture and play frequencies. There is almost no echo can be heard in <br>&gt;&gt; latter.<br>&gt;&gt;<br>&gt;&gt; Does anybody have advices to this problem? It's a common problem for <br>&gt;&gt; acoustic<br>&gt;&gt; echo cancellation in most computers, because most sound cards have <br>&gt;&gt; different<br>&gt;&gt; capture and play frequencies. It vital for all acoustic echo cancellers.<br>&gt;&gt;<br>&gt;&gt; Any advice is welcome.<br>&gt;&gt;<br>&gt;&gt; ----------------------------------------------------------------------<br>&gt;&gt;<br>&gt;&gt; &gt;Date: Sun, 25 Jul 2010 20:26:44 +0000 (GMT)<br>&gt;&gt; &gt;From: p_j_r_m &lt;p_j_r_m@yahoo.com &lt;mailto:p_j_r_m@yahoo.com&gt;&gt;<br>&gt;&gt; &gt;Subject: Re: [Speex-dev] Sound card problem in acoustic echo<br>&gt;&gt; &gt;To: speex-dev@xiph.org &lt;mailto:speex-dev@xiph.org&gt;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;Direct Sound AEC never worked for me, even when it did with Speex.?I <br>&gt;&gt; was told that after disabling effects in DS the play and record <br>&gt;&gt; streams could be synchronized,and then Speex AEC did the job.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;--- El vie, 23/7/10, limaoquan2000 &lt;limaoquan2000@126.com <br>&gt;&gt; &lt;mailto:limaoquan2000@126.com&gt;&gt; escribi?:<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;De: limaoquan2000 &lt;limaoquan2000@126.com &lt;mailto:limaoquan2000@126.com&gt;&gt;<br>&gt;&gt; &gt;Asunto: Re: [Speex-dev] Sound card problem in acoustic echo<br>&gt;&gt; &gt;Para: speex-dev@xiph.org &lt;mailto:speex-dev@xiph.org&gt;, <br>&gt;&gt; p_j_r_m@yahoo.com &lt;mailto:p_j_r_m@yahoo.com&gt;<br>&gt;&gt; &gt;Fecha: viernes, 23 de julio, 2010 22:42<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;I remember?I had to expose the echo cancelation level implementing a <br>&gt;&gt; get_echo_level( ) function based on this:<br>&gt;&gt; &gt;&gt;http://lists.xiph.org/pipermail/speex-dev/2008-September/006889.html<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;This is really a good idea to determine the frequency difference <br>&gt;&gt; between capture<br>&gt;&gt; &gt;and play of the sound card. But it need constant far-end voice and a <br>&gt;&gt; long time<br>&gt;&gt; &gt;because it must repeat the process of "resampling, test echo" for <br>&gt;&gt; many times.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;Have you tried the AEC in DirectSound? If this AEC is usable for all <br>&gt;&gt; sound cards,<br>&gt;&gt; &gt;perhaps microsoft has solved this problem already. Can we choose <br>&gt;&gt; proper options<br>&gt;&gt; &gt;of the DirectSound to solved this problem and disable its AEC at the <br>&gt;&gt; same time?<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;<br>&gt;&gt; &gt;&gt;Using that value and averaging samples as?"fedback" I did small <br>&gt;&gt; corrections to sampling rate until convergence, although this not <br>&gt;&gt; always worked.When it did, convergence was quite fast (seconds).<br>&gt;&gt; &gt;&gt;Resampling did not introduce noticiable CPU increase.But may be the <br>&gt;&gt; small time used for conversions was the cause of non-convergence.I <br>&gt;&gt; think this path is hard and uncertain,<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;and now,i would dive first in DirectSound to try to obtain <br>&gt;&gt; synchronized streams before passing them to speex.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;Waiting for your good news.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;Regarding ASIO, you have to install a special "driver"? for it to <br>&gt;&gt; work,and this seems unaceptable for general users.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;--- El jue, 22/7/10, limaoquan2000 &lt;limaoquan2000@126.com <br>&gt;&gt; &lt;mailto:limaoquan2000@126.com&gt;&gt; escribi:<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;Thank you.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;But it will cost you a long time to get the accurate play and <br>&gt;&gt; capture frequencies.<br>&gt;&gt; &gt;&gt;Does your program test two frequencies of the sound card each time <br>&gt;&gt; Because<br>&gt;&gt; &gt;&gt;different sound cards have different frequency errors.<br>&gt;&gt; &gt;&gt;And the resampling program is also time consuming because the target <br>&gt;&gt; frequency is<br>&gt;&gt; &gt;&gt;so close to the sampling frequency of the input signal, isn't it?<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;I have tested program based on Windows waveform functions and also <br>&gt;&gt; DirectSound.<br>&gt;&gt; &gt;&gt;They have similar frequency error.<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;BTW: What's your conclusion of ASIO driver? Why "it was of no <br>&gt;&gt; practical use"?<br>&gt;&gt; &gt;<br>&gt;&gt; &gt;&gt;&gt; I worked some time for a company doing AEC using Speex on <br>&gt;&gt; Windows.It is true it depends a lot on sound card models. I remember I <br>&gt;&gt; could do AEC by resampling frequencies so play and record frequencies <br>&gt;&gt; where equal.Frequencies where aprox 100Hz appart.Also, I know that on <br>&gt;&gt; other cases AEC was achieved by disabling FX DirectSound effects where <br>&gt;&gt; it wasn`t possible before that.Try to disable all you don't need <br>&gt;&gt; before calling Speex AEC function.<br>&gt;&gt; &gt;&gt;&gt; Also, I tried the ASIO driver,as an experiment. I think it worked, <br>&gt;&gt; but it was of no practical use.<br><br><br><br><span title="neteasefooter"><span id="netease_mail_footer"><hr/>
<a href="http://yxp.163.com/photo/ep.html?sss=fromyx0911" target="_blank">全国最低价,天天在家冲照片,24小时发货上门!</a>
</span></span>