⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsframe.java

📁 reed-solomon编码的java实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.*;
import java.awt.event.*;

import RSAlgorithm;
import polynomial;

/**
 * Reed-Solomon frame.
 *
 * An frame for coding/decoding Reed-Solomon codes.
 *
 * @author Benjamin Barras
 * @version 1.10, 13/02/99
 * @email benjamin.barras@epfl.ch * */

public class RSFrame extends Frame 
  implements WindowListener,ActionListener,AdjustmentListener,ItemListener
{
  int m;
  int indexInformation,indexError;
  int indexHelp,indexPolynomial;

  Button buttonRandom = new Button(" Random ");
  Button buttonClear = new Button(" Clear ");
  Button buttonBlank = new Button(" Blank ");
  Button buttonQuit = new Button(" Quit ");
  Label labelInformationSend = new Label("i=");
  Label labelInformationReceive = new Label("I=");
  Label labelCodeSend = new Label("c=");
  Label labelCodeError = new Label("e=");
  Label labelCodeReceive = new Label("d=");
  Label labelEnter = new Label(" Press ENTER for validation");
  Label labelErrorDetected = new Label(" Error detected : ");
  Label labelX = new Label("x =");
  TextField textFieldInformationSend = new TextField(5);
  TextField textFieldInformationReceive = new TextField(5);
  TextField textFieldCodeSend = new TextField(5);
  TextField textFieldCodeError = new TextField(5);
  TextField textFieldCodeReceive = new TextField(5);
  TextField textFieldIndexLeft = new TextField(3);
  TextField textFieldIndexRight = new TextField(3);
  TextField textFieldErrorDetected = new TextField(20);
  TextField textFieldX = new TextField(5);
  Scrollbar scrollbarLeft;
  Scrollbar scrollbarRight;
  Choice choiceHelp = new Choice();
  Choice choicePolynomial = new Choice();
  TextArea blackboard = new TextArea();

  RSAlgorithm rs;

  public RSFrame(int n, int k, int t, int p)
  {
    int i;
    String str = new String("");

    rs = new RSAlgorithm(n,k,t,p);
    indexInformation = 0;
    indexError = 0;
    m = n - (2 * t);
    setFont(new Font("Helvetica",Font.PLAIN,14));
    str = "Reed-Solomon Encoder/Decoder : GF(2^k) with";
    str = str + " n = " + Integer.toString(n,10) + ",";
    str = str + " k = " + Integer.toString(k,10) + ",";
    str = str + " t = " + Integer.toString(t,10) + ".";
    setTitle(str);

    Panel row1 = new Panel(); 
    Panel row2 = new Panel(); 
    Panel row3 = new Panel(); 
    Panel row4 = new Panel(); 
    Panel row5 = new Panel(); 
    Panel row31 = new Panel(); 
    Panel row32 = new Panel(); 
    Panel row41 = new Panel(); 
    Panel row42 = new Panel(); 

    buttonRandom.addActionListener(this);
    buttonClear.addActionListener(this);
    buttonBlank.addActionListener(this);
    buttonQuit.addActionListener(this);

    scrollbarLeft = new Scrollbar(Scrollbar.VERTICAL,indexInformation,1,0,m);
    scrollbarLeft.addAdjustmentListener(this);
    scrollbarRight = new Scrollbar(Scrollbar.VERTICAL,indexError,1,0,rs.n);
    scrollbarRight.addAdjustmentListener(this);

    textFieldInformationSend.addActionListener(this);
    textFieldCodeError.addActionListener(this);
    textFieldX.addActionListener(this);

    textFieldIndexLeft.setEditable(false);
    textFieldIndexRight.setEditable(false);
    textFieldInformationSend.setEditable(true);
    textFieldInformationReceive.setEditable(false);
    textFieldCodeSend.setEditable(false);
    textFieldCodeError.setEditable(true);
    textFieldCodeReceive.setEditable(false);
    textFieldErrorDetected.setEditable(false);
    textFieldX.setEditable(true);

    blackboard.setBackground(Color.white);
    labelErrorDetected.setForeground(Color.black);
    textFieldErrorDetected.setBackground(Color.white);
    textFieldErrorDetected.setForeground(Color.red);
    textFieldInformationReceive.setBackground(Color.gray);
    textFieldCodeSend.setBackground(Color.gray);
    textFieldCodeReceive.setBackground(Color.gray);
    textFieldIndexLeft.setBackground(Color.gray);
    textFieldIndexLeft.setForeground(Color.white);
    textFieldIndexRight.setBackground(Color.gray);
    textFieldIndexRight.setForeground(Color.white);
    textFieldX.setBackground(Color.white);

    choiceHelp.addItem("Help");
    choiceHelp.addItem("Random");
    choiceHelp.addItem("Clear");
    choiceHelp.addItem("Blank");
    choiceHelp.addItem("Quit");
    choiceHelp.addItem("x = ");
    choiceHelp.addItem("n");
    choiceHelp.addItem("m");
    choiceHelp.addItem("t");
    choiceHelp.addItem("k");
    choiceHelp.addItem("i");
    choiceHelp.addItem("I");
    choiceHelp.addItem("c");
    choiceHelp.addItem("e");
    choiceHelp.addItem("d");
    choiceHelp.addItem("D");
    choiceHelp.addItem("i(x)");
    choiceHelp.addItem("I(x)");
    choiceHelp.addItem("c(x)");
    choiceHelp.addItem("e(x)");
    choiceHelp.addItem("d(x)");
    choiceHelp.addItem("D(x)");
    choiceHelp.addItem("g(x)");
    choiceHelp.addItem("s(x)");
    choiceHelp.addItem("L(x)");
    choiceHelp.addItem("W(x)");
    choiceHelp.addItem("U(x)");
    choiceHelp.addItem("p(x)");
    choiceHelp.addItem("v(x)");
    choiceHelp.addItemListener(this);

    choicePolynomial.addItem("Polynomial");
    choicePolynomial.addItem("i(x) = ");
    choicePolynomial.addItem("I(x) = ");
    choicePolynomial.addItem("c(x) = ");
    choicePolynomial.addItem("e(x) = ");
    choicePolynomial.addItem("d(x) = ");
    choicePolynomial.addItem("D(x) = ");
    choicePolynomial.addItem("g(x) = ");
    choicePolynomial.addItem("s(x) = ");
    choicePolynomial.addItem("L(x) = ");
    choicePolynomial.addItem("W(x) = ");
    choicePolynomial.addItem("U(x) = ");
    choicePolynomial.addItem("p(x) = ");
    choicePolynomial.addItem("v(x) = ");
    choicePolynomial.addItemListener(this);

    setLayout(new BorderLayout(5,5));

    row1.setLayout(new FlowLayout(FlowLayout.CENTER,2,2));
    row2.setLayout(new FlowLayout());
    row3.setLayout(new GridLayout(2,1,10,10));
    row4.setLayout(new GridLayout(2,1,10,10));
    row5.setLayout(new FlowLayout());
    row31.setLayout(new FlowLayout());
    row32.setLayout(new FlowLayout());
    row41.setLayout(new FlowLayout());
    row42.setLayout(new FlowLayout());

    row1.add(labelInformationSend);
    row1.add(textFieldInformationSend);
    row1.add(labelInformationReceive);
    row1.add(textFieldInformationReceive);
    row1.add(textFieldIndexLeft);
    row1.add(scrollbarLeft);
    row1.add(scrollbarRight);    
    row1.add(textFieldIndexRight);
    row1.add(labelCodeSend);
    row1.add(textFieldCodeSend);
    row1.add(labelCodeError);
    row1.add(textFieldCodeError);
    row1.add(labelCodeReceive);
    row1.add(textFieldCodeReceive);

    row3.add(row31);
    row3.add(row32);

    row4.add(row41);
    row4.add(row42);

    row31.add(labelX);
    row31.add(textFieldX);
    row31.add(labelErrorDetected);
    row31.add(textFieldErrorDetected);

    row32.add(buttonRandom);
    row32.add(buttonClear);
    row32.add(buttonBlank);
    row32.add(buttonQuit);

    row41.add(choiceHelp);
    row42.add(choicePolynomial);

    rs.processing();
    writeAllValue();
    writeHelp();
    writePolynomial();

    add("North",row1);
    add("Center",blackboard);
    add("South",row3);
    add("West",row4);
    pack();
    show();
  }
  
  public void writeAllValue()
  {
    int i;
    String str;

    i = rs.messageSend.coefficient[indexInformation];
    str = Integer.toString(i,10);
    textFieldInformationSend.setText(str);
    i = rs.messageReceive.coefficient[indexInformation];
    str = Integer.toString(i,10);
    textFieldInformationReceive.setText(str);
    str = Integer.toString(indexInformation,10);
    textFieldIndexLeft.setText(str);
    str = Integer.toString(indexError,10);
    textFieldIndexRight.setText(str);
    i = rs.codeSend.coefficient[indexError];
    str = Integer.toString(i,10);
    textFieldCodeSend.setText(str);
    i = rs.codeError.coefficient[indexError];
    str = Integer.toString(i,10);
    textFieldCodeError.setText(str);
    i = rs.codeReceive.coefficient[indexError];
    str = Integer.toString(i,10);
    textFieldCodeReceive.setText(str);
    i = rs.errorNumber;
    if (rs.failed) str = " > t (decoding failed)"; 
    else str = Integer.toString(i,10);
    textFieldErrorDetected.setText(str);
  }
  
  public void makeRandom()
  {
    int i,j,c,x;
    double d,r;

    j = indexInformation;
    for (i = 0; i < j; i++)
    {
      r = Math.random();
      d = (double) m;
      x = (int) (r * d);
      r = Math.random();
      d = (double) rs.gf.q;
      c = (int) (r * d);
      rs.messageSend.coefficient[x] = c;
    }
    rs.messageSend.degree = rs.degree(rs.messageSend);
    j = indexError;
    for (i = 0; i < j; i++)
    {
      r = Math.random();
      d = (double) rs.n;
      x = (int) (r * d);
      r = Math.random();
      d = (double) rs.gf.q;
      c = (int) (r * d);
      rs.codeError.coefficient[x] = c;
    }
    rs.codeError.degree = rs.degree(rs.codeError);
  }

  public void writeHelp()
  {
    String str = new String("");

    switch(indexHelp)
    {
      case 0 :
        str = "";
        break;
      case 1 :
        str = "--- Random Button ---";
        blackboard.append(str + "\n");
        str = "Use the index scroll bar for giving the cardinal of random number.";
        blackboard.append(str + "\n");
        str = "For example : The index number on the left equal 8 and the index number on the right equal 0.";
        blackboard.append(str + "\n");
        str = "If you press the Random button, you have 8 new random number for the data and no new random number for the code error.";
        blackboard.append(str + "\n");
        break;
      case 2 :
        str = "--- Clear Button ---";
        blackboard.append(str + "\n");
        str = "All polynomials are setting to zero.";
        blackboard.append(str + "\n");
        break;
      case 3 :
        str = "--- Blank Button ---";
        blackboard.append(str + "\n");
        str = "Clear the text area.";
        blackboard.append(str + "\n");
        break;
      case 4 :
        str = "--- Quit Button ---";
        blackboard.append(str + "\n");
        str = "Close the frame.";
        blackboard.append(str + "\n");
        break;
      case 5 :
        str = "--- x = ? ---";
        blackboard.append(str + "\n");
        str = "Evaluate the selected polynomial at the value given for x,";
        blackboard.append(str + "\n");
        str = "and evaluate the derivate of the selected polynomial at the value given for x.";
        blackboard.append(str + "\n");
        str = "Press ENTER for validate your value !";
        blackboard.append(str + "\n");
        break;
      case 6 : 
        str = "--- What is n ? ---";
        blackboard.append(str + "\n");
        str = "n is the number of blocks for this code of Reed-Solomon.";
        blackboard.append(str + "\n");
        break;
      case 7 : 
        str = "--- What is m ? ---";
        blackboard.append(str + "\n");
        str = "m is the number of blocks for the data information.";
        blackboard.append(str + "\n");
        str = "It is given by m = n - 2t.";
        blackboard.append(str + "\n");
        break;
      case 8 : 
        str = "--- What is t ? ---";
        blackboard.append(str + "\n");
        str = "t is the maximum number of block errors authorised for this code.";
        blackboard.append(str + "\n");
        break;
      case 9 : 
        str = "--- What is k ? ---";
        blackboard.append(str + "\n");
        str = "k is the number of bits for each block.";
        blackboard.append(str + "\n");
        break;
      case 10 : 
        str = "--- What is i ? ---";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -