|
平均電力が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);
}
}
}
|