def getFreqBandOrValue(data, new_data, freq_value, global_max): # delete first row data = np.delete(data, 0, 0) # add new_data as a row at the end of data. columns=electrodes rows=timestep data = np.vstack([data, new_data]) # transpose the data numpy array data = np.transpose(data) # compute power spectrum of data f, ps = sps.welch(data, fs=26) # print the power spectrum print("ps", ps) # print the frequency print("f", f) extract_amplitude = [] # delta freq band if freq_value == -1: extract_amplitude = getAmplitudesByFrequencyBand(ps, 0) # theta freq band elif freq_value == -2: extract_amplitude = getAmplitudesByFrequencyBand(ps, 1) # alpha freq band elif freq_value == -3: extract_amplitude = getAmplitudesByFrequencyBand(ps, 2) # specific freq value wanted else: interval = [freq_value - 0.5, freq_value + 0.5] start_index = -1 end_index = -1 for i in range(len(f)): if interval[0] <= f[i] <= interval[1]: if start_index == -1: start_index = i else: end_index = i print("start ", start_index, f[start_index], "end ", end_index, f[end_index]) extract_amplitude = ps[:, start_index:end_index] # create a numpy array called temp temp = np.asarray(extract_amplitude) # temp holds mean of each row in extractAmplitude temp = np.mean(temp, axis=1) # calculate the maximum of the two values - called local_max local_max = max(np.amax(temp), global_max) # traverse through elements in the temp nuumpy array for i in range(len(temp)): # normalize all amplitudes by the global max temp[i] = temp[i] / local_max # return the temp, local_max, and data numpy arrays return [temp, local_max, data]
def getCmapByFreqVal(data, newdata, freqValue, globalMax): # delete first row data = np.delete(data, 0, 0) # add newdata as a row at the end of data. columns=electrodes rows=timestep data = np.vstack([data, newdata]) data = np.transpose(data) # compute power spectrum of data f, ps = sps.welch(data, fs=26) #print("ps", ps) #print("f", f) extractAmplitude = [] # delta freq band if (freqValue == -1): extractAmplitude = getAmplitudesByFrequencyBand(ps, 0) # theta freq band elif freqValue == -2: extractAmplitude = getAmplitudesByFrequencyBand(ps, 1) # alpha freq band elif freqValue == -3: extractAmplitude = getAmplitudesByFrequencyBand(ps, 2) # specific freq value wanted else: interval = [freqValue - 0.5, freqValue + 0.5] startIndex = -1 endIndex = -1 for i in range(len(f)): if interval[0] <= f[i] <= interval[1]: if startIndex == -1: startIndex = i else: endIndex = i #print("start ", startIndex, f[startIndex], # "end ", endIndex, f[endIndex]) extractAmplitude = ps[:, startIndex:endIndex] temp = np.asarray(extractAmplitude) # temp holds mean of each row in extractAmplitude temp = np.mean(temp, axis=1) localMax = max(np.amax(temp), globalMax) for i in range(len(temp)): # normalize all amplitudes by the global max temp[i] = temp[i] / localMax return [temp, localMax, data]
def getCmapForZscores(data, newdata, freqValue): # delete first row of data data = np.delete(data, 0, 0) # add newdata as a row at the end of data. columns=electrodes rows=timestep data = np.vstack([data, newdata]) data = np.transpose(data) # compute power spectrum of data f, ps = sps.welch(data, fs=26) #print("ps", ps) extractAmplitude = [] # delta freq band if (freqValue == -1): extractAmplitude = getAmplitudesByFrequencyBand(ps, 0) # theta freq band elif freqValue == -2: extractAmplitude = getAmplitudesByFrequencyBand(ps, 1) # alpha freq band elif freqValue == -3: extractAmplitude = getAmplitudesByFrequencyBand(ps, 2) # specific freq value wanted else: startIndex, endIndex = getInterval(f, freqValue) extractAmplitude = ps[:, startIndex:endIndex] temp = np.asarray(extractAmplitude) # temp holds mean of each row in extractAmplitude temp = np.mean(temp, axis=1) #print("temp", temp) # square all values to make them 0 <= x <= 1 temp = np.square(temp) # calculate zscores for the array zscoreArray = stats.zscore(temp) # next line creates positive and negative zscores, so if the value was between 0 to 0.5, it is # scaled to between -1 and 0, and if the value was between 0.5 and 1, it is scaled to between # 0 and 1 zscoreArray = np.power( (zscoreArray / np.amax(np.absolute(zscoreArray))), 3) / 2 + 0.5 return [zscoreArray, data]
def plotNodes(i): global data start_time = time.time() inlet = StreamInlet(streams[0]) # get a new sample sample = inlet.pull_sample() newdata = np.asarray(sample[0][:n]) # print(newdata) # delete first row of data data = np.delete(data, 0, 0) # add newdata as a row at the end of data. columns=electrodes rows=timestep data = np.vstack([data, newdata]) data = np.transpose(data) # compute power spectrum of data f, ps = sps.welch(data, fs=26) # get the amplitudes associated with the various bands of frequencies extractAmplitudeDelta = getAmplitudesByFrequencyBand(ps, 0) extractAmplitudeTheta = getAmplitudesByFrequencyBand(ps, 1) extractAmplitudeAlpha = getAmplitudesByFrequencyBand(ps, 2) tempDelta = np.asarray(extractAmplitudeDelta) tempTheta = np.asarray(extractAmplitudeTheta) tempAlpha = np.asarray(extractAmplitudeAlpha) # temp holds mean of each row in extractAmplitude tempDelta = np.mean(tempDelta, axis=1) tempTheta = np.mean(tempTheta, axis=1) tempAlpha = np.mean(tempAlpha, axis=1) # square all values to make them 0 <= x <= 1 tempDelta = np.square(tempDelta) tempTheta = np.square(tempTheta) tempAlpha = np.square(tempAlpha) # calculate zscores for the array zscoreArrayDelta = stats.zscore(tempDelta) zscoreArrayTheta = stats.zscore(tempTheta) zscoreArrayAlpha = stats.zscore(tempAlpha) sumOfZscores = zscoreArrayDelta + zscoreArrayTheta + zscoreArrayAlpha zscoreArrayDelta = np.divide(zscoreArrayDelta, sumOfZscores) zscoreArrayTheta = np.divide(zscoreArrayTheta, sumOfZscores) zscoreArrayAlpha = np.divide(zscoreArrayAlpha, sumOfZscores) # next line creates positive and negative zscores, so if the value was between 0 to 0.5, it is # scaled to between -1 and 0, and if the value was between 0.5 and 1, it is scaled to between # 0 and 1 zscoreArrayDelta = ( (zscoreArrayDelta / np.amax(zscoreArrayDelta)) / 2) + 0.5 zscoreArrayTheta = ( (zscoreArrayTheta / np.amax(zscoreArrayTheta)) / 2) + 0.5 zscoreArrayAlpha = ( (zscoreArrayAlpha / np.amax(zscoreArrayAlpha)) / 2) + 0.5 print(zscoreArrayAlpha) # define vectors for plot colors and opacity # altColors = freqs / 33 colorsDelta = cmap(zscoreArrayDelta) colorsTheta = cmap(zscoreArrayTheta) colorsAlpha = cmap(zscoreArrayAlpha) # colors.astype(float) # colors[:, -1] = maxes / maxes.max() # print(altColors) # print(colors) ax1.set_xlim(-6, 6) ax1.set_ylim(-6, 6) ax2.set_xlim(-6, 6) ax2.set_ylim(-6, 6) ax3.set_xlim(-6, 6) ax3.set_ylim(-6, 6) # ax1.scatter(x, y, s = 100, c = altColors, cmap = plt.cm.jet_r) ax1.scatter(x, y, s=100, c=colorsDelta) ax2.scatter(x, y, s=100, c=colorsTheta) ax3.scatter(x, y, s=100, c=colorsAlpha) elapsed_time = time.time() - start_time