|
@@ -3,6 +3,7 @@ import scipy.interpolate as interp
|
|
|
import msgpack
|
|
import msgpack
|
|
|
import json
|
|
import json
|
|
|
import socket
|
|
import socket
|
|
|
|
|
+import time as tm
|
|
|
|
|
|
|
|
class ServerSimulator:
|
|
class ServerSimulator:
|
|
|
def __init__(self):
|
|
def __init__(self):
|
|
@@ -71,29 +72,33 @@ class ServerSimulator:
|
|
|
|
|
|
|
|
|
|
|
|
|
def acceptCommand(self):
|
|
def acceptCommand(self):
|
|
|
- rawdata = self.conn.recv(4096)
|
|
|
|
|
-
|
|
|
|
|
- # Check if data is received
|
|
|
|
|
- if not rawdata:
|
|
|
|
|
- return False
|
|
|
|
|
-
|
|
|
|
|
- # Unpack data using msgpack
|
|
|
|
|
- self.data = msgpack.unpackb(rawdata, raw=False)
|
|
|
|
|
- if self.data["magic"] != self.magic:
|
|
|
|
|
- print("Invalid magic byte")
|
|
|
|
|
- self.errCode = 0x00000051 # Invalid magic byte
|
|
|
|
|
- self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid magic byte"))
|
|
|
|
|
- return False
|
|
|
|
|
- if self.data["cmd"] not in self.cmd_dict.keys():
|
|
|
|
|
- print("Invalid command")
|
|
|
|
|
- self.errCode = 0x00000052 # Invalid command
|
|
|
|
|
- self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid command"))
|
|
|
|
|
- return False
|
|
|
|
|
- print(f"Received command: {self.data['cmd']}")
|
|
|
|
|
|
|
+ try:
|
|
|
|
|
+ rawdata = self.conn.recv(4096)
|
|
|
|
|
+
|
|
|
|
|
+ # Check if data is received
|
|
|
|
|
+ if not rawdata:
|
|
|
|
|
+ return 2
|
|
|
|
|
+
|
|
|
|
|
+ # Unpack data using msgpack
|
|
|
|
|
+ self.data = msgpack.unpackb(rawdata, raw=False)
|
|
|
|
|
+ if self.data["magic"] != self.magic:
|
|
|
|
|
+ print("Invalid magic byte")
|
|
|
|
|
+ self.errCode = 0x00000051 # Invalid magic byte
|
|
|
|
|
+ self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid magic byte"))
|
|
|
|
|
+ return 2
|
|
|
|
|
+ if self.data["cmd"] not in self.cmd_dict.keys():
|
|
|
|
|
+ print("Invalid command")
|
|
|
|
|
+ self.errCode = 0x00000052 # Invalid command
|
|
|
|
|
+ self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid command"))
|
|
|
|
|
+ return 2
|
|
|
|
|
+ print(f"Received command: {self.data['cmd']}")
|
|
|
|
|
|
|
|
- # Process command
|
|
|
|
|
- self.cmd = self.data["cmd"]
|
|
|
|
|
- self.cmd_dict[self.cmd](self.data)
|
|
|
|
|
|
|
+ # Process command
|
|
|
|
|
+ self.cmd = self.data["cmd"]
|
|
|
|
|
+ self.cmd_dict[self.cmd](self.data)
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ print(f"Exception: {e}")
|
|
|
|
|
+ return False
|
|
|
|
|
|
|
|
return True
|
|
return True
|
|
|
|
|
|
|
@@ -102,7 +107,7 @@ class ServerSimulator:
|
|
|
print("Missing event parameters")
|
|
print("Missing event parameters")
|
|
|
self.errCode = 0x00000001 # Missing parameters
|
|
self.errCode = 0x00000001 # Missing parameters
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing event parameters"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing event parameters"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
|
|
|
|
|
event = {
|
|
event = {
|
|
|
"start_time": data["time"],
|
|
"start_time": data["time"],
|
|
@@ -115,63 +120,64 @@ class ServerSimulator:
|
|
|
"rf_end": data["rf_end"],
|
|
"rf_end": data["rf_end"],
|
|
|
"time_front_adc_trigger": data["time_front_adc_trigger"],
|
|
"time_front_adc_trigger": data["time_front_adc_trigger"],
|
|
|
"time_back_adc_trigger": data["time_back_adc_trigger"],
|
|
"time_back_adc_trigger": data["time_back_adc_trigger"],
|
|
|
|
|
+ "phase_offset": data["phase_offset"]
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if event["start_time"] < self.time:
|
|
if event["start_time"] < self.time:
|
|
|
print("Event start time is in the past")
|
|
print("Event start time is in the past")
|
|
|
self.errCode = 0x00000002 # Event in the past
|
|
self.errCode = 0x00000002 # Event in the past
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Event start time is in the past"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Event start time is in the past"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["time_front_rf_trigger"] < 0 or event["time_back_rf_trigger"] < 0 or event["rf_start"] < 0 or event["rf_end"] < 0:
|
|
if event["time_front_rf_trigger"] < 0 or event["time_back_rf_trigger"] < 0 or event["rf_start"] < 0 or event["rf_end"] < 0:
|
|
|
print("RF trigger times and delays must be non-negative")
|
|
print("RF trigger times and delays must be non-negative")
|
|
|
self.errCode = 0x00000003 # Negative times
|
|
self.errCode = 0x00000003 # Negative times
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF trigger times and delays must be non-negative"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF trigger times and delays must be non-negative"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["time_front_adc_trigger"] < 0 or event["time_back_adc_trigger"] < 0:
|
|
if event["time_front_adc_trigger"] < 0 or event["time_back_adc_trigger"] < 0:
|
|
|
print("ADC trigger times must be non-negative")
|
|
print("ADC trigger times must be non-negative")
|
|
|
self.errCode = 0x00000004 # Negative times
|
|
self.errCode = 0x00000004 # Negative times
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "ADC trigger times must be non-negative"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "ADC trigger times must be non-negative"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["time_front_rf_trigger"] > event["duration"] or event["time_back_rf_trigger"] > event["duration"]:
|
|
if event["time_front_rf_trigger"] > event["duration"] or event["time_back_rf_trigger"] > event["duration"]:
|
|
|
print("RF trigger times must be within event duration")
|
|
print("RF trigger times must be within event duration")
|
|
|
self.errCode = 0x00000005 # RF trigger times out of bounds
|
|
self.errCode = 0x00000005 # RF trigger times out of bounds
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF trigger times must be within event duration"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF trigger times must be within event duration"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["rf_start"] > event["duration"] or event["rf_end"] > event["duration"]:
|
|
if event["rf_start"] > event["duration"] or event["rf_end"] > event["duration"]:
|
|
|
print("RF start and end times must be within event duration")
|
|
print("RF start and end times must be within event duration")
|
|
|
self.errCode = 0x00000006 # RF start/end times out of bounds
|
|
self.errCode = 0x00000006 # RF start/end times out of bounds
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF start and end times must be within event duration"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF start and end times must be within event duration"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["time_front_adc_trigger"] > event["duration"] or event["time_back_adc_trigger"] > event["duration"]:
|
|
if event["time_front_adc_trigger"] > event["duration"] or event["time_back_adc_trigger"] > event["duration"]:
|
|
|
print("ADC trigger times must be within event duration")
|
|
print("ADC trigger times must be within event duration")
|
|
|
self.errCode = 0x00000007 # ADC trigger times out of bounds
|
|
self.errCode = 0x00000007 # ADC trigger times out of bounds
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "ADC trigger times must be within event duration"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "ADC trigger times must be within event duration"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["time_front_rf_trigger"] < event["time_back_rf_trigger"]:
|
|
if event["time_front_rf_trigger"] < event["time_back_rf_trigger"]:
|
|
|
print("RF triggers and delays overlap")
|
|
print("RF triggers and delays overlap")
|
|
|
self.errCode = 0x00000008 # RF triggers overlap
|
|
self.errCode = 0x00000008 # RF triggers overlap
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF triggers and delays overlap"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF triggers and delays overlap"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["time_front_adc_trigger"] < event["time_back_adc_trigger"]:
|
|
if event["time_front_adc_trigger"] < event["time_back_adc_trigger"]:
|
|
|
print("ADC triggers overlap")
|
|
print("ADC triggers overlap")
|
|
|
self.errCode = 0x00000009 # ADC triggers overlap
|
|
self.errCode = 0x00000009 # ADC triggers overlap
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "ADC triggers overlap"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "ADC triggers overlap"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["rf_start"] > event["rf_end"]:
|
|
if event["rf_start"] > event["rf_end"]:
|
|
|
print("RF start and end times overlap")
|
|
print("RF start and end times overlap")
|
|
|
self.errCode = 0x0000000A # RF start/end times overlap
|
|
self.errCode = 0x0000000A # RF start/end times overlap
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF start and end times overlap"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF start and end times overlap"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["rf_start"] < event["time_back_rf_trigger"] or event["rf_end"] > event["time_front_rf_trigger"]:
|
|
if event["rf_start"] < event["time_back_rf_trigger"] or event["rf_end"] > event["time_front_rf_trigger"]:
|
|
|
print("RF start and end times must be within RF trigger times")
|
|
print("RF start and end times must be within RF trigger times")
|
|
|
self.errCode = 0x0000000B # RF start/end times outside triggers
|
|
self.errCode = 0x0000000B # RF start/end times outside triggers
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF start and end times must be within RF trigger times"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF start and end times must be within RF trigger times"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if event["rf_end"] - event["rf_start"] < len(self.rfwaves[event["wave"]]):
|
|
if event["rf_end"] - event["rf_start"] < len(self.rfwaves[event["wave"]]):
|
|
|
print("RF pulse duration must be at least as long as the wave length")
|
|
print("RF pulse duration must be at least as long as the wave length")
|
|
|
self.errCode = 0x0000000C # Insufficient RF pulse duration
|
|
self.errCode = 0x0000000C # Insufficient RF pulse duration
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF pulse duration must be at least as long as the wave length"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "RF pulse duration must be at least as long as the wave length"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
self.events.append(event)
|
|
self.events.append(event)
|
|
|
self.time = event["start_time"] + event["duration"]
|
|
self.time = event["start_time"] + event["duration"]
|
|
|
print(f"Added event: {event}")
|
|
print(f"Added event: {event}")
|
|
@@ -179,11 +185,11 @@ class ServerSimulator:
|
|
|
return True
|
|
return True
|
|
|
|
|
|
|
|
def getRfwaveTable(self, data):
|
|
def getRfwaveTable(self, data):
|
|
|
- if not all (k in data for k in ("wavetype", "total_length", "total_packets", "packet_index", "packet_length")):
|
|
|
|
|
|
|
+ if not all (k in data for k in ("wavetype", "total_length", "total_packets", "packet_length")):
|
|
|
print("Missing RF wave parameters")
|
|
print("Missing RF wave parameters")
|
|
|
self.errCode = 0x0000000F # Missing parameters
|
|
self.errCode = 0x0000000F # Missing parameters
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing RF wave parameters"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing RF wave parameters"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
wavetype = data["wavetype"]
|
|
wavetype = data["wavetype"]
|
|
|
total_length = data["total_length"]
|
|
total_length = data["total_length"]
|
|
|
total_packets = data["total_packets"]
|
|
total_packets = data["total_packets"]
|
|
@@ -194,27 +200,28 @@ class ServerSimulator:
|
|
|
self.conn.sendall(self.getStatusMsg(0x00000001, f"Ready to receive RF wave data packets"))
|
|
self.conn.sendall(self.getStatusMsg(0x00000001, f"Ready to receive RF wave data packets"))
|
|
|
|
|
|
|
|
for i in range(total_packets):
|
|
for i in range(total_packets):
|
|
|
- rawdata = self.sock.recv(4096)
|
|
|
|
|
|
|
+ print(f"Send packet {i}...")
|
|
|
|
|
+ rawdata = self.conn.recv(4096)
|
|
|
if not rawdata:
|
|
if not rawdata:
|
|
|
print("No data received for RF wave packet")
|
|
print("No data received for RF wave packet")
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
|
|
|
|
|
packet_data = msgpack.unpackb(rawdata, raw=False)
|
|
packet_data = msgpack.unpackb(rawdata, raw=False)
|
|
|
if packet_data["magic"] != self.magic:
|
|
if packet_data["magic"] != self.magic:
|
|
|
print("Invalid magic byte in RF wave packet")
|
|
print("Invalid magic byte in RF wave packet")
|
|
|
self.errCode = 0x00000014 # Invalid magic byte
|
|
self.errCode = 0x00000014 # Invalid magic byte
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid magic byte in RF wave packet"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid magic byte in RF wave packet"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if packet_data["cmd"] != 0x2C:
|
|
if packet_data["cmd"] != 0x2C:
|
|
|
print("Invalid command in RF wave packet")
|
|
print("Invalid command in RF wave packet")
|
|
|
self.errCode = 0x00000013 # Invalid command
|
|
self.errCode = 0x00000013 # Invalid command
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid command in RF wave packet"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Invalid command in RF wave packet"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
if "wavedata_q" not in packet_data or "wavedata_i" not in packet_data:
|
|
if "wavedata_q" not in packet_data or "wavedata_i" not in packet_data:
|
|
|
print("Missing wave data in RF wave packet")
|
|
print("Missing wave data in RF wave packet")
|
|
|
self.errCode = 0x00000010 # Missing wave data
|
|
self.errCode = 0x00000010 # Missing wave data
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing wave data in RF wave packet"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing wave data in RF wave packet"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
|
|
|
|
|
wave_q = np.frombuffer(packet_data["wavedata_q"], dtype=np.int16)
|
|
wave_q = np.frombuffer(packet_data["wavedata_q"], dtype=np.int16)
|
|
|
wave_i = np.frombuffer(packet_data["wavedata_i"], dtype=np.int16)
|
|
wave_i = np.frombuffer(packet_data["wavedata_i"], dtype=np.int16)
|
|
@@ -223,23 +230,24 @@ class ServerSimulator:
|
|
|
print("In-phase and quadrature wave data must have the same length in RF wave packet")
|
|
print("In-phase and quadrature wave data must have the same length in RF wave packet")
|
|
|
self.errCode = 0x00000012 # Mismatched wave data lengths
|
|
self.errCode = 0x00000012 # Mismatched wave data lengths
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "In-phase and quadrature wave data must have the same length in RF wave packet"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "In-phase and quadrature wave data must have the same length in RF wave packet"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
total_wave_q = np.concatenate([total_wave_q, wave_q])
|
|
total_wave_q = np.concatenate([total_wave_q, wave_q])
|
|
|
total_wave_i = np.concatenate([total_wave_i, wave_i])
|
|
total_wave_i = np.concatenate([total_wave_i, wave_i])
|
|
|
|
|
|
|
|
print(f"Received RF wave packet {i+1}/{total_packets} with length {len(wave_q)}")
|
|
print(f"Received RF wave packet {i+1}/{total_packets} with length {len(wave_q)}")
|
|
|
self.conn.sendall(self.getStatusMsg(0x00000002, f"Received RF wave packet {i+1}/{total_packets} with length {len(wave_q)}"))
|
|
self.conn.sendall(self.getStatusMsg(0x00000002, f"Received RF wave packet {i+1}/{total_packets} with length {len(wave_q)}"))
|
|
|
self.conn.recv(1024) # Wait for ACK before receiving next packet
|
|
self.conn.recv(1024) # Wait for ACK before receiving next packet
|
|
|
- return True
|
|
|
|
|
|
|
+ print("ACK recieved!")
|
|
|
|
|
|
|
|
if len(total_wave_q) != total_length or len(total_wave_i) != total_length:
|
|
if len(total_wave_q) != total_length or len(total_wave_i) != total_length:
|
|
|
print("Total wave data length does not match expected length")
|
|
print("Total wave data length does not match expected length")
|
|
|
self.errCode = 0x00000011 # Total length mismatch
|
|
self.errCode = 0x00000011 # Total length mismatch
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Total wave data length does not match expected length"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Total wave data length does not match expected length"))
|
|
|
- return False
|
|
|
|
|
- self.rfwaves.append({data["wavetype"]: (total_wave_q, total_wave_i)})
|
|
|
|
|
|
|
+ return 2
|
|
|
|
|
+ self.rfwaves[data["wavetype"]] = (total_wave_q, total_wave_i)
|
|
|
print(f"RF wave '{wavetype}' received successfully with total length {total_length}")
|
|
print(f"RF wave '{wavetype}' received successfully with total length {total_length}")
|
|
|
self.conn.sendall(self.getStatusMsg(0x00000003, f"RF wave '{wavetype}' received successfully with total length {total_length}"))
|
|
self.conn.sendall(self.getStatusMsg(0x00000003, f"RF wave '{wavetype}' received successfully with total length {total_length}"))
|
|
|
|
|
+ self.conn.recv(1024)
|
|
|
return True
|
|
return True
|
|
|
|
|
|
|
|
def runEventList(self, data):
|
|
def runEventList(self, data):
|
|
@@ -281,20 +289,20 @@ class ServerSimulator:
|
|
|
interp_wave_q = np.zeros(rf_pulse_length, dtype=np.int16)
|
|
interp_wave_q = np.zeros(rf_pulse_length, dtype=np.int16)
|
|
|
interp_wave_i = np.zeros(rf_pulse_length, dtype=np.int16)
|
|
interp_wave_i = np.zeros(rf_pulse_length, dtype=np.int16)
|
|
|
if data["interpolation_method"] == "linear":
|
|
if data["interpolation_method"] == "linear":
|
|
|
- interp_func_q = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_q, kind='linear', fill_value="extrapolate")
|
|
|
|
|
- interp_func_i = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_i, kind='linear', fill_value="extrapolate")
|
|
|
|
|
- interp_wave_q = interp_func_q(rf_time).astype(np.int16)
|
|
|
|
|
- interp_wave_i = interp_func_i(rf_time).astype(np.int16)
|
|
|
|
|
|
|
+ interp_func_q = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_q, kind='linear')
|
|
|
|
|
+ interp_func_i = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_i, kind='linear')
|
|
|
|
|
+ interp_wave_q = interp_func_q(rf_time * (rf_wave_length / rf_pulse_length)).astype(np.int16)
|
|
|
|
|
+ interp_wave_i = interp_func_i(rf_time * (rf_wave_length / rf_pulse_length)).astype(np.int16)
|
|
|
elif data["interpolation_method"] == "nearest":
|
|
elif data["interpolation_method"] == "nearest":
|
|
|
- interp_func_q = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_q, kind='nearest', fill_value="extrapolate")
|
|
|
|
|
- interp_func_i = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_i, kind='nearest', fill_value="extrapolate")
|
|
|
|
|
- interp_wave_q = interp_func_q(rf_time).astype(np.int16)
|
|
|
|
|
- interp_wave_i = interp_func_i(rf_time).astype(np.int16)
|
|
|
|
|
|
|
+ interp_func_q = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_q, kind='nearest')
|
|
|
|
|
+ interp_func_i = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_i, kind='nearest')
|
|
|
|
|
+ interp_wave_q = interp_func_q(rf_time * (rf_wave_length / rf_pulse_length)).astype(np.int16)
|
|
|
|
|
+ interp_wave_i = interp_func_i(rf_time * (rf_wave_length / rf_pulse_length)).astype(np.int16)
|
|
|
elif data["interpolation_method"] == "cubic":
|
|
elif data["interpolation_method"] == "cubic":
|
|
|
- interp_func_q = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_q, kind='cubic', fill_value="extrapolate")
|
|
|
|
|
- interp_func_i = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_i, kind='cubic', fill_value="extrapolate")
|
|
|
|
|
- interp_wave_q = interp_func_q(rf_time).astype(np.int16)
|
|
|
|
|
- interp_wave_i = interp_func_i(rf_time).astype(np.int16)
|
|
|
|
|
|
|
+ interp_func_q = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_q, kind='cubic')
|
|
|
|
|
+ interp_func_i = interp.interp1d(np.linspace(0, rf_wave_length, rf_wave_length), rf_wave_i, kind='cubic')
|
|
|
|
|
+ interp_wave_q = interp_func_q(rf_time * (rf_wave_length / rf_pulse_length)).astype(np.int16)
|
|
|
|
|
+ interp_wave_i = interp_func_i(rf_time * (rf_wave_length / rf_pulse_length)).astype(np.int16)
|
|
|
|
|
|
|
|
channel_rf[event["start_time"]+event["rf_start"]:event["start_time"]+event["rf_end"]+1] = np.floor((interp_wave_q * np.sin(2 * np.pi * event["carrier_freq"] * rf_time * 8e-9) - interp_wave_i * np.cos(2 * np.pi * event["carrier_freq"] * rf_time * 8e-9)) / np.sqrt(2)).astype(np.int16)
|
|
channel_rf[event["start_time"]+event["rf_start"]:event["start_time"]+event["rf_end"]+1] = np.floor((interp_wave_q * np.sin(2 * np.pi * event["carrier_freq"] * rf_time * 8e-9) - interp_wave_i * np.cos(2 * np.pi * event["carrier_freq"] * rf_time * 8e-9)) / np.sqrt(2)).astype(np.int16)
|
|
|
channel_rf_ttl[event["start_time"]+event["time_back_rf_trigger"]:event["start_time"]+event["time_front_rf_trigger"]+1] = np.int16(1 * np.floor(3.3 / 5 * 32767))
|
|
channel_rf_ttl[event["start_time"]+event["time_back_rf_trigger"]:event["start_time"]+event["time_front_rf_trigger"]+1] = np.int16(1 * np.floor(3.3 / 5 * 32767))
|
|
@@ -354,7 +362,7 @@ class ServerSimulator:
|
|
|
print("Missing frequency parameter")
|
|
print("Missing frequency parameter")
|
|
|
self.errCode = 0x00000020 # Missing parameter
|
|
self.errCode = 0x00000020 # Missing parameter
|
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing frequency parameter"))
|
|
self.conn.sendall(self.getErrorMsg(self.errCode, "Missing frequency parameter"))
|
|
|
- return False
|
|
|
|
|
|
|
+ return 2
|
|
|
self.freq = data["frequency"]
|
|
self.freq = data["frequency"]
|
|
|
self.conn.sendall(self.getStatusMsg(0x00000071, f"Frequency set to {self.freq} Hz"))
|
|
self.conn.sendall(self.getStatusMsg(0x00000071, f"Frequency set to {self.freq} Hz"))
|
|
|
return True
|
|
return True
|