Adding subsampling factor
This commit is contained in:
parent
2edbcf1c92
commit
eb968fb503
|
@ -10,6 +10,8 @@ use crate::hardware::design_parameters::SAMPLE_BUFFER_SIZE;
|
||||||
// The number of data blocks that we will buffer in the queue.
|
// The number of data blocks that we will buffer in the queue.
|
||||||
const BLOCK_BUFFER_SIZE: usize = 30;
|
const BLOCK_BUFFER_SIZE: usize = 30;
|
||||||
|
|
||||||
|
const SUBSAMPLE_RATE: usize = 2;
|
||||||
|
|
||||||
pub fn setup_streaming(
|
pub fn setup_streaming(
|
||||||
stack: NetworkReference,
|
stack: NetworkReference,
|
||||||
) -> (BlockGenerator, DataStream) {
|
) -> (BlockGenerator, DataStream) {
|
||||||
|
@ -28,7 +30,7 @@ pub fn serialize_blocks<'a>(buffer: &'a mut [u8], max_buffer_size: usize, queue:
|
||||||
AdcDacData, BLOCK_BUFFER_SIZE>) -> &'a [u8] {
|
AdcDacData, BLOCK_BUFFER_SIZE>) -> &'a [u8] {
|
||||||
// While there is space in the buffer, serialize into it.
|
// While there is space in the buffer, serialize into it.
|
||||||
|
|
||||||
let block_size = (SAMPLE_BUFFER_SIZE * 2) * 2 * 2 + 8;
|
let block_size = (SAMPLE_BUFFER_SIZE / SUBSAMPLE_RATE * 2) * 2 * 2 + 8;
|
||||||
|
|
||||||
// Truncate the buffer to the maximum buffer size.
|
// Truncate the buffer to the maximum buffer size.
|
||||||
let buffer: &mut [u8] = if buffer.len() > max_buffer_size {
|
let buffer: &mut [u8] = if buffer.len() > max_buffer_size {
|
||||||
|
@ -54,7 +56,7 @@ pub fn serialize_blocks<'a>(buffer: &'a mut [u8], max_buffer_size: usize, queue:
|
||||||
};
|
};
|
||||||
|
|
||||||
enqueued_blocks += 1;
|
enqueued_blocks += 1;
|
||||||
let length = block.to_slice(buf);
|
let length = block.to_slice(buf, SUBSAMPLE_RATE);
|
||||||
assert!(length == block_size);
|
assert!(length == block_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,14 +118,15 @@ struct DataBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DataBlock {
|
impl DataBlock {
|
||||||
pub fn to_slice(self, buf: &mut [u8]) -> usize {
|
pub fn to_slice(self, buf: &mut [u8], subsample: usize) -> usize {
|
||||||
|
let block_size = self.block_size / subsample;
|
||||||
buf[0..4].copy_from_slice(&self.block_id.to_be_bytes());
|
buf[0..4].copy_from_slice(&self.block_id.to_be_bytes());
|
||||||
buf[4..8].copy_from_slice(&self.block_size.to_be_bytes());
|
buf[4..8].copy_from_slice(&block_size.to_be_bytes());
|
||||||
|
|
||||||
let mut offset: usize = 8;
|
let mut offset: usize = 8;
|
||||||
for device in &[self.adcs, self.dacs] {
|
for device in &[self.adcs, self.dacs] {
|
||||||
for channel in device {
|
for channel in device {
|
||||||
for sample in channel {
|
for sample in channel.iter().step_by(subsample) {
|
||||||
buf[offset..offset+2].copy_from_slice(&sample.to_be_bytes());
|
buf[offset..offset+2].copy_from_slice(&sample.to_be_bytes());
|
||||||
offset += 2;
|
offset += 2;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue