Phase I Software Introduction
This document specifies a Matlab interface to the Phase I Open Image controller. It is intended that most firmware functionality can be derived from this specification.
Upadate: See our GitHub for the as-implemented interface.
Definitions:
Frame: enough data to generate a single brightness-mode image
Shot: one transmit/receive cycle; there may be many (perhaps 100’s) of shots per frame
Channel: corresponds to one element on the ultrasound transducer. There is one-to-one mapping between transducer channels, transmit channels, and receive channels.
Note: it is still TBD how to handle multiple frames. Will discuss. Perhaps we limit ourselves to one frame at a time in Phase I.
%% Transmit Side:
% Global Settings:
frame(Nframe).shot(Nshot).tx.fs %"sample" rate (TBD how to specify)
% Per Channel Settings
frame(Nframe).shot(Nshot).channel(Nchannel).tx.enable %is channel enabled
frame(Nframe).shot(Nshot).channel(Nchannel).tx.levelSequence %2 = Vpp0, 1 = Vpp1, 0 = RTZ, -1 = Vnn1, -2 = Vnn1; e.g., [2 -2] would be single-cycle square wave (Note we want to be able to do transmit-side beamforming; what timing resolution do we have on one pulse's firing relative to the others?)
% What resolution do we have over the timing between channel firings?
% What control, if any, do we have over the T/R switch settings?
%% Receive Side:
% Global Settings:
frame(Nframe).shot(Nshot).rx.fs %sample rate
frame(Nframe).shot(Nshot).rx.N %number of samples to acquire
frame(Nframe).shot(Nshot).rx.tgc %time gain compensation input (TBD how to specify)(Note this will drive a DAC that drives the AFE)
frame(Nframe).shot(Nshot).rx.aaf %anti-aliasing filter setting (TBD how to specify)
%% Per Channel Settings (TBD if we can actually control all of these on a per-channel basis)
frame(Nframe).shot(Nshot).channel(Nchannel).rx.enable %is channel enabled
frame(Nframe).shot(Nshot).channel(Nchannel).rx.lna %LNA Gain
frame(Nframe).shot(Nshot).channel(Nchannel).rx.pga %PGA Gain (if applicable)
%% Data collection: (Still TBD pending how we decide to handle multiple frames)
oi = openimage;
oi.open; %open connection with device
for ii=1:1:NFrame
thisFrame = frame(ii);
oi.queue_frame(thisFrame); %sends frame structure (defined above) to device
res = oi.get_frame(thisFrame); %requests frame data from device (res includes a Nshot x Nchannel x Nsample matrix of raw data)
end
oi.close; %closes connection with device
Want to comment on, edit, or view the history of this document? Visit it on GitHub.