• 大小: 16KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: Java
  • 标签: 信道容量  

资源简介

java实现迭代法求信道容量,虽然matlab实现更简单,但资源包含矩阵类的封装和一些操作的java实现,希望可以供java上使用到矩阵操作的朋友学习交流

资源截图

代码片段和文件信息

package com.matrix;

import java.text.DecimalFormat;
import java.util.Scanner;

import com.myexception.ArraySizeException;
import com.myexception.IllegalNumberException;
import com.myexception.MatrixCanNotMultipleException;

/**
 * 迭代法求信道容量
 * 作者:John Luang
 * 单位:北京邮电大学信息与通信工程学院
 */
public class Caculate {

public Caculate() {
// TODO Auto-generated constructor stub
}
/**
 * 求ai
 */
public double[][]  getAi(double pij[][]double qTran[][])throws MatrixCanNotMultipleException{
if(pij[0].length!=qTran.length)throw new MatrixCanNotMultipleException();
 else{
        double c[][] = new double[pij.length][qTran[0].length];  
        int xij;  
        for(i = 0;i         {  
            for(j = 0;j             {  
                double temp = 0;  
                for(x = 0;x                 {  
                 /*
                  * 注意,此处如果pij[i][x]=0则pij[i][x]*ln(pij[i][x]/qTran[x][j])=0
                  * 但是直接算Math.log(pij[i][x]/qTran[x][j])会得到NaM无穷大就出错了
                  * 要在pij[i][x]=0是分开处理
                  */
                 if(pij[i][x]!=0.0)
                    temp+=Math.log(pij[i][x]/qTran[x][j])*pij[i][x];  
                }  
                c[i][j] = Math.pow(2.718281828 temp);  
                  
            }  
        }
return c;}

}
/**
 * 求max(ai)
 */
public double max(double[][]a){

  int n; 
  double max=a[0][0]; 
  for(n=0;n<=a.length-1;n++) { 
  if(max    max=a[n][0]; 
  } 
  return max;
  
 } 

public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
Caculate c=new Caculate();
//dalta和精确度有关,可以自己选取,一般在0.001到0.0001之间即可
double dalta=0.0001;
double cap=0;
try{

    System.out.println(“请输入信道转移矩阵{pij}:“);
    String s1=scan.next();
    System.out.println(“请输入行数(输入符号集大小)r“);
    int r=Integer.parseInt(scan.next());
    System.out.println(“请输入列数(输出符号集大小)s“);
    int s=Integer.parseInt(scan.next());
    Matrix matrix1=new Matrix(s1 r s);
    System.out.println(“信道转移矩阵{pij}:“);
    matrix1.printmatrix();
    System.out.println(“------------------------------“);
    System.out.println(“取初始概率分布为均匀分布,pi=1/r“);
    double[][]p=new double[1][r];
for(int i=0;i p[0][i]=1d/r;
}
new Matrix(p).printmatrix();
while(true){
    double [][]q=Matrix.multiple(p matrix1.getInstance());
    double [][]qTran=Matrix.transformMatrix(q);
    //new Matrix(qTran).printmatrix();
    double [][]a=c.getAi(matrix1.getInstance() qTran);
    double [][]u=Matrix.multiple(p a);
    double iL=Logarithm.log(u[0][0] 2);
    //System.out.println(“IL=“+iL);
    double iU=Logarithm.log(c.max(a) 2);
    //System.out.println(“IU=“+iU);
    if((iU-iL)      cap=iL;
     System.out.println(“---------------------------“);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-01-02 19:49  The channel capacity\
     文件         301  2016-01-01 14:08  The channel capacity\.classpath
     文件         396  2016-01-01 14:08  The channel capacity\.project
     目录           0  2016-01-02 19:49  The channel capacity\.settings\
     文件         598  2016-01-01 14:08  The channel capacity\.settings\org.eclipse.jdt.core.prefs
     目录           0  2016-01-02 19:49  The channel capacity\bin\
     目录           0  2016-01-02 19:49  The channel capacity\bin\com\
     目录           0  2016-01-02 19:49  The channel capacity\bin\com\matrix\
     文件        3947  2016-01-02 19:17  The channel capacity\bin\com\matrix\Caculate.class
     文件         420  2016-01-01 22:16  The channel capacity\bin\com\matrix\Logarithm.class
     文件        5214  2016-01-02 15:10  The channel capacity\bin\com\matrix\Matrix.class
     目录           0  2016-01-02 19:49  The channel capacity\bin\com\myexception\
     文件         464  2016-01-01 22:34  The channel capacity\bin\com\myexception\ArraySizeException.class
     文件         453  2016-01-02 14:54  The channel capacity\bin\com\myexception\IllegalNumberException.class
     文件         492  2016-01-01 22:34  The channel capacity\bin\com\myexception\MatrixCanNotMultipleException.class
     目录           0  2016-01-02 19:49  The channel capacity\src\
     目录           0  2016-01-02 19:49  The channel capacity\src\com\
     目录           0  2016-01-02 19:49  The channel capacity\src\com\matrix\
     文件        3847  2016-01-02 19:17  The channel capacity\src\com\matrix\Caculate.java
     文件         155  2016-01-01 22:16  The channel capacity\src\com\matrix\Logarithm.java
     文件        5296  2016-01-02 15:10  The channel capacity\src\com\matrix\Matrix.java
     目录           0  2016-01-02 19:49  The channel capacity\src\com\myexception\
     文件         242  2016-01-01 22:34  The channel capacity\src\com\myexception\ArraySizeException.java
     文件         235  2016-01-02 14:54  The channel capacity\src\com\myexception\IllegalNumberException.java
     文件         257  2016-01-01 22:34  The channel capacity\src\com\myexception\MatrixCanNotMultipleException.java

评论

共有 条评论

相关资源