kopia lustrzana https://github.com/projecthorus/radiosonde_auto_rx
				
				
				
			
		
			
				
	
	
		
			72 wiersze
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			72 wiersze
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
| #!/usr/bin/env python
 | |
| #
 | |
| # auto_rx debug utils - Plot an rtl_power output file.
 | |
| #
 | |
| # Usage: python plot_rtl_power.py log_power.csv
 | |
| # Requires Numpy & Matplotlib
 | |
| #
 | |
| import matplotlib.pyplot as plt
 | |
| import numpy as np
 | |
| from StringIO import StringIO
 | |
| import sys
 | |
| 
 | |
| # Need to keep this in sync with auto_rx.py as we're not set up to do relative imports yet.
 | |
| def read_rtl_power(filename):
 | |
|     """ Read in frequency samples from a single-shot log file produced by rtl_power """
 | |
| 
 | |
|     # Output buffers.
 | |
|     freq = np.array([])
 | |
|     power = np.array([])
 | |
| 
 | |
|     freq_step = 0
 | |
| 
 | |
| 
 | |
|     # Open file.
 | |
|     f = open(filename,'r')
 | |
| 
 | |
|     # rtl_power log files are csv's, with the first 6 fields in each line describing the time and frequency scan parameters
 | |
|     # for the remaining fields, which contain the power samples. 
 | |
| 
 | |
|     for line in f:
 | |
|         # Split line into fields.
 | |
|         fields = line.split(',')
 | |
| 
 | |
|         if len(fields) < 6:
 | |
|             logging.error("Invalid number of samples in input file - corrupt?")
 | |
|             raise Exception("Invalid number of samples in input file - corrupt?")
 | |
| 
 | |
|         start_date = fields[0]
 | |
|         start_time = fields[1]
 | |
|         start_freq = float(fields[2])
 | |
|         stop_freq = float(fields[3])
 | |
|         freq_step = float(fields[4])
 | |
|         n_samples = int(fields[5])
 | |
| 
 | |
|         #freq_range = np.arange(start_freq,stop_freq,freq_step)
 | |
|         samples = np.loadtxt(StringIO(",".join(fields[6:])),delimiter=',')
 | |
|         freq_range = np.linspace(start_freq,stop_freq,len(samples))
 | |
| 
 | |
|         # Add frequency range and samples to output buffers.
 | |
|         freq = np.append(freq, freq_range)
 | |
|         power = np.append(power, samples)
 | |
| 
 | |
|     f.close()
 | |
| 
 | |
|     # Sanitize power values, to remove the nan's that rtl_power puts in there occasionally.
 | |
|     power = np.nan_to_num(power)
 | |
| 
 | |
|     return (freq, power, freq_step)
 | |
| 
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	filename = sys.argv[1]
 | |
| 
 | |
| 	(freq, power, freq_step) = read_rtl_power(filename)
 | |
| 
 | |
| 	plt.plot(freq/1e6, power)
 | |
| 	plt.xlabel("Frequency (MHz)")
 | |
| 	plt.ylabel("Power (dB?)")
 | |
| 	plt.title("rtl_power output: %s" % filename)
 | |
| 	plt.show()
 | |
| 
 |