2016-08-26 5 views
0

этот код иша модификации на примере adaptfilt2.0 эхоподавителяPython adaptfilt эхо-компенсатора пример с двумя .wav файлов

u(n) ------->->------+----------->->----------- 
         |      | 
       +-----------------+  +------------------+ 
      +->-| Adaptive filter |  | John's Room | 
      | +-----------------+  +------------------+ 
      |   | -y(n)     | 
      |   |   d(n)   | 
    e(n) ---+---<-<------+-----------<-<----------+----<-<---- v(n) 

мне нужно прочитать две волны звуковых файлов audio1.wav как сигнал Emily и AUDIO2 .wav, как сигнал Джона, дело в том, что код использует только 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() 

изображения показывает моя проблема

Emily

John's signal

Что плохого в коде, который не делает меня использовать оба сигнала?

+0

где вы показываете/использовать результат 'у, е, ш = adf.nlms (и, d, M, шаг, returnCoeffs = True) '? –

+0

Я не использовал результаты, потому что не нуждался в этом, но в основном это примерно так: plt.figure() plt.title ('Выход фильтра y (n)') plt.plot (y) plt .grid() plt.xlabel ('Образцы') –

ответ

0

Похоже, что у вас есть ошибка «скопировать и вставить». После прочтения audio2.wav, эта линия

v = np.float64(u) 

должен быть

v = np.float64(v) 

(Теперь, когда вы видите, что это тривиальная ошибка, не стесняйтесь, чтобы удалить ваш вопрос!)


P.S. Использование np.float64 работает, но идиоматический способ сделать это с NumPy является:

v = v.astype(np.float64) 
+0

Большое вам спасибо, извините за мою тупую ошибку. –

+0

@AlirioNoguera Иногда самые простые ошибки являются самыми трудными для просмотра! –