Azzera filtri
Azzera filtri

nested for loop for 2d matrix cell

1 visualizzazione (ultimi 30 giorni)
ARN
ARN il 22 Mag 2020
Commentato: ARN il 22 Mag 2020
Hi,
I have a cell RDM {1x10} and every cell contains (512x1024) matrix. Now i have applied the following algorithm on one Matrix which i have to apply on all the matrix.
I get error on indexing every time. How can i implement that for all 10 matrices?
Tr = 10;
Td = 8;
Gr = 4;
Gd = 4;
% offset the threshold by SNR value in dB
offset = 1.4;
for i = Tr+Gr+1:(fft_size/2)-(Gr+Tr)
for j = Td+Gd+1:fft_size-(Gd+Td)
noise_level = zeros(1,1);
for p = i-(Tr+Gr) : i+(Tr+Gr)
for q = j-(Td+Gd) : j+(Td+Gd)
if (abs(i-p) > Gr || abs(j-q) > Gd)
noise_level = noise_level + 10.^(RDM(p,q)/10);
end
end
end
threshold = 10*log10(noise_level/(2*(Td+Gd+1)*2*(Tr+Gr+1)-(Gr*Gd)-1));
threshold = threshold + offset;
CUT = RDM(i,j);
if (CUT < threshold)
RDM(i,j) = 0;
else
RDM(i,j) = 1;
end
end
end

Risposte (1)

Abdolkarim Mohammadi
Abdolkarim Mohammadi il 22 Mag 2020
Modificato: Abdolkarim Mohammadi il 22 Mag 2020
I think the problem lies here
CUT = RDM(i,j);
if (CUT < threshold{o})
You said that RDM is a cell matrix; so CUT is also a cell matrix because it has been assigned using parantheses, not curly braces. But threshold{o} is double because you used implicit casting using curly braces. If this is the problem, then you must use
CUT = RDM{i,j};
This makes CUT a double and the comparison in the following line becomes possible.
  4 Commenti
ARN
ARN il 22 Mag 2020
again not the answer i am looking for. I want to implement for all cells in a for loop.
ARN
ARN il 22 Mag 2020
something like that:
for k = length(RDM)
RDM{k} = RDM{k}/max(max(RDM{k}));
for i = Tr+Gr+1:(fft_size/2)-(Gr+Tr)
for j = Td+Gd+1:fft_size-(Gd+Td)
%Create a vector to store noise_level for each iteration on training cells
%noise_level = cell{zeros(1,1)};
% Calculate noise SUM in the area around CUT
for p = i-(Tr+Gr) : i+(Tr+Gr)
for q = j-(Td+Gd) : j+(Td+Gd)
if (abs(i-p) > Gr || abs(j-q) > Gd)
noise_level{k} = noise_level{k} + 10.^(RDM{k}(p,q)/10);
end
end
end
% Calculate threshould from noise average then add the offset
threshold{k} = 10*log10(noise_level{k}/(2*(Td+Gd+1)*2*(Tr+Gr+1)-(Gr*Gd)-1));
threshold{k} = threshold{k} + offset;
CUT{k} = RDM{k}(i,j);
if (CUT{k} < threshold{k})
RDM{k}(i,j) = 0;
else
RDM{k}(i,j) = 1;
end
end
end
end

Accedi per commentare.

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by