У меня есть для цикла, который выполняет следующие функции:Можно ли векторизовать следующий цикл?
взять М на 8 матрицу и:
- разделить его на блоки размером 512 элементов (значение X на 8 матрицы == 512, а количество элементов может быть 128,256,512,1024,2048)
- Измените блок на 1 на 512 (количество элементов) матрицы.
- Возьмите последнюю 1/4 матрицы и положите ее спереди,
, например.Data = [Data(1,385:512),Data(1,1:384)];
Ниже мой код:
for i = 1 : NumOfBlock
if i == 1
Header = tempHeader(1:RowNeeded,:);
Header = reshape(Header,1,BlockSize); %BS
Header = [Header(1,385:512),Header(1,1:384)]; %CP
Data = tempData(1:RowNeeded,:);
Data = reshape(Data,1,BlockSize); %BS
Data = [Data(1,385:512),Data(1,1:384)]; %CP
start = RowNeeded + 1;
end1 = RowNeeded * 2;
else
temp = tempData(start:end1,:);
temp = reshape(temp,1,BlockSize); %BS
temp = [temp(1,385:512),temp(1,1:384)]; %CP
Data = [Data, temp];
end
if i <= 127 & i > 1
temp = tempHeader(start:end1,:);
temp = reshape(temp,1,BlockSize); %BS
temp = [temp(1,385:512),temp(1,1:384)]; %CP
Header = [Header, temp];
end
start = end1 + 1;
end1=end1 + RowNeeded;
end
Запуск этого цикла с 5 млн элемент будет принимать более чем на 1 час. Мне нужно, чтобы это было как можно быстрее (в секундах). Можно ли векторизовать эту петлю?
Я делаю блок раздвигающим в CDMA. temp = reshape (temp, 1, BlockSize); должен взять 1-й столбец и превратить его в матрицу 1 на N.Повторите для остальных столбцов и добавьте их в конец матрицы 1-го по N. temp = [temp (1,385: 512), temp (1,1: 384)]; состоит в том, чтобы выполнить циклическую префиксную вставку. –