QAM modifications
This commit is contained in:
18
QAM/qam.c
18
QAM/qam.c
@ -15,23 +15,31 @@ struct qam_system_s {
|
|||||||
typedef struct qam_system_s qam_system;
|
typedef struct qam_system_s qam_system;
|
||||||
|
|
||||||
void init_constellation (qam_system *qam) {
|
void init_constellation (qam_system *qam) {
|
||||||
int sm = sqrt(qam->M);
|
int sm = (int)sqrt(qam->M);
|
||||||
qam->constellation = (double complex**)malloc(sizeof(double complex*) * sm);
|
qam->constellation = (double complex**)malloc(sizeof(double complex*) * sm);
|
||||||
|
|
||||||
for (int i = 0; i < sm; i++) {
|
for (int i = 0; i < sm; i++) {
|
||||||
qam->constellation[i] = (double complex*)malloc(sizeof(double complex) * sm);
|
qam->constellation[i] = (double complex*)malloc(sizeof(double complex) * sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double norm_factor = sqrt((double)(qam->M - 1) / 3.0); // Pour puissance unitaire
|
||||||
|
|
||||||
for (int i = 0; i < sm; i++) {
|
for (int i = 0; i < sm; i++) {
|
||||||
double complex ip = -(sm - 1) + 2 * i;
|
double complex ip = -(sm - 1) + 2 * i;
|
||||||
for (int j = 0; j < sm; j++) {
|
for (int j = 0; j < sm; j++) {
|
||||||
double complex qp = -(sm - 1) + 2 * j;
|
double complex qp = -(sm - 1) + 2 * j;
|
||||||
qam->constellation[i][j] = ip + I * qp;
|
qam->constellation[i][j] = (ip + I * qp) / norm_factor;
|
||||||
qam->constellation[i][j] /= sqrt((qam->M-1)/3.0); // Pour puissance unitaire
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void free_constellation(qam_system *qam) {
|
||||||
|
int sm = (int)sqrt(qam->M);
|
||||||
|
for (int i = 0; i < sm; i++)
|
||||||
|
free(qam->constellation[i]);
|
||||||
|
free(qam->constellation);
|
||||||
|
}
|
||||||
|
|
||||||
void bits_to_symbols (qam_system *qam, int *bits, int nb_bits, double complex *symbols) {
|
void bits_to_symbols (qam_system *qam, int *bits, int nb_bits, double complex *symbols) {
|
||||||
int nb_symbols = nb_bits / qam->k;
|
int nb_symbols = nb_bits / qam->k;
|
||||||
int sm = sqrt(qam->M);
|
int sm = sqrt(qam->M);
|
||||||
@ -76,9 +84,7 @@ int main () {
|
|||||||
double complex* s = (double complex*)malloc(sizeof(double complex) * total_samples);
|
double complex* s = (double complex*)malloc(sizeof(double complex) * total_samples);
|
||||||
modulate(&qam, symbols, nb_symbols, s);
|
modulate(&qam, symbols, nb_symbols, s);
|
||||||
|
|
||||||
for(int i=0; i<sqrt(qam.M); i++)
|
free_constellation(&qam);
|
||||||
free(qam.constellation[i]);
|
|
||||||
free(qam.constellation);
|
|
||||||
free(s);
|
free(s);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user