Right now we put complex or power-angle data from different channels (or waveforms) into the same Beam_group and pad NaNs for channels that are not transmitting or with less number of samples along the range_sample dimension. The advantage of this is that it makes easier to slice across different data dimensions, but now that we have a lot more complex sample datasets and the various ways to sequence different waveforms, this NaN-padding scheme becomes very inefficient.
An alternative way is to store data from different waveforms (ping library entries) into different Beam_groups, so that there is no cross-channel ping_time padding that is required (though within-channel padding with shorter range would still happen). In addition to storage efficiency, this will also make finding the right matching coefficients during compute_Sv way more efficient: right now it needs to find the match on a ping-by-ping level, but if we store each waveform in a separate Beam_group, we just need to index the Beam_groups.
This will require a larger change to the codebase, but I think it's worth doing now that we can have a diversity of transmission schemes.
Right now we put complex or power-angle data from different channels (or waveforms) into the same Beam_group and pad NaNs for channels that are not transmitting or with less number of samples along the
range_sampledimension. The advantage of this is that it makes easier to slice across different data dimensions, but now that we have a lot more complex sample datasets and the various ways to sequence different waveforms, this NaN-padding scheme becomes very inefficient.An alternative way is to store data from different waveforms (ping library entries) into different Beam_groups, so that there is no cross-channel
ping_timepadding that is required (though within-channel padding with shorter range would still happen). In addition to storage efficiency, this will also make finding the right matching coefficients duringcompute_Svway more efficient: right now it needs to find the match on a ping-by-ping level, but if we store each waveform in a separate Beam_group, we just need to index the Beam_groups.This will require a larger change to the codebase, but I think it's worth doing now that we can have a diversity of transmission schemes.