平均電力が1のQAM信号を生成するC++のソースコードです。Average energy in a QAM constellationを参考に作りました。 サンプルプログラムの使い方 †ソースコードをここからダウンロードします。解凍してコンパイルして引数にQAMの信号点を指定すれば動作します。実行するとconstellation.htmlというファイルを吐いてJavaScript + camvusで信号点を可視化するように作ってあります。↓の写真だと実はQAMじゃなくてQPSKになっていますが、16QAMでも64QAMでもちゃんと動きます。 主要な関数: 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); } } } |