|
楼主 |
发表于 2010-5-16 18:42
|
显示全部楼层
回复 沙发 ChaChing 的帖子
问题一:说实话我之前真看过那篇文章,我明白,斑竹的意思是想说有一个关于函数调用的例子就是子函数中如果有输入变量在主函数中必须之前要给变量赋初值,但是在主函数中我确实已经赋过值了(p = 0.02:0.02:0.2),还有一种可能性就是.m文件所在文件夹没有在MATLAB的路径中,可是我在set path中早就已经添加了此文件夹,所以这个原因也排除了,然后我就不知道了
问题二:代码没有"my_EEP"是因为这个子函数能够正确计算出结果
问题三:“load下”因为我的每个子函数都是用同样的参数,没必要每个程序都写一遍,所以我先写了一个参数计算的m文件,然后保存下来(save mypara.mat),然后再每个子函数调用时再load mypara.mat
最后还是附上my_EEP_scheme函数吧
- %% EEP scheme %%
- function PSNR_EEP = my_EEP_scheme(p)
- clear all;
- clc;
- close all;
- load mypara.mat;
- % EEP FEC值
- x = [31,31,31;31,31,31;31,31,31;31,31,31;31,31,31]; % FEC保护长度
- h_eep = round(B./(N-31)); % 每个单元的高度
- my_fec_EEP = sum(sum(h_eep*31))
- sigma_h = sum(sum(h_eep))
- if sigma_h <= M
- % calculate parameter Pe
- % p is packet loss probability and equal to packet loss rate
- my_Pe = zeros(T,Q);
- for i=0:T-1
- for j=0:Q-1
- for q = 0:x(i+1,j+1)
- my_Pe(i+1,j+1) = my_Pe(i+1,j+1) + nchoosek(N,q)*(p^q)*((1-p)^(N-q));
- end;
- end;
- end;
- Dchannel_loss = D.*(1-my_Pe).*num;
- Dchannel_loss_sum = sum(sum(Dchannel_loss));
- my_Pe
- Dloss_EEP = D0*(1+Dchannel_loss_sum)
- Dloss_EEP_average = Dloss_EEP/31
- PSNR_EEP = 10*log10((255^2)/Dloss_EEP_average)
- else
- disp('sigma_h is larger than M');
- end;
- end
复制代码
[ 本帖最后由 sunbojun0130 于 2010-5-16 19:05 编辑 ] |
|