N = 16; % 训练窗口长度 G = 8; % 保护带宽度 Pfa = 1e-6; % 虚警概率 Nf = 2N-1; % 范围维数 Nd = 2G-1; % 多普勒维数 R = abs(s).^2; % 功率谱密度 R = [zeros(N-1,doppler_bins);R;zeros(N-1,doppler_bins)]; % 补零 threshold = zeros(range_bins,doppler_bins); % 阈值 for i = N:range_bins+N-1 for j = G:doppler_bins+G-1 noise = R(i-N+1:i+N-1,j-G+1:j+G-1); % 训练窗口 noise((N-1)/2+1,(G-1)/2+1) = 0; % 去掉信号点 noise = sort(noise(:)); % 排序 threshold(i-N+1,j-G+1) = noise(end-round(PfaNfNd)); % 阈值 end end detection = R > threshold; % 目标检测报错矩阵维度不一致怎么修改
时间: 2024-02-13 15:02:48 浏览: 63
你的代码中,第4行的 `Nf` 应该是 `2*N-1`,第5行的 `Nd` 应该是 `2*G-1`,第12行的 `round(PfaNfNd)` 应该是 `round(Pfa*Nf*Nd)`。同时,你需要根据 `s` 的维度来确定 `R` 的维度,以保证 `R` 的维度与 `range_bins` 和 `doppler_bins` 相同。修改后的代码如下:
```
N = 16; % 训练窗口长度
G = 8; % 保护带宽度
Pfa = 1e-6; % 虚警概率
Nf = 2*N-1; % 范围维数
Nd = 2*G-1; % 多普勒维数
R = abs(s).^2; % 功率谱密度
R = [zeros(N-1,doppler_bins);R;zeros(N-1,doppler_bins)]; % 补零
threshold = zeros(range_bins,doppler_bins); % 阈值
for i = N:range_bins+N-1
for j = G:doppler_bins+G-1
noise = R(i-N+1:i+N-1,j-G+1:j+G-1); % 训练窗口
noise((N-1)/2+1,(G-1)/2+1) = 0; % 去掉信号点
noise = sort(noise(:)); % 排序
threshold(i-N+1,j-G+1) = noise(end-round(Pfa*Nf*Nd)); % 阈值
end
end
detection = R > threshold; % 目标检测
```
请注意,这只是一种可能的修改方案,如果仍然出现报错,请检查其他代码部分和数据维度是否匹配。
阅读全文