Filter löschen
Filter löschen

Nested for loops for cell array

1 Ansicht (letzte 30 Tage)
ARN
ARN am 25 Mai 2020
Bearbeitet: ARN am 25 Mai 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 matrices of cell.
fft_size = 2^6;
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
I get error on indexing every time. How can i implement that for all 10 matrices. i tried the following.
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
  4 Kommentare
Tommy
Tommy am 25 Mai 2020
Ok. Does this work?
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{k} = 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
If not, what's the error you're getting?
ARN
ARN am 25 Mai 2020
Bearbeitet: ARN am 25 Mai 2020
Running is taking a long time: still no result. Maybe i can ignore the CUT and noise level, not the threshold though

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by