Looking Assistance for Data Acquisition and Parallel Processing with USRP B200 in MATLAB

5 ビュー (過去 30 日間)
Nik Rocky
Nik Rocky 2023 年 11 月 16 日
コメント済み: Nik Rocky 2023 年 11 月 20 日
Hello dear MATLAB Community,
I am looking for a solution to receive and save data from the USRP B200 using the USRP Communicatios Toolbox and Parallel Computing Toolbox. When I try to save data using a parallel pool, I experience a delay of 2-3 seconds, during which I believe some samples are lost.
I am seeking a solution that allows my program to continuously receive data and, after a certain number of samples or a specific time period, save it using a parallel process.
Below is a part of my code. My system specifications include an 8-core CPU, 32 GB of RAM, and the latest version of MATLAB R2023a.
Thank you very much!
%% Create a parallel pool
poolobj = gcp('nocreate'); % If no pool, do not create new one.
if isempty(poolobj)
poolobj = parpool(6); % Create a new pool
end
%% Data acquisition loop
data = complex(zeros(round(receiveSettings.samples_per_frame), round(calculatedParameters.corr_iterations)));
if hardware.radioFound
% Capture loop
for o_frame = 1 : calculatedParameters.capture_number
while i_frame < calculatedParameters.corr_iterations
[output, dataLen, overrun, timestamp] = radio();
% Overrun check
if overrun == 1
overrun_counter = overrun_counter + 1;
end
% Validate received data
if dataLen >= receiveSettings.samples_per_frame
step(scope, output); % Display frequency spectrum
data(:, i_frame) = output; % Save data from USRP
i_frame = i_frame + 1;
end
end
tic
f = parfeval(poolobj, @saveDataAsync, 0, data, calculatedParameters, recorderSettings, usrpSettings, o_frame); % call save fuction
toc
end
%% Function that handles the saving of data to a WAV file
function saveDataAsync(data, calculatedParameters, recorderSettings, usrpSettings, o_frame)
data = reshape(data, [], 1); % Reshape 'data' into a column vector
% Normalize IQ data
data_I = real(data) / max(abs(real(data)));
data_Q = imag(data) / max(abs(imag(data)));
data_cat = [data_I, data_Q];
% Prepare filename for WAV saving
wavefile_IQ = sprintf('%s_%dHz_MCR_%dHz_Cfr_%dDf_%d', char(recorderSettings.wav_time), usrpSettings.master_clock_rate, usrpSettings.center_frequency, usrpSettings.descimationfactor, o_frame);
folderPath = 'D:\test';
filePath = fullfile(folderPath, [wavefile_IQ, '.wav']);
wavwrite_personal_function(data_cat, calculatedParameters.sample_rate, recorderSettings.rcvr, recorderSettings.nbits, filePath);
disp('Audio file saved successfully.');
end
  4 件のコメント
Mario Malic
Mario Malic 2023 年 11 月 18 日
Can you get me the link for documentation on radio function?
Nik Rocky
Nik Rocky 2023 年 11 月 20 日
Yes, Sure: https://de.mathworks.com/help/supportpkg/usrpradio/ug/sdrureceiver.html#d126e7863

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File ExchangeAnalog Devices ADALM1000 Support from Data Acquisition Toolbox についてさらに検索

製品


リリース

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by