我已经为LFSR编写了函数(甚至不确定它是否正确),但我试图让它接受一个4位字符串作为输入,并返回一个64位。
#include <iostream>
#include <bitset>
#include <ctime>
#include <cstdlib>
#include <random>
using namespace std;
void linshift(int s)
{
int y = 0;
int count = 0;
std::bitset<4> lfsr(s);
std::bitset<4> bit(y);
do
{
cout << "lfsr: " << lfsr << endl;
bit = ((lfsr >> 0) ^ (lfsr >> 2));
lfsr = (lfsr >> 1) | (bit << 3);
++count;
} while (count < 4);
cout << endl;
}我的教授建议使用char,但是输出只是符号而不是二进制。
编辑:也许这能更好地解释我想问的问题。
种子s是线性反馈移位寄存器的起始状态。这是一个随机的4位值.通过让线性反馈移位寄存器产生64位输出来产生G(s)。
发布于 2015-10-26 23:00:52
stringstream ss;
do
{
ss << lfsr ;
bit = ((lfsr >> 0) ^ (lfsr >> 2));
lfsr = (lfsr >> 1) | (bit << 3);
++count;
} while (count < 16);
return ss.str()发布于 2015-10-27 01:48:36
在语法方面有点挑剔。lfsr^lfsr 2也是一个非最大lfsr,每6个循环重复一次。lfsr^lfsr 1或lfsr^lfsr 3是最大lfsr,每15个循环重复一次。注lfsr对应于多项式项x^4,lfsr1对应于x^3,lfsr2对应于x^2,lfsr3对应于x,位对应于不存在的lfsr4。
#include <iostream>
#include <bitset>
using namespace std;
void linshift(int s)
{
int count = 0;
bitset<4> lfsr(s);
bitset<1> bit;
do
{
// lfsr polynomial = x^4 + x + 1 = maximal lfsr, repeats every 15 cycles
// bit = lfsr[0] ^ lfsr[3];
// lfsr polynomial = x^4 + x^3 + 1 = maximal lfsr, repeats every 15 cycles
// bit = lfsr[0] ^ lfsr[1];
// lfsr polynomial = x^4 + x^2 + 1 = non-max lfsr, repeats ever 6 cycles
bit = lfsr[0] ^ lfsr[2];
lfsr = (lfsr >> 1) ^ bitset<4>(bit[0] << 3);
++count;
cout << bit;
} while (count < 64);
cout << endl;
}
int main()
{
for(int i = 1; i < 16; i++)
linshift(i);
return 0;
}https://stackoverflow.com/questions/33356690
复制相似问题