AWR2544LOPEVM: 关于使用rawDataReader.m脚本将adc_data.bin文件读取为.mat文件的问题

Part Number: AWR2544LOPEVM
Other Parts Discussed in Thread: AWR2544

您好,我想问使用AWR2544采集到回波数据adc_data.bin后,我想使用rawDataReader.m文件把.bin文件转化为.mat文件便于进行后续处理,我想问为什么在

dp_loadOneFrameData函数中只读取了一帧中的前半字节数据,不需要读取完整的帧数据吗?

  • 您好,

    已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 可以用下面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