#python #opencv
Вопрос:
Я создал сигналы с шумом в коде python. Я сохранил их в массиве — new_array размером(10,17,199,1). Индекс 0 представляет диапазон частот, используемых для создания сигнала, индекс 1 представляет амплитуду, создаваемую этой частотой с различным добавленным шумом (в диапазоне от стандартного отклонения от 0,5 до 2,2 с шагом 0,1), индексы 2 и 3 представляют временную область, т. е. длину массива.
В настоящее время это то, что я произвожу при нормализации …
Мой вопрос в том, как я могу нормализовать сигнал? Когда я использую предварительную обработку, нормализация сигнала-это не то, что я ожидаю. У кого-нибудь есть какие-нибудь идеи? Я опубликовал свой код ниже.
import numpy as np
from sklearn import preprocessing
def frequency_labels(s_frequency):
L = []
for w, f2 in enumerate(s_frequency):
l = " {} Hz".format(f2)
print("f1=",f2)
L.append(l)
return L
def time_labels(time):
H = []
for r,t in enumerate(time):
h = " {} s".format(t)
H.append(h)
return H
def gaussian_noise(increment,len_time):
mean = 0
standard_deviation = np.arange(0.5,2.2,increment)
## want 8096 different noise signals of different standard deviations
sd = standard_deviation.reshape(len(standard_deviation),1)
noise = np.empty((len(sd), (len_time), (1)), dtype=np.float16)
for t, value in enumerate(sd):
noise[t] = np.random.normal(mean,value,len_time).reshape(len_time,1)
return(noise)
max_freq = 50
s_frequency = np.arange(20,30,1) # range of frequencies
fs = 200
time = np.arange(0,2-(1/fs),(1/fs))
amplitude = np.empty((len(time)), dtype=np.float16)
len_time = len(time)
len_frequency = len(s_frequency)
array = np.empty((len(time)), dtype=np.float16)
increment = 0.1 #0.00021
L = frequency_labels(s_frequency)
H = time_labels(time)
k = 0
noise = gaussian_noise(increment,len_time)
new_array = np.empty((len(s_frequency),(len(noise)),len(time),(1)),dtype=np.float16)
for f1 in s_frequency:
for i, t in enumerate(time):
amplitude[i] = np.sin(2*np.pi*f1*t)
amplitude = amplitude.reshape(len(time),1)
#n_amplitude = preprocessing.normalize(amplitude)
new_array[k] = np.add(noise,amplitude)
for r in range(17):
new_array[k,r,:,:] = preprocessing.normalize(new_array[k,r,:,:])
k = k 1
Ответ №1:
Для последней части кода я использовал (i), чтобы поместить его в диапазон от -1 до 1, и (ii), чтобы поместить его в диапазон от 0 до 1
(i) new_array[k,r,:,:] = new_array[k,r,:,:]/new_array[k,r,:,:].max(axis=0)
(ii) new_array[k,r,:,:] = (new_array[k,r,:,:] - new_array[k,r,:,:].min(0))/new_array[k,r,:,:].ptp(0)
Я нашел это решение на одном из форумов в Интернете.