QAM add noise

This commit is contained in:
2025-09-30 10:03:59 +02:00
parent ae3da7c9f0
commit 1b1851be8a
3 changed files with 25 additions and 46410 deletions

BIN
QAM/qam

Binary file not shown.

View File

@ -41,6 +41,23 @@ void init_constellation (qam_system* qam) {
}
}
// Calcul du bruit gaussien pour un sigma donné
// Formule de Box-Muller
double gaussian_noise (double sigma) {
double u1 = (rand() + 1) / ((double)RAND_MAX + 2);
double u2 = (rand() + 1) / ((double)RAND_MAX + 2);
return sigma * sqrt(-2 * log(u1)) * cos(2 * M_PI * u2);
}
// Ajout du bruit
void add_noise (double complex* s, int len, double sigma) {
for (int i = 0; i < len; i++) {
double nr = gaussian_noise(sigma);
double ni = gaussian_noise(sigma);
s[i] += nr + I * ni;
}
}
// Changer le tableau de bits en boolen ou alors la represenation binaire et shifter pour extraire les bits (pas bien si M plus grand)
void bits_to_symbols (qam_system* qam, uint8_t* bits, int nb_bits, double complex* symbols) {
int nb_symbols = nb_bits / qam->k;
@ -129,7 +146,7 @@ int main (int argc, char *argv[]) {
qam.M = 256;
qam.k = (int)log2((double)(qam.M));
qam.Fs = 44100;
qam.Ts = 0.00003;
qam.Ts = 0.003;
qam.N = (int)qam.Fs * qam.Ts;
qam.Fc = 2000;
init_constellation(&qam);
@ -155,6 +172,13 @@ int main (int argc, char *argv[]) {
int total_samples = qam.N * nb_symbols;
double complex* s = (double complex*)malloc(sizeof(double complex) * total_samples);
modulate(&qam, symbols, nb_symbols, s);
// Ajout du bruit
double signal_power = (2.0/3.0)*(qam.M-1); // puissance moyenne avant échelle
double snr_dB = -27; // Signal to noise ratio
double snr_lin = pow(10.0, snr_dB / 10.0);
double sigma = sqrt(signal_power / snr_lin);
printf("Ajout du bruit \n puissance du signal : %f\n SNR db : %f\n sigma : %f\n", signal_power, snr_dB, sigma);
add_noise(s, total_samples, sigma);
printf("Demodulation\n");

46409
QAM/sin.txt

File diff suppressed because it is too large Load Diff