В настоящее время я пытаюсь обработать голосовой сигнал. Я масштабировал вектор от -1 до 1. Мне удалось это сделать, но посмотрите на график полученного мной вектора. Мне нужно, чтобы этот сигнал был центрирован на 0, чтобы получить вектор признаков, который будет передан нейронной сети. Это немного ниже 0.
Как я могу масштабировать этот вектор между -1 и 1 и сохранить центрирование на 0?
Исходный сигнал: введите описание изображения здесь
Масштабированный сигнал: введите описание изображения здесь
Код и и нормализация функция:
samplerate, data = wavfile.read('avarii.wav')
times = np.arange(len(data))/float(samplerate)
print(times)
print(len(data))
print(samplerate)
# Make the plot
# You can tweak the figsize (width, height) in inches
#unit_vector = norm(data[:,1])
samples = data[:,1].tolist()
normalized_vector = norm(samples,-1,1)
#print(norm_vect)
plt.figure(figsize=(30, 4))
plt.plot(times,normalized_vector)
# plt.fill_between(times, data[:,0], data[:,1], color='k')
plt.xlim(times[0], times[-1])
plt.xlabel('time (s)')
plt.ylabel('amplitude')
# You can set the format by changing the extension
# like .pdf, .svg, .eps
plt.savefig('plot.png', dpi=100)
plt.show()
def norm(vector,a,b):
#normalized_vector = []
#standard_deviation = stdev(vector)
max_value = max(vector)
min_value = min(vector)
#average = sum(vector)/len(vector)
print(max_value)
print(min_value)
print(average)
for value in vector:
#value = value - average
norm_value = a + ((value - min_value)*(b-a))/(max_value - min_value)
normalized_vector.append(norm_value)
# for value in vector:
# normalized_vector.append((value - average)/standard_deviation)
# for value in vector:
# normalized_vector.append((value - min_value) / (max_value-min_value))
return normalized_vector
В заключение я хочу ограничить значения этих выборок между [-1,1] и центром в 0. Как я могу это сделать?