Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QFile>
- #include <QBitArray>
- #include <QDesktopServices>
- #include <QUrl>
- #include <QSettings>
- #include "CVCODEC.H" // The Convolution codec
- #define ReadSize 524288 // bytes to read
- bool needReverseBytes = true;
- bool needDiff = true;
- ULONG poly_1 = 0x3c; // == 0111100
- ULONG poly_2 = 0x73; // == 1110011
- const int MyDataSize = ReadSize / 2;
- QFile file("data.raw"); // open input raw data file
- if(file.open(QIODevice::ReadOnly))
- {
- QFile file_output("result.bin"); // output file
- if(file_output.open(QIODevice::WriteOnly))
- {
- // polynoms
- const ULONG nasa_param[2][1] =
- {
- { poly_1 },
- { poly_2 }
- };
- ConvolutionalCodec<2,1,7,8> TerraCodec(nasa_param); // Convolution codec object
- /*
- Where the template parameters:
- 2 - number of output streams
- 1 - number of input streams (bits/msg symbol)
- 7 - constraint length
- 8 - symbols per encoding group
- (I don't know what is it. I tried to change it, but the result does not change)
- */
- const int encodedlen = TerraCodec.getEncodedLength(MyDataSize);
- QByteArray ba = file.read(ReadSize); // read raw data
- if(needReverseBytes)
- reverseBytes(ba); // reverse bits in every byte
- QBitArray bit = bytesToBits(ba); // represent data as bit array
- QBitArray bit_diff(bit.size(), 0);
- // sum mod2
- if(needDiff)
- {
- for(int i=0; i<bit.size()-1; i++ )
- bit_diff[i] = bit[i] ^ bit[i+1];
- }
- else
- {
- for(int i=0; i<bit.size(); i++ )
- bit_diff[i] = bit[i];
- }
- ba = bitsToBytes(bit_diff); // write bits into byte array
- QByteArray decoded(MyDataSize, 0); // byte array for result
- TerraCodec.decode((const UBYTE*)ba.constData(), (UBYTE*)decoded.data(), MyDataSize);
- file_output.write(decoded); // write the result
- file_output.close();
- // Open the result in a default system viewer:
- QDesktopServices::openUrl(QUrl::fromLocalFile(file_output.fileName()));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement