Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我有一个执行以下功能的for循环:
取M x 8矩阵,然后:
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 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 使用500万个元素运行此循环将花费超过1个小时的时间。我需要它尽快(以秒为单位)。这个循环能被向量化吗? 回答: 我再次感谢阿姆罗(Amro)给我一个解决问题的想法。抱歉,我在问题中没有明确表示自己。 这是我对问题的解决方案: %#BS CDMA, Block size 128,512,1024,2048 BlockSize = 512; RowNeeded = BlockSize / 8; TotalRows = size(tempData); TotalRows = TotalRows(1,1); NumOfBlock = TotalRows / RowNeeded; CPSize = BlockSize / 4; %#spilt into blocks Header = reshape(tempHeader',[RowNeeded,8, 128]); Data = reshape(tempData',[RowNeeded,8, NumOfBlock]); clear tempData tempHeader; %#block spread & cyclic prefix K = zeros([1,BlockSize,128],'single'); L = zeros([1,BlockSize,NumOfBlock],'single'); for i = 1:NumOfBlock if i |
![]() |
![]() |