├── J.m ├── J_1.m ├── README.md ├── main.m └── pexit.m /J.m: -------------------------------------------------------------------------------- 1 | function [j]=J(theta) 2 | % JFunction is an approximated function for PEXIT curves of AWGN 3 | % channel model, it takes alpha vector and returns a corresponding 4 | % JFunction vector. 5 | % Values are arbitary that fullfill required function 6 | [m,n]=size(theta); 7 | j=zeros(m,n); 8 | theta_a=1.6363; 9 | aj1=-0.0421061; 10 | bj1=0.209252; 11 | cj1=-0.00640081; 12 | aj2=0.00181491; 13 | bj2=-0.142675; 14 | cj2=-0.0822054; 15 | dj2=0.0549608; 16 | for p=1:m 17 | for q=1:n 18 | if 0<=theta(p,q)&&theta(p,q) nor the 12 | %names of its contributors may be used to endorse or promote products 13 | %derived from this software without specific prior written permission. 14 | % 15 | %THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 | %ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | %WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | %DISCLAIMED.IN NO EVENT SHALL BE LIABLE FOR ANY 19 | %DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | %(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | %LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | %ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | %(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | %SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | 26 | function [midEN, SNR]=MET_LDPC_treshold(S,R,pun) 27 | 28 | S=[1 1 1 1 1 1; 29 | 0 1 1 1 1 1; 30 | 0 0 1 1 1 1; 31 | ]; 32 | iterations=250;%number of decoding iterations 33 | pun=[6]; %puncture nodes 34 | samples=25;%number of samples(Monte Carlo) to make smooth estimation of iterative decoding treshold 35 | leEN=0; 36 | riEN=2; 37 | [m n]=size(S); 38 | R=(n-m)/(n-length(pun)); 39 | 40 | 41 | 42 | 43 | while( ~pexit(S,riEN,R,pun,iterations)) 44 | leEN=riEN; 45 | riEN=riEN+1; 46 | % disp(num2str(riEN)) 47 | end 48 | for L=1:1:samples 49 | midEN=(riEN+leEN)/2; 50 | % disp(num2str(midEN)) 51 | % if pexit(S,midEN,R) 52 | if pexit(S,midEN,R,pun,iterations) 53 | riEN=midEN; 54 | else 55 | leEN=midEN; 56 | end 57 | end 58 | midEN=(riEN+leEN)/2; %Eb/No 59 | SNR = midEN + 10*log10(log2(4)*R); %SNR for QPSK log2(M), M=4 60 | end 61 | 62 | -------------------------------------------------------------------------------- /pexit.m: -------------------------------------------------------------------------------- 1 | 2 | function [a]=pexit(B,ENdb,R,pun,iter) 3 | % function [a]=pexit(B,EN,R) 4 | [m,n]=size(B); 5 | L=iter; 6 | EN=10^(ENdb/10); 7 | cch2=8*R*EN*ones(1,n); 8 | cch2(pun)=0; 9 | IEv=zeros(m,n); 10 | IEc=zeros(m,n); 11 | IEc(:,pun)=1; 12 | %L=1000;%number of iterations 13 | Iapp=zeros(1,n); 14 | Iapp(pun)=1; 15 | store_Iapp=zeros(1,n); 16 | a=false; 17 | for k=1:L 18 | for j=1:n; 19 | temp=J_1(IEc(:,j)).^2; 20 | for i=1:m 21 | if B(i,j)==0 22 | IEv(i,j)=0; 23 | continue; 24 | else 25 | IEv(i,j)=J(sqrt(B(:,j)'*temp-temp(i)+cch2(j))); 26 | end 27 | end 28 | end 29 | for i=1:m 30 | temp=J_1(1-IEv(i,:))'.^2; 31 | for j=1:n 32 | if B(i,j)==0 33 | IEc(i,j)=0; 34 | continue; 35 | else 36 | IEc(i,j)=1-J(sqrt(B(i,:)*temp-temp(j))); 37 | end 38 | end 39 | end 40 | Iapp=J(sqrt(sum(B.*(J_1(IEc).^2))+cch2)); 41 | Iapp(pun)=1; 42 | if all(Iapp>=1-(1e-5))%&&all(Iapp<=1+1e-5) 43 | a=true; 44 | return; 45 | else 46 | eIapp=store_Iapp-Iapp; 47 | if all((eIapp)<1e-5)&&all((eIapp)>-(1e-5)) 48 | a=false; 49 | return 50 | else 51 | store_Iapp=Iapp; 52 | end 53 | end 54 | 55 | end --------------------------------------------------------------------------------