| 平均電力が1のQAM信号を生成するC++のソースコードです。Average energy in a QAM constellationを参考に作りました。 サンプルプログラムの使い方 †
 主要な関数: make_qam †QAMの信号点を作成する関数です。引数のsizeには信号点の数を入れます。sdlab_complexは実質はstd::complex<double>です。sdlab.hで宣言してます。 void make_qam(int size, sdlab_complex **qam)
{
  int n = sqrt(size);
  int qam_bits = round(log2(n));
  uint16_t qam_mask = ((1 << qam_bits) - 1);
  double scale = sqrt((2 * (pow(2, qam_bits * 2) - 1)) / 3);
  for(uint16_t i = 0; i < n; i++){
    for(uint16_t j = 0; j < n; j++){
      double real = j;
      double imag = n - i - 1;
      real = real * 2 - qam_mask;
      imag = imag * 2 - qam_mask;
      real = real / scale;
      imag = imag / scale;
      qam[i][j] = sdlab_complex(real,imag);
    }
  }
}
 |