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.

[参考译文] IWR6843AOP:

Guru**** 1133960 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1253855/iwr6843aop

器件型号:IWR6843AOP

您好!  

我在 mmWave Studio 应用中找到了有关保护单元数量以及阈值的一些信息。 您能否解释一下 CFAR 窗口的大小是多少? 这是单侧还是双侧训练单元的数量?  此外、在随附的图像中、您还可以看到我所指的内容。 在映像中指定 CA-CFAR。 这是否意味着使用 SDK 中的以下 c 脚本 mmwavelib_cfarca.c 进行噪声估算?  

我曾尝试使用 MATLAB CFAR-CA 函数、但它给了我 mmWave Studio 的不同结果、因此我想了解一下之间的差异。  

提前感谢您花时间作出回复。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diana:

    我现在正在做一个回应。 立即由 EOD 进行响应。 感谢您的耐心。

    此致!

    纳特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Nathan:  

    感谢您的答复。  

    此致、  

    戴安娜

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diana:

    我仍在查找该文件的源代码、但 通常这里的单元格长度是单向的。 但是、我不能为内置 MATLAB CFAR 函数说话。 您可以双向尝试、 看看哪些产品与您的输出最匹配?

    此致!

    纳特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diana:

    源函数在这里、它确认它是一个单侧 CFAR。 请注意、此代码不用于生产。 不要将它与任何质量标准相混淆、也不要将它与官方 TI 软件产品相混淆。

    此致!

    纳特

    function [indxRangeSorted, indxDopplerSorted, fftOut2DMagSqRx1, noiseMeanMat] = detections_after_2D_fft(radar_data_2dfft, detection_options)
    
    % Non coherent integration across antennas
    fftOut2D = squeeze(sum(radar_data_2dfft.*conj(radar_data_2dfft),1));
    
    % A bizarre matlab issue when there is only two dimensions, the squeeze
    % command doesn't work.
    if length(size(radar_data_2dfft)) == 2
    fftOut2D = fftOut2D';
    end
    
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%% Apply CA-CFAR for Object Detection %%%
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    threshWinSize = detection_options.cfar_window_size; % Number of samples on each side of test cell to use for noise estimation
    threshSkipSize = detection_options.cfar_guard_size; % Number of samples on each side of test cell to be skipped for noise estimation
    detThreshdB = detection_options.cfar_threshold_db; % Scaling of detection threshold w.r.t surrounding noise level computed
    
    %% 1D range dimension CFAR
    % CFAR threshold computation, detection, local max check, etc. (implemented without for loop)
    fftOut2DMagSqRx1 = squeeze(fftOut2D);
    
    if detection_options.use_log_cfar == 1
    fftOut2DMagSqRx1 = 10*log10(squeeze(fftOut2D));
    end
    
    if (size(fftOut2DMagSqRx1,1) > (2*threshWinSize+2*threshSkipSize+2)) && (detection_options.do_cfar_in_range == 1)
    fftOut2DXtended = [fftOut2DMagSqRx1(end-threshWinSize-threshSkipSize+1:end,:); fftOut2DMagSqRx1; fftOut2DMagSqRx1(1:threshWinSize+threshSkipSize,:)];
    % Construct in one-shot the cell-average( a.k.a mean noise floor) for each cell in the 2D Array.
    noiseMeanMat = construct_noise_mean_mat(detection_options.cfar_method, threshWinSize, threshSkipSize, fftOut2DXtended);
    % threshMat is a matrix of thresholds for each cell (size of threshMat is same as size of fftOut2D)
    if detection_options.use_log_cfar == 1
    threshMat = detThreshdB + noiseMeanMat;
    else
    threshMat = 10^(detThreshdB/10)*noiseMeanMat;
    end
    % Detection is based on cell exceeding threshold, as well as being a local maxima (in both dimensions)
    threshDecisionMat = fftOut2DMagSqRx1 > threshMat;
    
    else
    threshDecisionMat = true(size(fftOut2DMagSqRx1 ));
    noiseMeanMat = true(size(fftOut2DMagSqRx1 ));
    end
    
    %% Local Maxima
    if detection_options.detect_only_local_maxima_in_range == 1
    fftOut2DMagSqRx1Shiftm1 = [fftOut2DMagSqRx1(end,:); fftOut2DMagSqRx1(1:end-1,:)];
    fftOut2DMagSqRx1Shift1 = [fftOut2DMagSqRx1(2:end,:); fftOut2DMagSqRx1(1,:)];
    localMaxMat1D = and(fftOut2DMagSqRx1>fftOut2DMagSqRx1Shiftm1, fftOut2DMagSqRx1>fftOut2DMagSqRx1Shift1);
    else
    localMaxMat1D = true(size(fftOut2DMagSqRx1));
    end
    
    if detection_options.detect_only_local_maxima_in_doppler == 1
    fftOut2DMagSqRx1Shiftm1 = [fftOut2DMagSqRx1(:,end) fftOut2DMagSqRx1(:,1:end-1)];
    fftOut2DMagSqRx1Shift1 = [fftOut2DMagSqRx1(:,2:end) fftOut2DMagSqRx1(:,1)];
    localMaxMat2D = and(fftOut2DMagSqRx1>fftOut2DMagSqRx1Shiftm1, fftOut2DMagSqRx1>fftOut2DMagSqRx1Shift1);
    else
    localMaxMat2D = true(size(fftOut2DMagSqRx1));
    end
    
    %% 2D vel dimension CFAR
    if (size(fftOut2DMagSqRx1,2) > (2*threshWinSize+2*threshSkipSize+2)) && (detection_options.do_cfar_in_doppler == 1)
    % CFAR threshold computation, detection, local max check, etc. (implemented without for loop)
    fftOut2DMagSqRx1t = fftOut2DMagSqRx1';
    fftOut2DXtended = [fftOut2DMagSqRx1t(end-threshWinSize-threshSkipSize+1:end,:); fftOut2DMagSqRx1t; fftOut2DMagSqRx1t(1:threshWinSize+threshSkipSize,:)];
    % Construct in one-shot the cell-average( a.k.a mean noise floor) for each cell in the 2D Array.
    noiseMeanMat_trans = construct_noise_mean_mat(detection_options.cfar_method, threshWinSize, threshSkipSize, fftOut2DXtended);
    % threshMat is a matrix of thresholds for each cell (size of threshMat is same as size of fftOut2D)
    if detection_options.use_log_cfar == 1
    threshMat = detThreshdB + noiseMeanMat_trans;
    else
    threshMat = 10^(detThreshdB/10)*noiseMeanMat_trans;
    end
    % Detection is based on cell exceeding threshold, as well as being a local maxima (in both dimensions)
    threshDecisionMat2D = fftOut2DMagSqRx1t > threshMat;
    threshDecisionMat2D = threshDecisionMat2D';
    
    % Only accept cells if threshold is exceeded and local maxima in both dimensions
    localMaxMat = and(localMaxMat1D, localMaxMat2D);
    detDecisionMat = and(threshDecisionMat, threshDecisionMat2D);
    detDecisionMat = and(detDecisionMat, localMaxMat);
    else
    localMaxMat = and(localMaxMat1D, localMaxMat2D);
    detDecisionMat = and(threshDecisionMat, localMaxMat);
    end
    
    
    % Detected Target Processing %
    [indxRange, indxDoppler] = find(detDecisionMat);
    
    [indxRangeSorted, sortedIdx] = sort(indxRange);
    indxDopplerSorted = indxDoppler(sortedIdx);
    
    end