📄 lmseq.c
字号:
/* * $Log: lmseq.c,v $ * Revision 1.1 2000/05/03 14:30:04 bjc97r * Initial revision * */char *_lmseq_id = "$Id: lmseq.c,v 1.1 2000/05/03 14:30:04 bjc97r Exp $";#include <stdio.h>#include <stdlib.h>#include <string.h>#include "lmseq.h"#include "u2long.h"/* * lmseq_create() differs from mseq_create() in that it can handle * higher order generator polynomials up to 63. * The polynomial should be given by the octal representation of it, * for example, lmseq = lmseq_create( 40, "020000012000005", 0, 1 ). * seed1 corresponds to upper 32bits and seed0 lower 32bits * as the initial state of the PN registers. */LMseq * lmseq_create( unsigned deg, char * poly, unsigned long seed1, unsigned long seed0 ){ LMseq * lmseq; u2long poly0; if ( deg > 63 ) { fprintf(stderr, "lmseq_create: ..cannot handle deg > 63\n"); return NULL; } lmseq = (LMseq *) malloc( sizeof(LMseq) ); lmseq->state0 = seed0; lmseq->state1 = seed1; poly0 = strtou2long( poly ); u2long_rshift( &poly0, 1 ); lmseq->mask0 = poly0.l; lmseq->mask1 = poly0.h; return lmseq;}/* lmseq_free() deallocates the memory space for the m-sequence generator. */void lmseq_free( LMseq * id ){ free( (void*) id );}/* * lmseq() gives the next m-sequence bit of the m-sequence generator. * The generated bit is unipolar, ie 1 or 0. */char lmseq( LMseq * id ){ char seq, tmp; seq = id->state0 & 1; tmp = id->state1 & 1; id->state0 >>= 1; if ( tmp ) id->state0 |= 0x80000000; id->state1 >>= 1; if ( seq ) { id->state0 ^= id->mask0; id->state1 ^= id->mask1; } return seq;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -