此代码是对adaptfilt2.0 echo canceller
示例的修改 u(n) ------->->------+----------->->-----------
| |
+-----------------+ +------------------+
+->-| Adaptive filter | | John's Room |
| +-----------------+ +------------------+
| | -y(n) |
| | d(n) |
e(n) ---+---<-<------+-----------<-<----------+----<-<---- v(n)
我需要阅读两个wave音频文件audio1.wav喜欢emily的信号和audio2.wav喜欢john的信号,问题是代码只使用audio1.wav而不读audio2.wav在这个过程中,所以当代码运行时,只使用audio1.wav表示u(n)和v(n),而不是将audio2.wav赋值给变量v(n)。
import numpy as np
import matplotlib.pyplot as plt
import adaptfilt as adf
import pyaudio
import wave
np.seterr(all='raise')
p = pyaudio.PyAudio()
stream = p.open(format = p.get_format_from_width(2),
channels = 1,
rate = 44100,
input = True,
output = True,
# stream_callback =callback
)
#Read U
wf1 = wave.open("audio1.wav", 'r')
data= wf1.readframes(1024)
u = np.fromstring(data, np.int16)
u = np.float64(u)
#read V
wf2= wave.open("audio2.wav", 'r')
data2= wf2.readframes(1024)
v= np.fromstring(data2, np.int16)
v = np.float64(u)
#both signals
d = u+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)
plt.figure()
plt.title('Em u(n)')
plt.plot(u)
plt.grid()
plt.xlabel('Samples')
plt.figure()
plt.title('john v(n)')
plt.plot(v)
plt.grid()
plt.xlabel('Samples')
plt.show()
图像显示我的问题
代码中有什么问题不能让我同时使用这两种信号?
答案 0 :(得分:0)
看起来你有一个&#34;复制并粘贴&#34;错误。阅读audio2.wav
后,这一行
v = np.float64(u)
应该是
v = np.float64(v)
(现在您发现这是一个微不足道的错误,请随时删除您的问题!)
P.S。使用np.float64
有效,但用numpy执行此操作的惯用方法是:
v = v.astype(np.float64)