作者np62077 (ray)
看板MATLAB
标题[讨论] 如何加快程式的运算速度?
时间Tue Oct 1 10:36:21 2013
附上我的部分程式码,我想改善的主要就是这个侦错的回圈
我用的版本是R2011a版的
我这版好像没有biterr这个侦错的内建程式,
只好自己写暴力回圈,但是处理速度实在是太慢了QQ
想请问版上的各位高手是否有其他更好的作法可以加快程式处理的速度~
for z=1:1:10
error=0;
B = sqrt(0.005*z).*randn(2^18,1);
L = sqrt(0.005*z).*randn(2^18,1);
A = [1+B;B];
C = [L;L];
sigma(z,1)=sqrt(0.005*z+0.005*z);
thresholdlevel=0.5*(max(A)+min(A));
N1(2^19,1)=zeros;
for N=1:1:2^18;
if A(N,1) < thresholdlevel;
N1(N,1)=1;
end
end
for n=2^18+1:1:2^19;
if A(n,1) > thresholdlevel;
N1(n,1)=1;
end
end
BER(z,1)=sum(N1)/(2^19);
OSNR(z,1)=1/(2*sigma(z,1));
end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.117.163.68
1F:推 sunev:里面两个回圈可换成 N1=A1(1:2^18)<th|A1(2^18+1:end)>th; 10/01 10:52
2F:→ sunev:th是thresholdlevel 10/01 10:52
3F:→ np62077:A1指的是A吗~? 10/01 11:13
4F:推 sunev:对...打错了..-_- 10/01 11:28
5F:→ np62077:XDD没关系~~谢谢你~~速度真的差很多= =|| 10/01 11:35
6F:推 banco:有些运算可以简化 10/01 11:44
7F:→ np62077:还有哪里是可以简化的呢~?(眼睛发亮中) 10/01 13:18
8F:推 banco:主要是不用另外算A啦,可以靠B求到BER 10/01 15:44
9F:→ banco:sunev提供的要写成N1=[A(1:2^18)<th; A(2^18+1:end)>th]; 10/01 15:45
10F:→ banco:要不然维度不对。另外原po的N1(2^19,1)=zeros;会有问题, 10/01 15:46
11F:→ banco:你要的是N1=zeros(2^19,1)吧? 10/01 15:46
12F:→ banco:sunev的改写提供最主要的加速,自测是从30秒变到0.16秒 10/01 15:50
13F:→ banco:简化从0.16秒变成0.12秒,sunev的改法够快就不用再简化啦XD 10/01 15:52
14F:→ np62077:跟我笨笨的回圈比起来S大的方法很赞~XD 10/01 17:09
15F:→ np62077:另外我想知道的是:N()=0 和N=0()的差别是甚麽~为什麽这样 10/01 17:10
16F:→ np62077:写才不会有问题~ 10/01 17:11
17F:→ banco:N1(2^19,1)=zeros只把N1最後一个元素变0, 其它不变.... 10/01 19:26
18F:→ banco:N1=zeros(2^19,1)才会把所有N1的值设成0 10/01 19:26
19F:推 sunev:搞错了XD,感谢banco帮忙修正。 10/01 21:17
20F:→ np62077:了解~~真是获益良多阿~~谢谢S大跟B大^_^ 10/01 22:28
21F:→ Ga11ardo:CUDA 10/05 21:58