在进行分组码的译码算法研究中,我们需要把一个14×30的生成矩阵(矩阵的元素由0或1组成)变成面向网格的形式,即通过行初等变换使该矩阵满足如下两个条件:
条件1:生成矩阵的每一行的首1所处的列在其下方各行的首1所处列之前;
条件2:没有两行的尾1在同一列。
这里的首1指每一行第1个取值为1的元素,尾1指每一行最后一个为1的元素。另外,进行行初等变换的过程中,所有的运算都是模2运算。这个事情先交给一个硕士生做,但是,几天后,她告诉我:侯老师,这个矩阵维数太大了,我做不了。原来她都是用手算的。
其实这个事情完全可以用Matlab编程来实现。Matlab的Communications
Toolbox中提供了伽罗华域运算的功能,可以利用函数x_gf =
gf(x)先把要处理的矩阵变成2阶伽罗华域的矩阵,这样在后续的行初等变换中就省去了模2的操作。然后,利用行初等变换,从第一列开始,逐列使矩阵满足第一个条件,在第一个条件满足后,再利用初等变换,从最后一列开始,逐列使矩阵满足第二个条件。
编程技巧有很多,但是,对数学模型的理解和优化却是很多工程应用中我们最早忽视的技巧。