This commit is contained in:
remilia 2025-04-17 20:28:07 +08:00
parent 02238e9403
commit 4dd023a350
13 changed files with 261 additions and 43 deletions

View File

@ -0,0 +1,145 @@
[Root]
VersionDriverOEMPA=1.3.0.1
CycleCount=1
EnableFMC=1
FMCElementStart=0
FMCElementStop=255
FMCElementStep=1
DisableUSB3=1
AscanBitSize=14Bits
Enable256=0
SWEncoder1Resolution=1
TriggerMode=Internal
Encoder1A=DigitalInput01
Encoder1B=DigitalInput02
Encoder1Type=Quadrature4Edges
RequestIO=OnCycleOnly
[Cycle:0]
GainDigital=0.000000 dB
BeamCorrection=0.0 dB
Start=0.000000 us
Range=120.000000 us
TimeSlot=5003.800000 us
PointFactor=2
CompressionType=Decimation
Rectification=Signed
FilterIndex=0
GainAnalog=40.000000 dB
GateCount=0
[Cycle:0\Pulser]
WedgeDelay=0.0 us
Element.count=256
Element_0=0;1;2;3;4;5;6;7
Element_8=8;9;10;11;12;13;14;15
Element_16=16;17;18;19;20;21;22;23
Element_24=24;25;26;27;28;29;30;31
Element_32=32;33;34;35;36;37;38;39
Element_40=40;41;42;43;44;45;46;47
Element_48=48;49;50;51;52;53;54;55
Element_56=56;57;58;59;60;61;62;63
Element_64=64;65;66;67;68;69;70;71
Element_72=72;73;74;75;76;77;78;79
Element_80=80;81;82;83;84;85;86;87
Element_88=88;89;90;91;92;93;94;95
Element_96=96;97;98;99;100;101;102;103
Element_104=104;105;106;107;108;109;110;111
Element_112=112;113;114;115;116;117;118;119
Element_120=120;121;122;123;124;125;126;127
Element_128=128;129;130;131;132;133;134;135
Element_136=136;137;138;139;140;141;142;143
Element_144=144;145;146;147;148;149;150;151
Element_152=152;153;154;155;156;157;158;159
Element_160=160;161;162;163;164;165;166;167
Element_168=168;169;170;171;172;173;174;175
Element_176=176;177;178;179;180;181;182;183
Element_184=184;185;186;187;188;189;190;191
Element_192=192;193;194;195;196;197;198;199
Element_200=200;201;202;203;204;205;206;207
Element_208=208;209;210;211;212;213;214;215
Element_216=216;217;218;219;220;221;222;223
Element_224=224;225;226;227;228;229;230;231
Element_232=232;233;234;235;236;237;238;239
Element_240=240;241;242;243;244;245;246;247
Element_248=248;249;250;251;252;253;254;255
Delay.count=256;1
Delay_0=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_8=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_16=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_24=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_32=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_40=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_48=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_56=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_64=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_72=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_80=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_88=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_96=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_104=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_112=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_120=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_128=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_136=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_144=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_152=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_160=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_168=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_176=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_184=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_192=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_200=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_208=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_216=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_224=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_232=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_240=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Delay_248=0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000;0.000000 us
Width.count=256
Width_0=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_8=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_16=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_24=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_32=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_40=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_48=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_56=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_64=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_72=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_80=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_88=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_96=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_104=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_112=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_120=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_128=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_136=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_144=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_152=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_160=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_168=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_176=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_184=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_192=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_200=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_208=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_216=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_224=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_232=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_240=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
Width_248=0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000;0.100000 us
[Cycle:0\Receiver]
WedgeDelay=0.0 us
Element.count=1
Element=0
Focusing=Standard
Delay.count=1;1
Delay=0.0 us
Gain.count=1
Gain=0.0 dB
FocalTimeOfFlight.count=1
FocalTimeOfFlight=0.0 us

View File

@ -0,0 +1 @@
{"t_end": 2026, "t_start": 1714, "v2": 1524, "dct_center": 1086, "dct_bandwidth": 915, "f_rows": 6002, "beta": 40, "tgc": 0, "g1": 23, "g2": 27, "g3": 34, "g4": 24, "g5": 23, "g6": 30, "g7": 27, "g8": 51}

View File

@ -24,7 +24,7 @@ def gen_pwi(dist_mat: cp.ndarray, dev_cfg=DeviceConfig()):
def pwi_(mat_in):
return mat_in[col_idx, row_idx].sum(axis=2).T[:, :last_available_index]
return pwi_, row_idx
return pwi_, row_idx, last_available_index
class TFM:

View File

@ -41,8 +41,8 @@ class SoftwareConfig:
p.mkdir(exist_ok=True, parents=True)
return p
video_height: int = 1920
video_width: int = 1080
video_height: int = 1080
video_width: int = 960
live_ip: str = '11.6.1.71'
live_push_port: int = 5555

View File

@ -9,7 +9,7 @@ from flandre.beamformer.dist import direct_dist
from flandre.config import C
from flandre.nodes.Node import Node
from flandre.utils.Config import DeviceConfig
from flandre.utils.Msg import ImageArgMsg, Msg, BeamformerMsg, RfMatMsg, RfFrameMsg
from flandre.utils.Msg import ImageArgMsg, Msg, BeamformerMsg, RfMatMsg, RfFrameMsg, MaxMsg
from flandre.utils.RfMat import RfMat
from flandre.utils.RfMeta import RfSequenceMeta
@ -40,16 +40,17 @@ class Beamformer(Node):
.argrelextrema()
.conv_guass(b=arg.beta * 0.01)
.crop_center(arg.t_start, arg.t_end)
.time_gain_compensation([
( (1 - arg.g1 * (1.0 / 128))** 2),
( (1 - arg.g2 * (1.0 / 128))** 2),
( (1 - arg.g3 * (1.0 / 128))** 2),
( (1 - arg.g4 * (1.0 / 128))** 2),
( (1 - arg.g5 * (1.0 / 128))** 2),
( (1 - arg.g6 * (1.0 / 128))** 2),
( (1 - arg.g7 * (1.0 / 128))** 2),
( (1 - arg.g8 * (1.0 / 128))** 2),
])
# .time_gain_compensation([
# ( (1 - arg.g1 * (1.0 / 128))** 2),
# ( (1 - arg.g2 * (1.0 / 128))** 2),
# ( (1 - arg.g3 * (1.0 / 128))** 2),
# ( (1 - arg.g4 * (1.0 / 128))** 2),
# ( (1 - arg.g5 * (1.0 / 128))** 2),
# ( (1 - arg.g6 * (1.0 / 128))** 2),
# ( (1 - arg.g7 * (1.0 / 128))** 2),
# ( (1 - arg.g8 * (1.0 / 128))** 2),
# ])
.time_gain_compensation_global((1 - arg.g8 * (1.0 / 128)) ** 2)
.rotate90()
.grey()
.cpu()
@ -62,7 +63,8 @@ class Beamformer(Node):
def loop(self):
dc = DeviceConfig()
pwi, _ = gen_pwi(direct_dist(dc), dc)
pwi, _, mm = gen_pwi(direct_dist(dc), dc)
self.send(MaxMsg(mm.item()))
last_v2 = 5900
last_f_rows = 0
while True:
@ -86,7 +88,8 @@ class Beamformer(Node):
last_v2 = arg_msg.v2
last_f_rows = arg_msg.f_rows
dc = DeviceConfig(v2=arg_msg.v2, rows=arg_msg.f_rows)
pwi, _ = gen_pwi(direct_dist(dc), dc)
pwi, _, m = gen_pwi(direct_dist(dc), dc)
self.send(MaxMsg(m.item()))
try:
if mat.seq_meta.mode == RfSequenceMeta.RfSequenceMode.PWI:
self.process_pwi(mat, arg_msg, pwi)

View File

@ -42,10 +42,10 @@ class ImageFFMPEG(Node):
'-pix_fmt', 'yuv420p',
# '-vcodec', 'libx264',
# '-b:v', '40M',
'-b:v', '20M',
'-f', 'flv',
# 'rtmp://q1hyb.as/live/bscan',
'rtmp://11.2.1.21/live/bscan',
'rtmp://q1hyb.as/live/bscan',
# 'rtmp://11.2.1.21/live/bscan',
# '-f', 'mpegts',
# 'srt://localhost:10080?streamid=#!::r=live/livestream,m=publish'
],
@ -72,5 +72,6 @@ class ImageFFMPEG(Node):
lasttime = currenttime
if __name__ == '__main__':
ImageFFMPEG()()

View File

@ -20,7 +20,7 @@ from flandre.utils.Msg import KillMsg, Msg, ImageArgMsg, SeqIdMinMax, MoveAxisMs
SetSeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg, RobotRtsiMsg, RecordFrameMsg, \
SeqIdList, SetWindowVisibleMsg, SetSidMsg, ImagingConfigNameListMsg, DeviceZero, DeviceSwitchMsg, \
SetDeviceSwitchMsg, SeqMetaMsg, RefreshDeviceMsg
SetDeviceSwitchMsg, SeqMetaMsg, RefreshDeviceMsg, MaxMsg
from flandre.utils.RfMeta import RfSequenceMeta
logger = logging.getLogger(__name__)
@ -341,19 +341,24 @@ class Adv(QMainWindow, Ui_MainWindow):
else:
QMessageBox.warning(None, 'hint', 'Commit is empty!!')
def update_max(self, m):
def update_max_2(self, m):
self.s_t_start.setMaximum(m)
self.s_t_end.setMaximum(m)
self.s_dct_center.setMaximum(m)
self.s_dct_bandwidth.setMaximum(m)
self.s_f_rows.setMaximum(m)
self.sp_crop_center.setMaximum(m)
self.sp_crop_width.setMaximum(m)
self.sp_dct_center.setMaximum(m)
self.sp_dct_bandwidth.setMaximum(m)
def update_max(self, m):
self.s_f_rows.setMaximum(m)
self.sp_f_rows.setMaximum(m)
self.s_dct_center.setMaximum(m)
self.s_dct_bandwidth.setMaximum(m)
self.sp_dct_center.setMaximum(m)
self.sp_dct_bandwidth.setMaximum(m)
def on_zmq_event(self, msg: QByteArray):
try:
msg = Msg.decode_msg(msg.data())
@ -463,7 +468,8 @@ class Adv(QMainWindow, Ui_MainWindow):
self.ln_frx.display(f"{msg.force[3] / 100:.2f}")
self.ln_fry.display(f"{msg.force[4] / 100:.2f}")
self.ln_frz.display(f"{msg.force[5] / 100:.2f}")
elif isinstance(msg, MaxMsg):
self.update_max_2(msg.value)
elif isinstance(msg, RecordFrameMsg):
self.record_frame_cnt += 1
@ -641,7 +647,7 @@ class MainUI(Node):
PlaybackSeqListMsg, SetSeqMetaMsg, SeqIdList, SetWindowVisibleMsg, SetSidMsg,
DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, DeviceConfigListMsg,
RobotRtsiMsg, DeviceSwitchMsg,
RecordFrameMsg, SeqMetaMsg]
RecordFrameMsg, SeqMetaMsg, MaxMsg]
def __init__(self, level=logging.INFO):
super().__init__(level=level)

View File

@ -8,14 +8,14 @@ from mido import Message
from mido.backends.rtmidi import Input, Output
from flandre.nodes.Node import Node
from flandre.utils.Msg import KillMsg, MidiMsg, Msg, ImageArgMsg, SetSeqMetaMsg, SetSidMsg
from flandre.utils.Msg import KillMsg, MidiMsg, Msg, ImageArgMsg, SetSeqMetaMsg, SetSidMsg, MaxMsg
from flandre.utils.RfMeta import RfSequenceMeta
logger = logging.getLogger(__name__)
class Midi(Node):
topics = [ImageArgMsg, SetSeqMetaMsg]
topics = [ImageArgMsg, SetSeqMetaMsg, MaxMsg]
def __init__(self, level=logging.INFO):
super(Midi, self).__init__(level=level)
@ -71,6 +71,7 @@ class Midi(Node):
self.isa.send(MidiMsg(type='note_on', note=d['note'], velocity=d['velocity']).encode_msg())
case 'note_off':
self.isa.send(MidiMsg(type='note_off', note=d['note'], velocity=d['velocity']).encode_msg())
def loop(self):
isb = self.c.ctx.socket(zmq.PULL)
isb.connect("inproc://midi")
@ -108,9 +109,11 @@ class Midi(Node):
case 2:
self.arg.v2 = sorted((500, self.arg.v2 + msg.value * 10, 7000))[1]
case 3:
self.arg.dct_center = sorted((500, self.arg.dct_center + msg.value * 10, self.m_dct_center))[1]
self.arg.dct_center = \
sorted((500, self.arg.dct_center + msg.value * 10, self.m_dct_center))[1]
case 4:
self.arg.dct_bandwidth = sorted((500, self.arg.dct_bandwidth + msg.value * 10, self.m_dct_bandwidth))[1]
self.arg.dct_bandwidth = \
sorted((500, self.arg.dct_bandwidth + msg.value * 10, self.m_dct_bandwidth))[1]
case 5:
self.arg.f_rows = sorted((500, self.arg.f_rows + msg.value * 10, self.m_f_rows))[1]
case 6:
@ -135,8 +138,10 @@ class Midi(Node):
elif isinstance(msg, SetSeqMetaMsg):
seq_meta = RfSequenceMeta.from_name(msg.name)
mmax_shape0 = max(seq_meta.shape)
self.m_t_start = mmax_shape0
self.m_t_end = mmax_shape0
self.m_dct_center = mmax_shape0
self.m_dct_bandwidth = mmax_shape0
self.m_f_rows = mmax_shape0
elif isinstance(msg, MaxMsg):
mmax_shape0 = msg.value
self.m_t_start = mmax_shape0
self.m_t_end = mmax_shape0

View File

@ -60,7 +60,7 @@ class Node:
def __call__(self, *args, **kwargs):
self.setup()
if not self.broker:
time.sleep(1)
time.sleep(2)
self.send(NodeOnlineMsg(self.__class__.__name__))
# input('asdasd')
msg = self.recv()

View File

@ -482,9 +482,11 @@ class Ui_MainWindow(object):
self.label_8.setObjectName("label_8")
self.gridLayout_4.addWidget(self.label_8, 1, 0, 1, 1)
self.sp_g6 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g6.setMaximum(127)
self.sp_g6.setObjectName("sp_g6")
self.gridLayout_4.addWidget(self.sp_g6, 6, 2, 1, 1)
self.sp_g4 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g4.setMaximum(127)
self.sp_g4.setObjectName("sp_g4")
self.gridLayout_4.addWidget(self.sp_g4, 4, 2, 1, 1)
self.s_g7 = QtWidgets.QSlider(parent=self.centralwidget)
@ -492,12 +494,14 @@ class Ui_MainWindow(object):
self.s_g7.setObjectName("s_g7")
self.gridLayout_4.addWidget(self.s_g7, 7, 1, 1, 1)
self.sp_g2 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g2.setMaximum(127)
self.sp_g2.setObjectName("sp_g2")
self.gridLayout_4.addWidget(self.sp_g2, 2, 2, 1, 1)
self.label_10 = QtWidgets.QLabel(parent=self.centralwidget)
self.label_10.setObjectName("label_10")
self.gridLayout_4.addWidget(self.label_10, 3, 0, 1, 1)
self.sp_g3 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g3.setMaximum(127)
self.sp_g3.setObjectName("sp_g3")
self.gridLayout_4.addWidget(self.sp_g3, 3, 2, 1, 1)
self.s_g6 = QtWidgets.QSlider(parent=self.centralwidget)
@ -516,12 +520,15 @@ class Ui_MainWindow(object):
self.s_g4.setObjectName("s_g4")
self.gridLayout_4.addWidget(self.s_g4, 4, 1, 1, 1)
self.sp_g7 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g7.setMaximum(127)
self.sp_g7.setObjectName("sp_g7")
self.gridLayout_4.addWidget(self.sp_g7, 7, 2, 1, 1)
self.sp_g1 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g1.setMaximum(127)
self.sp_g1.setObjectName("sp_g1")
self.gridLayout_4.addWidget(self.sp_g1, 1, 2, 1, 1)
self.sp_g5 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g5.setMaximum(127)
self.sp_g5.setObjectName("sp_g5")
self.gridLayout_4.addWidget(self.sp_g5, 5, 2, 1, 1)
self.s_g2 = QtWidgets.QSlider(parent=self.centralwidget)
@ -540,6 +547,7 @@ class Ui_MainWindow(object):
self.label_37.setObjectName("label_37")
self.gridLayout_4.addWidget(self.label_37, 8, 0, 1, 1)
self.sp_g8 = QtWidgets.QSpinBox(parent=self.centralwidget)
self.sp_g8.setMaximum(127)
self.sp_g8.setObjectName("sp_g8")
self.gridLayout_4.addWidget(self.sp_g8, 8, 2, 1, 1)
self.gridLayout.addLayout(self.gridLayout_4, 3, 1, 1, 1)

View File

@ -931,10 +931,18 @@ border-radius: 7px;
</widget>
</item>
<item row="6" column="2">
<widget class="QSpinBox" name="sp_g6"/>
<widget class="QSpinBox" name="sp_g6">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QSpinBox" name="sp_g4"/>
<widget class="QSpinBox" name="sp_g4">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QSlider" name="s_g7">
@ -944,7 +952,11 @@ border-radius: 7px;
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="sp_g2"/>
<widget class="QSpinBox" name="sp_g2">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_10">
@ -954,7 +966,11 @@ border-radius: 7px;
</widget>
</item>
<item row="3" column="2">
<widget class="QSpinBox" name="sp_g3"/>
<widget class="QSpinBox" name="sp_g3">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSlider" name="s_g6">
@ -985,13 +1001,25 @@ border-radius: 7px;
</widget>
</item>
<item row="7" column="2">
<widget class="QSpinBox" name="sp_g7"/>
<widget class="QSpinBox" name="sp_g7">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="sp_g1"/>
<widget class="QSpinBox" name="sp_g1">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QSpinBox" name="sp_g5"/>
<widget class="QSpinBox" name="sp_g5">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSlider" name="s_g2">
@ -1022,7 +1050,11 @@ border-radius: 7px;
</widget>
</item>
<item row="8" column="2">
<widget class="QSpinBox" name="sp_g8"/>
<widget class="QSpinBox" name="sp_g8">
<property name="maximum">
<number>127</number>
</property>
</widget>
</item>
</layout>
</item>

View File

@ -19,6 +19,8 @@ class BG(Enum):
NodeOnlineMsg = auto()
KillMsg = auto()
StrMsg = auto()
IntMsg = auto()
MaxMsg = auto()
MoveAxisMsg = auto()
ImageArgMsg = auto()
SetSeqMetaMsg = auto()
@ -145,6 +147,9 @@ class NodeOnlineMsg(Msg):
class StrMsg(Msg):
value: str = ''
@dataclasses.dataclass
class IntMsg(Msg):
value: int = 0
@dataclasses.dataclass
class KeyPressMsg(StrMsg):
@ -182,6 +187,8 @@ class DeviceConnectedMsg(BoolMsg):
class DeviceOnlineMsg(BoolMsg):
pass
class MaxMsg(IntMsg):
pass
@dataclasses.dataclass
class SetRecordMsg(Msg):

View File

@ -384,6 +384,16 @@ class RfMat:
ssss += block
return self
def time_gain_compensation_global(self, scale: float):
self.m = self.m.astype(np.float32)
h = self.m.shape[-1]
mmax = self.m.max()
s2 = self.m
new_max = mmax * scale
s2[s2 > new_max] = new_max
self.m = s2 * (mmax / new_max)
return self
def time_gain_compensation_linear_max(self, scale: float, mmax: int | None = None, start: int = 0):
if scale == 0:
return self