123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy.signal import butter, filtfilt
- def load_csv(file_path):
- try:
- with open(file_path, 'r', encoding='utf-8') as f:
- cleaned_lines = []
- for line in f:
- line = line.strip()
- if line.endswith(','):
- line = line[:-1]
- cleaned_lines.append(line)
- loaded_array = np.loadtxt(cleaned_lines, delimiter=',')
- if loaded_array.ndim == 1:
- loaded_array = loaded_array.reshape(-1, 1)
- return loaded_array
- except Exception as e:
- print(f"Could not load file:\n{e}")
- return -1
- arr = load_csv('output\\data_fixed.csv') # Load CSV
- tarr = np.transpose(arr)
- t = np.arange(0, 1152000, 12.5)
- envelope = np.abs(tarr[1])
- cutoff = 1000e3
- nyquist = 0.5 * 80e6
- order = 5
- b, a = butter(order, cutoff / nyquist, btype='low')
- filt_envelope = filtfilt(b, a, envelope)
- print(np.size(tarr[0]))
- startcut = round(0.1 * np.size(tarr[1]))
- endcut = round(0.5 * np.size(tarr[1]))
- demodulated_voltage = np.average(tarr)
- print(f'Start cut: {startcut}')
- print(f'End cut: {endcut}')
- print(f'Altitude demodulated: {demodulated_voltage}')
- i = startcut
- while np.abs(filt_envelope[i]) > np.abs(demodulated_voltage) * 0.3 and i < np.size(filt_envelope):
- i = i + 1
- delay = round((np.size(tarr[1]) - i) / 0.08)
- print(f'Delay: {delay} nS')
- plt.figure(figsize=(12,8))
- plt.subplot(2, 1, 1)
- plt.plot(t, tarr[1] * (10 / 65536))
- plt.title('RF Signal')
- plt.xlabel('Time, nS')
- plt.ylabel('Voltage, V')
- plt.grid(True)
- plt.subplot(2, 1, 1)
- plt.plot(t, filt_envelope * (10 / 65536))
- plt.title('Demodulate Signal')
- plt.xlabel('Time, nS')
- plt.ylabel('Voltage, V')
- plt.grid(True)
- plt.show()
|