[0.5], np.zeros(11), [-0.3], np.zeros(3), [0.1], np.zeros(20), [-0.05])) d = np.convolve(u, coeffs) # Add background noise v = np.random.randn(len(d)) * np.sqrt(5000) d += v # Apply adaptive filter M = 100 # Number of filter taps in adaptive filter step = 0.1 # Step size y, e, w = adf.nlms(u, d, M, step, returnCoeffs=True) # Calculate mean square weight error mswe = adf.mswe(w, coeffs) # Plot speech signals plt.figure() plt.title("Speech signals") plt.plot(u, label="Emily's speech signal, u(n)") plt.plot(d, label="Speech signal from John, d(n)") plt.grid() plt.legend() plt.xlabel('Samples') # Plot error signal - note how the measurement noise affects the error plt.figure() plt.title('Error signal e(n)') plt.plot(e) plt.grid()
d = np.round(d,0) # Hear how the mixed signal sounds before proceeding with the filtering. dsound = d.astype('int16') wavfile.write(waveout, lfs, dsound) music = pyglet.resource.media('output.wav') music.play() time.sleep(len(dsound)/lfs) # Apply adaptive filter y, e, w = adf.nlms(snd[:len(d)], d, tap, step, returnCoeffs=True) # The algorithm stores the processed result in the variable 'e', which is the mix of the error signal and the listener's voice. # Hear how e sounds now. Ideally we on behalf of the sender, should hear only the listener's voice. Practically, some echo would still be present. e = e.astype('int16') wavfile.write('adapt.wav', lfs, e) music = pyglet.resource.media(filtout) music.play() time.sleep(len(e)/lfs) # Calculate and plot the mean square weight error mswe = adf.mswe(w, coeffs) plt.figure() plt.title('Mean squared weight error') plt.plot(mswe) plt.grid() plt.xlabel('Samples') plt.show()
coeffs = np.concatenate(([-4, 3.2], np.zeros(20), [0.7], np.zeros(33), [-0.1])) u = np.random.randn(N) d = np.convolve(u, coeffs) # Perform filtering M = 60 # No. of taps to estimate mu1 = 0.0008 # Step size 1 in LMS mu2 = 0.0004 # Step size 1 in LMS beta1 = 0.08 # Step size 2 in NLMS and AP beta2 = 0.04 # Step size 2 in NLMS and AP K = 3 # Projection order 1 in AP # LMS y_lms1, e_lms1, w_lms1 = adf.lms(u, d, M, mu1, returnCoeffs=True) y_lms2, e_lms2, w_lms2 = adf.lms(u, d, M, mu2, returnCoeffs=True) mswe_lms1 = adf.mswe(w_lms1, coeffs) mswe_lms2 = adf.mswe(w_lms2, coeffs) # NLMS y_nlms1, e_nlms1, w_nlms1 = adf.nlms(u, d, M, beta1, returnCoeffs=True) y_nlms2, e_nlms2, w_nlms2 = adf.nlms(u, d, M, beta2, returnCoeffs=True) mswe_nlms1 = adf.mswe(w_nlms1, coeffs) mswe_nlms2 = adf.mswe(w_nlms2, coeffs) # AP y_ap1, e_ap1, w_ap1 = adf.ap(u, d, M, beta1, K, returnCoeffs=True) y_ap2, e_ap2, w_ap2 = adf.ap(u, d, M, beta2, K, returnCoeffs=True) mswe_ap1 = adf.mswe(w_ap1, coeffs) mswe_ap2 = adf.mswe(w_ap2, coeffs) # Plot results