質問編集履歴
4
調べてみたことを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -214,6 +214,12 @@
|
|
214
214
|
|
215
215
|
```
|
216
216
|
|
217
|
+
//追記
|
218
|
+
|
219
|
+
gfを28としていますが調べてみたところガロア体なのでGF(2^8=256)ではないかと考えています。
|
220
|
+
|
221
|
+
|
222
|
+
|
217
223
|
processing用に書き換えたもの
|
218
224
|
|
219
225
|
```processing
|
3
webで回したCコードを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -104,6 +104,116 @@
|
|
104
104
|
|
105
105
|
```
|
106
106
|
|
107
|
+
webでRuntimeErrorが出たもの
|
108
|
+
|
109
|
+
ideoneというサイトで回しました
|
110
|
+
|
111
|
+
```C
|
112
|
+
|
113
|
+
#include <stdio.h>
|
114
|
+
|
115
|
+
#include <stdlib.h>
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
int prod(int x,int y,int *log,int *alog,int gf){
|
120
|
+
|
121
|
+
if(!x || !y)
|
122
|
+
|
123
|
+
return 0;
|
124
|
+
|
125
|
+
else
|
126
|
+
|
127
|
+
return alog[(log[x] + log[y]) %(gf-1)];
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
void ReedSolomon(int *wd, int nd, int nc, int gf, int pp) {
|
134
|
+
|
135
|
+
int i,j,k,*log,*alog,*c;
|
136
|
+
|
137
|
+
log = malloc(sizeof(int) * gf);
|
138
|
+
|
139
|
+
alog = malloc(sizeof(int) * gf);
|
140
|
+
|
141
|
+
log[0] = 1-gf; alog[0] = 1;
|
142
|
+
|
143
|
+
for (i = 1; i < gf; i++) {
|
144
|
+
|
145
|
+
alog[i] = alog[i-1] * 2;
|
146
|
+
|
147
|
+
if (alog[i] >= gf) alog[i] ^= pp;
|
148
|
+
|
149
|
+
log[alog[i]] = i;
|
150
|
+
|
151
|
+
}
|
152
|
+
|
153
|
+
c = malloc(sizeof(int) * (nc+1));
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
for (i=1; i<=nc; i++) c[i] = 0;
|
158
|
+
|
159
|
+
c[0] = 1;
|
160
|
+
|
161
|
+
for (i=1; i<=nc; i++) {
|
162
|
+
|
163
|
+
c[i] = c[i-1];
|
164
|
+
|
165
|
+
for (j=i-1; j>=1; j--) {
|
166
|
+
|
167
|
+
c[j] = c[j-1] ^ prod(c[j],alog[i],log,alog,gf);
|
168
|
+
|
169
|
+
}
|
170
|
+
|
171
|
+
c[0] = prod(c[0],alog[i],log,alog,gf);
|
172
|
+
|
173
|
+
}
|
174
|
+
|
175
|
+
for (i=nd; i<=(nd+nc); i++) {
|
176
|
+
|
177
|
+
wd[i] = 0;
|
178
|
+
|
179
|
+
}
|
180
|
+
|
181
|
+
for (i=0; i<nd; i++) {
|
182
|
+
|
183
|
+
k = wd[nd] ^ wd[i];
|
184
|
+
|
185
|
+
for (j=0; j<nc; j++) {
|
186
|
+
|
187
|
+
wd[nd+j] = wd[nd+j+1] ^ prod(k,c[nc-j-1],log, alog,gf);
|
188
|
+
|
189
|
+
}
|
190
|
+
|
191
|
+
}
|
192
|
+
|
193
|
+
free(c);
|
194
|
+
|
195
|
+
free(alog);
|
196
|
+
|
197
|
+
free(log);
|
198
|
+
|
199
|
+
}
|
200
|
+
|
201
|
+
int main()
|
202
|
+
|
203
|
+
{
|
204
|
+
|
205
|
+
printf("Hello, World!\n");
|
206
|
+
|
207
|
+
int wd[3] = {142,164,186};
|
208
|
+
|
209
|
+
ReedSolomon(wd,3,5,28,301);
|
210
|
+
|
211
|
+
return 0;
|
212
|
+
|
213
|
+
}
|
214
|
+
|
215
|
+
```
|
216
|
+
|
107
217
|
processing用に書き換えたもの
|
108
218
|
|
109
219
|
```processing
|
2
タイトルにデータマトリックスを作るためにを追加
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ECC200のエラーコード作成方法についてC->java
|
1
|
+
DataMatrixを作るためにECC200のエラーコード作成方法についてC->java
|
test
CHANGED
File without changes
|
1
processingコードの一部間違えていたため訂正(訂正前はコメントアウト部)
test
CHANGED
File without changes
|
test
CHANGED
@@ -158,7 +158,9 @@
|
|
158
158
|
|
159
159
|
alogDic.set(str(i), alogDic.get(str(i))^pp);
|
160
160
|
|
161
|
+
//logDic.set( str(i), ( alogDic.get( str(i) ) ) );
|
162
|
+
|
161
|
-
|
163
|
+
logDic.set( str ( alogDic.get( str(i) )) ,(i) );
|
162
164
|
|
163
165
|
}
|
164
166
|
|