Other Parts Discussed in Thread: AWR2544
您好,我想问使用AWR2544采集到回波数据adc_data.bin后,我想使用rawDataReader.m文件把.bin文件转化为.mat文件便于进行后续处理,我想问为什么在
dp_loadOneFrameData函数中只读取了一帧中的前半字节数据,不需要读取完整的帧数据吗?

This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,我想问使用AWR2544采集到回波数据adc_data.bin后,我想使用rawDataReader.m文件把.bin文件转化为.mat文件便于进行后续处理,我想问为什么在

可以用下面bin2MatData.m的代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Script : bin2MatData.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Description : This function converts Raw ADC data in bin format to a usable N-D
% Matlab variable, stores it format of .mat along with its descriptor.
%
% Inputs : fileName -> Takes name as string in .bin format ("Example 'adc_sample_data.bin'")
% numSamples -> Non-zero Positive integer
% numRx -> Non-zero Positive integer
% numUniqueChirps -> Non-zero Positive integer
% numChirpLoops -> Non-zero Positive integer
% numFrames -> Non-zero Positive integer
% dataInterleave -> 1 : Interleaved ; 0 : Non-Interleaved
% complexSampling -> 1 : Complex ; 0 : Real
% IQSwap -> 1 : Q-first ; 0 : Q-first
% frameSelect -> 0 : Disable ; Non-zero Positive integer : Enable
%
% Outputs : Creates a .mat file as well with the returned values
% adcData -> N-D Matlab array
% dataDesc-> Data descriptor object
%
% Usage : [adcData, dataDesc] = bin2MatData("adc_sample_data.bin", 1024, 4, 4, ...
% 128, 8, 0, 1, 0, 1);
%
% Author : Kaushik Gowda
%
% Date : 24/10/2023
%
% Version : v1.0 (supported on MATLAB ver R2022b).
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [adcData, dataDesc] = bin2MatData(fileName, numSamples, numRx, numUniqueChirps, ...
numChirpLoops, numFrames, dataInterleave, ...
complexSampling, IQSwap, frameSelect)
% Read the data from the capture bin file
read_size = numSamples * numRx*numUniqueChirps*numChirpLoops*2;
fp = fopen(fileName,"r");
adcData = fread(fp, read_size, 'int16');
fclose(fp);
% Check whether the data is real or complex
if(complexSampling == 1)
adcData = reshape(adcData, [2 length(adcData)/2]);
if(IQSwap == 0)
% Real first
adcData = adcData(1,:) + 1i*(adcData(2,:));
else
% Imag first
adcData = adcData(2,:) + 1i*(adcData(1,:));
end
adcData = squeeze(adcData);
end
% Check if the Rx channel data is interleaved or not
if dataInterleave==0
adcData = reshape(adcData, [numSamples numRx numUniqueChirps numChirpLoops numFrames]);
else
adcData = reshape(adcData, [numRx numSamples numUniqueChirps numChirpLoops numFrames]);
end
% Consider only the required frame
if(frameSelect~=0)
adcData = squeeze(adcData(:,:,:,:,frameSelect));
end
% Create a descriptor for future reference
dataDesc.fileName = fileName;
dataDesc.numSamples = numSamples;
dataDesc.numRx = numRx;
dataDesc.fileName = fileName;
dataDesc.numUniqueChirps = numUniqueChirps;
dataDesc.numChirpLoops = numChirpLoops;
dataDesc.numFrames = numFrames;
dataDesc.dataInterleave = dataInterleave;
dataDesc.complexSampling = complexSampling;
dataDesc.IQSwap = IQSwap;
dataDesc.frameSelect = frameSelect;
fileName = extractBetween(fileName, 1, ".bin"); % Strip ".bin" extension
outFileName = strcat(fileName,".mat"); % Append ".mat" extension
save(outFileName, "adcData", "dataDesc"); % Copy the data into .mat files
end这是脚本中的一个小更新,用于读取n帧的数据。以供将来参考
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Script : bin2MatData.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Description : This function converts Raw ADC data in bin format to a usable N-D
% Matlab variable, stores it format of .mat along with its descriptor.
%
% Inputs : fileName -> Takes name as string in .bin format ("Example 'adc_sample_data.bin'")
% numSamples -> Non-zero Positive integer
% numRx -> Non-zero Positive integer
% numUniqueChirps -> Non-zero Positive integer
% numChirpLoops -> Non-zero Positive integer
% numFrames -> Non-zero Positive integer
% dataInterleave -> 1 : Interleaved ; 0 : Non-Interleaved
% complexSampling -> 1 : Complex ; 0 : Real
% IQSwap -> 1 : Q-first ; 0 : Q-first
% frameSelect -> 0 : Disable ; Non-zero Positive integer : Enable
%
% Outputs : Creates a .mat file as well with the returned values
% adcData -> N-D Matlab array
% dataDesc-> Data descriptor object
%
% Usage : [adcData, dataDesc] = bin2MatData("adc_sample_data.bin", 1024, 4, 4, ...
% 128, 8, 0, 1, 0, 1);
%
% Author : Kaushik Gowda
%
% Date : 24/10/2023
%
% Version : v1.0 (supported on MATLAB ver R2022b).
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [adcData, dataDesc] = bin2MatData(fileName, numSamples, numRx, numUniqueChirps, ...
numChirpLoops, numFrames, dataInterleave, ...
complexSampling, IQSwap, frameSelect)
% Read the data from the capture bin file
fp = fopen(fileName,"r");
adcData = fread(fp,'int16');
fclose(fp);
% Check whether the data is real or complex
if(complexSampling == 1)
adcData = reshape(adcData, [2 length(adcData)/2]);
if(IQSwap == 0)
% Real first
adcData = adcData(1,:) + 1i*(adcData(2,:));
else
% Imag first
adcData = adcData(2,:) + 1i*(adcData(1,:));
end
adcData = squeeze(adcData);
end
% Check if the Rx channel data is interleaved or not
if dataInterleave==0
adcData = reshape(adcData, [numSamples numRx numUniqueChirps numChirpLoops numFrames]);
else
adcData = reshape(adcData, [numRx numSamples numUniqueChirps numChirpLoops numFrames]);
end
% Consider only the required frame
if(frameSelect~=0)
adcData = squeeze(adcData(:,:,:,:,frameSelect));
end
% Create a descriptor for future reference
dataDesc.fileName = fileName;
dataDesc.numSamples = numSamples;
dataDesc.numRx = numRx;
dataDesc.fileName = fileName;
dataDesc.numUniqueChirps = numUniqueChirps;
dataDesc.numChirpLoops = numChirpLoops;
dataDesc.numFrames = numFrames;
dataDesc.dataInterleave = dataInterleave;
dataDesc.complexSampling = complexSampling;
dataDesc.IQSwap = IQSwap;
dataDesc.frameSelect = frameSelect;
fileName = extractBetween(fileName, 1, ".bin"); % Strip ".bin" extension
outFileName = strcat(fileName,".mat"); % Append ".mat" extension
save(outFileName, "adcData", "dataDesc"); % Copy the data into .mat files
end