M系列信号生成関数

| ← back |
| home |

M系列信号生成関数

//================================================================ 

int mseq16(void) {
  static unsigned p=0;
  static char     z[16*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1,
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1 
                          };
  
  p=(p+1)%16;
  z[p]=z[p]*z[p+14]*z[p+13]*z[p+11];  // 16, 14, 13, 11
  return z[p+16]=z[p];
}

//================================================================ 

int mseq24(void) {
  static unsigned p=0;
  static char     z[24*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1,
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1 
                          };
  
  p=(p+1)%24;
  z[p]=z[p]*z[p+23]*z[p+21]*z[p+20];  // 24, 23, 21, 20
  return z[p+24]=z[p];
}

//================================================================ 

int mseq32(void) {
  static unsigned p=0;
  static char     z[32*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, 
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1 
                          };
  
  p=(p+1)%32;
  z[p]=z[p]*z[p+30]*z[p+26]*z[p+25];  // 32, 30, 26, 25
  return z[p+32]=z[p];
}

//================================================================ 

int mseq48(void) {
  static unsigned p=0;
  static char     z[48*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1,
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1 
                          };
  
  p=(p+1)%48;
  z[p]=z[p]*z[p+44]*z[p+41]*z[p+39];  // 48, 44, 41, 39
  return z[p+48]=z[p];
}

//================================================================ 

int mseq64(void) {
  static unsigned p=0;
  static char     z[64*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, 
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1 
                          };
  
  p=(p+1)%64;
  z[p]=z[p]*z[p+63]*z[p+61]*z[p+60];  // 64, 63, 61, 60
  return z[p+64]=z[p];
}

//================================================================ 

int mseq128(void) {
  static unsigned p=0;
  static char     z[128*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1,
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1  
                          };
  
  p=(p+1)%128;
  z[p]=z[p]*z[p+127]*z[p+126]*z[p+121];  // 128, 127, 126, 121
  return z[p+128]=z[p];
}

//================================================================ 

int mseq256(void) {
  static unsigned p=0;
  static char     z[256*2]={ 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
                            -1, -1, -1, -1, -1, -1, 
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
                             1,  1,  1,  1,  1,  1
                          };
  
  p=(p+1)%256;
  z[p]=z[p]*z[p+254]*z[p+251]*z[p+246];  // 256, 254, 251, 246
  return z[p+256]=z[p];
}

//================================================================ 

テスト用main関数

#include 

#define LEN 100000

unsigned i;

void main(void) {
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq16());
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq24());
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq32());
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq48());
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq64());
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq128());
  for (i=0; i<LEN; i=i+1) printf("%i\n", 20000*mseq256());
  for (i=0; i<LEN; i=i+1) printf("0\n");
  for (i=0; i<LEN; i=i+1) printf("%i\n", 3000*(mseq16()+mseq24()+mseq32()+mseq48()+mseq64()+mseq128()+mseq256()));
}
| ← back | ↑top |
| home |