def get_image_array(time_shift, size): time_offset = get_time_offset() + time_shift time_stamps = radar_data['time_stamp'] scan_data = radar_data['scan_data'] range_bins = radar_data['range_bins'] scan_data = np.array(scan_data).astype(float) #optional rcs need button for this ''' for elements in range(len(scan_data)): for elements2 in range(int(len(scan_data[0])*0.75)): scan_data[elements][elements2] = scan_data[elements][elements2] * ((range_bins[elements2] - range_offset) **4.0) ''' plat_pos = extract_platform_position() #plt.figure() #plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0],range_bins[-1],(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') #plt.figure() #plt.plot(plat_pos) plat_pos = linear_interp_nan(extract_time_stamp(),plat_pos)[1] refl_pos = extract_given_object() range_to_refl = np.sqrt((plat_pos[:,0] - refl_pos[0])**2 + (plat_pos[:,1] - refl_pos[1])**2 + (plat_pos[:,2] - refl_pos[2])**2) #plt.plot(range_to_refl, np.transpose(extract_time_stamp())) #plt.figure() #plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0],range_bins[-1],(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') #plt.colorbar() #plt.clim(60, 90) #plt.plot(range_to_refl, np.transpose(extract_time_stamp()-time_offset)) center = extract_given_object() #interpolation (aligning radar data and position values) new_x_pos = np.interp((time_stamps-time_stamps[0])/1000,np.transpose(extract_time_stamp()-time_offset).flatten(),plat_pos[:,0]) new_y_pos = np.interp((time_stamps-time_stamps[0])/1000,np.transpose(extract_time_stamp()-time_offset).flatten(),plat_pos[:,1]) new_z_pos = np.interp((time_stamps-time_stamps[0])/1000,np.transpose(extract_time_stamp()-time_offset).flatten(),plat_pos[:,2]) range_to_refl = np.sqrt((new_x_pos[:] - refl_pos[0])**2 + (new_y_pos[:] - refl_pos[1])**2 + (new_z_pos[:] - refl_pos[2])**2) #plt.figure() #plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0]-range_offset,range_bins[-1]-range_offset,(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') #plt.plot(range_to_refl, (time_stamps-time_stamps[0])/1000) interp_plat_pos = list() for elements in range(len(new_x_pos)): interp_plat_pos.append([new_x_pos[elements],new_z_pos[elements],new_y_pos[elements]]) interp_plat_pos = np.array(interp_plat_pos).squeeze() x_vec = np.linspace(-meters,meters,size) y_vec = np.linspace(-meters,meters,size) scan_data_final = scan_data[eyeballing_start_time:eyeballing_end_time,:] interp_plat_pos_final = interp_plat_pos[eyeballing_start_time:eyeballing_end_time,:] x_vec_new = x_vec+center[1] y_vec_new = y_vec+center[2] sar_image = interp_approach(scan_data_final, range_bins-range_offset, interp_plat_pos_final, x_vec_new, y_vec_new) #plt.figure() #plt.imshow((np.abs(sar_image)),extent=[x_vec_new[0], x_vec_new[-1], y_vec_new[-1], y_vec_new[0]],aspect = 'auto') return sar_image
#value: the value you are trying to find the nearest index to # #return: index of closest value in array to value def find_nearest(self,array,value): idx = np.searchsorted(array, value, side="left") if idx > 0 and (idx == len(array) or math.fabs(value - array[idx-1]) < math.fabs(value - array[idx])): return idx-1 else: return idx if __name__ == "__main__": from plotRTI import plotRTI from backprojection import interp_approach radar = RadarData() target = CornerReflector(.33,radar.radarWavelength,[0,5,0]) targets = [target] scans = [] totalRadarPos = [] for i in np.arange(0,2,.001): totalRadarPos.append([0,0,i]) radar.radarPos = [i,0,0] scans.append(radar.get_scan(targets)) plotRTI(scans) radar_data = [np.array(scans),totalRadarPos,radar.rangebins] interp_approach(radar_data,radar_data,[-3,3],[0,6],.2)
def main_func(self, param4, param5, param6, param7, param8, param9): self.meters = param4 self.size = param5 self.eyeballing_start_time = param6 self.eyeballing_end_time = param7 self.time_offset = param8 self.range_offset = param9 time_stamps = self.radar_data['time_stamp'] scan_data = self.radar_data['scan_data'] range_bins = self.radar_data['range_bins'] scan_data = np.array(scan_data).astype(float) #optional rcs need button for this ''' for elements in range(len(scan_data)): for elements2 in range(int(len(scan_data[0])*0.75)): scan_data[elements][elements2] = scan_data[elements][elements2] * ((range_bins[elements2] - self.range_offset) **4.0) ''' plat_pos = self.extract_platform_position() #plt.figure() #plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0],range_bins[-1],(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') #plt.figure() #plt.plot(plat_pos) plat_pos = self.linear_interp_nan(self.extract_time_stamp(), plat_pos)[1] refl_pos = self.extract_given_object() range_to_refl = np.sqrt((plat_pos[:, 0] - refl_pos[0])**2 + (plat_pos[:, 1] - refl_pos[1])**2 + (plat_pos[:, 2] - refl_pos[2])**2) #plt.plot(range_to_refl, np.transpose(extract_time_stamp())) #plt.figure() #plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0],range_bins[-1],(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') #plt.colorbar() #plt.clim(60, 90) #plt.plot(range_to_refl, np.transpose(extract_time_stamp()-time_offset)) center = self.extract_given_object() print(center) #interpolation (aligning radar data and position values) new_x_pos = np.interp((time_stamps - time_stamps[0]) / 1000, np.transpose(self.extract_time_stamp() - self.time_offset).flatten(), plat_pos[:, 0]) new_y_pos = np.interp((time_stamps - time_stamps[0]) / 1000, np.transpose(self.extract_time_stamp() - self.time_offset).flatten(), plat_pos[:, 1]) new_z_pos = np.interp((time_stamps - time_stamps[0]) / 1000, np.transpose(self.extract_time_stamp() - self.time_offset).flatten(), plat_pos[:, 2]) range_to_refl = np.sqrt((new_x_pos[:] - refl_pos[0])**2 + (new_y_pos[:] - refl_pos[1])**2 + (new_z_pos[:] - refl_pos[2])**2) #plt.figure() #plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0]-range_offset,range_bins[-1]-range_offset,(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') #plt.plot(range_to_refl, (time_stamps-time_stamps[0])/1000) interp_plat_pos = list() for elements in range(len(new_x_pos)): interp_plat_pos.append([ new_x_pos[elements], new_z_pos[elements], new_y_pos[elements] ]) interp_plat_pos = np.array(interp_plat_pos).squeeze() x_vec = np.linspace(-self.meters, self.meters, self.size) y_vec = np.linspace(-self.meters, self.meters, self.size) scan_data_final = scan_data[ self.eyeballing_start_time:self.eyeballing_end_time, :] interp_plat_pos_final = interp_plat_pos[ self.eyeballing_start_time:self.eyeballing_end_time, :] x_vec_new = x_vec + center[1] y_vec_new = y_vec + center[2] sar_image = interp_approach(scan_data_final, range_bins - self.range_offset, interp_plat_pos_final, x_vec_new, y_vec_new) f = Figure(figsize=(5, 5), dpi=100) ax = f.add_subplot(111) img = ax.imshow( 20 * np.log10((np.abs(sar_image))), extent=[x_vec_new[0], x_vec_new[-1], y_vec_new[-1], y_vec_new[0]], aspect='auto') return (f, ax, img)
motion_end = 29545 #Aligns data, currently using frames given in function definition aligned_data = align_data(radar_data, motion_data, radar_start, motion_start, motion_end, 100, 3500) WrongRadarPosition = aligned_data[1] #Actual position of radar in 3D space PulseData = aligned_data[0] #Data of all pulses in file RangeBins = radar_data[ 2] #Distance in meters between the sampling rate of PulseData #Plots aligned graph AlignedGraph(aligned_data, radar_data) #Calculates and plots BackProjected Image IntensityList = BackProjection(aligned_data, radar_data, [-4, 0], [4, 4], 0.01) #IntensityList = read_intensity('../Raw_Data/intensity2.csv') #Deconvolutes image and plots images deconvolute(IntensityList, IterationNumber=3, PercentageMin=1 / 5.5) ''' #Currently unused code #Calculates backprojected image using Ramu's algorithm interp_approach(aligned_data,radar_data,[-3,3],[-3,3],.1) #Reads in an intensity list and saves it as an intensity list IntensityList = read_intensity('../Raw_Data/intensity2.csv') '''
plt.figure() plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0],range_bins[-1],(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') plt.colorbar() plt.clim(60, 90) plt.plot(range_to_refl, np.transpose(extract_time_stamp()-time_offset)) center = extract_given_object() new_x_pos = np.interp((time_stamps-time_stamps[0])/1000,np.transpose(extract_time_stamp()-time_offset).flatten(),plat_pos[:,0]) new_y_pos = np.interp((time_stamps-time_stamps[0])/1000,np.transpose(extract_time_stamp()-time_offset).flatten(),plat_pos[:,1]) new_z_pos = np.interp((time_stamps-time_stamps[0])/1000,np.transpose(extract_time_stamp()-time_offset).flatten(),plat_pos[:,2]) range_to_refl = np.sqrt((new_x_pos[:] - refl_pos[0])**2 + (new_y_pos[:] - refl_pos[1])**2 + (new_z_pos[:] - refl_pos[2])**2) plt.figure() plt.imshow(20 * np.log10(np.abs(scan_data)),extent=[range_bins[0]-range_offset,range_bins[-1]-range_offset,(time_stamps[-1]-time_stamps[0])/1000,0],aspect = 'auto') plt.plot(range_to_refl, (time_stamps-time_stamps[0])/1000) interp_plat_pos = list() for elements in range(len(new_x_pos)): interp_plat_pos.append([new_x_pos[elements],new_z_pos[elements],new_y_pos[elements]]) interp_plat_pos = np.array(interp_plat_pos).squeeze() x_vec = np.linspace(-meters,meters,size) y_vec = np.linspace(-meters,meters,size) scan_data_final = scan_data[eyeballing_start_time:eyeballing_end_time,:] interp_plat_pos_final = interp_plat_pos[eyeballing_start_time:eyeballing_end_time,:] x_vec_new = x_vec+center[1] y_vec_new = y_vec+center[2] sar_image = interp_approach(scan_data_final, range_bins-range_offset, interp_plat_pos_final, x_vec_new, y_vec_new) plt.figure() plt.imshow((np.abs(sar_image)),extent=[x_vec_new[0], x_vec_new[-1], y_vec_new[-1], y_vec_new[0]],aspect = 'auto')