kopia lustrzana https://github.com/rs1729/RS
iq_svcl: sum of dB -> avg dB, i.e. dB(sum FFT)
rodzic
1832c3392f
commit
5f17c0f6a7
|
@ -290,8 +290,8 @@ static void *thd_FFT(void *targs) {
|
|||
int bitQ = 0;
|
||||
|
||||
float complex *z = NULL;
|
||||
float *db = NULL;
|
||||
float *sum_db = NULL;
|
||||
float *avg_rZ = NULL;
|
||||
float *avg_db = NULL;
|
||||
|
||||
dsp_t dsp = {0}; //memset(&dsp, 0, sizeof(dsp));
|
||||
|
||||
|
@ -326,8 +326,8 @@ static void *thd_FFT(void *targs) {
|
|||
|
||||
z = calloc(dsp.decM+1, sizeof(float complex)); if (z == NULL) goto exit_thread;
|
||||
|
||||
db = calloc(dsp.DFT.N+1, sizeof(float)); if (db == NULL) goto exit_thread;
|
||||
sum_db = calloc(dsp.DFT.N+1, sizeof(float)); if (sum_db == NULL) goto exit_thread;
|
||||
avg_rZ = calloc(dsp.DFT.N+1, sizeof(float)); if (avg_rZ == NULL) goto exit_thread;
|
||||
avg_db = calloc(dsp.DFT.N+1, sizeof(float)); if (avg_db == NULL) goto exit_thread;
|
||||
|
||||
|
||||
int j, n = 0;
|
||||
|
@ -378,15 +378,16 @@ static void *thd_FFT(void *targs) {
|
|||
|
||||
raw_dft(&(dsp.DFT), dsp.DFT.Z);
|
||||
|
||||
db_power(&(dsp.DFT), dsp.DFT.Z, db);
|
||||
for (j = 0; j < dsp.DFT.N; j++) sum_db[j] += db[j];
|
||||
for (j = 0; j < dsp.DFT.N; j++) avg_rZ[j] += cabs(dsp.DFT.Z[j]);
|
||||
|
||||
sum_n++;
|
||||
n_fft = 0;
|
||||
}
|
||||
if (sum_n*fft_step*mlen >= sec*dsp.sr_base) {
|
||||
|
||||
for (j = 0; j < dsp.DFT.N; j++) sum_db[j] /= (float)sum_n;
|
||||
for (j = 0; j < dsp.DFT.N; j++) avg_rZ[j] /= dsp.DFT.N*(float)sum_n;
|
||||
for (j = 0; j < dsp.DFT.N; j++) avg_db[j] = 20.0*log10(avg_rZ[j]+1e-20);
|
||||
|
||||
|
||||
pthread_mutex_lock( (dsp.thd)->mutex );
|
||||
fprintf(FPOUT, "<%d: FFT>\n", (dsp.thd)->tn);
|
||||
|
@ -401,7 +402,7 @@ static void *thd_FFT(void *targs) {
|
|||
l = write(tharg->fd, sendln, sendln_len);
|
||||
for (j = dsp.DFT.N/2; j < dsp.DFT.N/2 + dsp.DFT.N; j++) {
|
||||
memset(sendln, 0, LINELEN+1);
|
||||
snprintf(sendln, LINELEN, "%+11.8f;%7.2f\n", bin2fq(&(dsp.DFT), j % dsp.DFT.N), sum_db[j % dsp.DFT.N]);
|
||||
snprintf(sendln, LINELEN, "%+11.8f;%7.2f\n", bin2fq(&(dsp.DFT), j % dsp.DFT.N), avg_db[j % dsp.DFT.N]);
|
||||
sendln_len = strlen(sendln);
|
||||
l = write(tharg->fd, sendln, sendln_len);
|
||||
}
|
||||
|
@ -413,7 +414,7 @@ static void *thd_FFT(void *targs) {
|
|||
if (fpo != NULL) {
|
||||
fprintf(fpo, "# <freq/sr>;<dB> ## sr:%d , N:%d\n", dsp.DFT.sr, dsp.DFT.N);
|
||||
for (j = dsp.DFT.N/2; j < dsp.DFT.N/2 + dsp.DFT.N; j++) {
|
||||
fprintf(fpo, "%+11.8f;%7.2f\n", bin2fq(&(dsp.DFT), j % dsp.DFT.N), sum_db[j % dsp.DFT.N]);
|
||||
fprintf(fpo, "%+11.8f;%7.2f\n", bin2fq(&(dsp.DFT), j % dsp.DFT.N), avg_db[j % dsp.DFT.N]);
|
||||
}
|
||||
fclose(fpo);
|
||||
}
|
||||
|
@ -464,8 +465,8 @@ static void *thd_FFT(void *targs) {
|
|||
exit_thread:
|
||||
|
||||
if (z) { free(z); z = NULL; }
|
||||
if (db) { free(db); db = NULL; }
|
||||
if (sum_db) { free(sum_db); sum_db = NULL; }
|
||||
if (avg_rZ) { free(avg_rZ); avg_rZ = NULL; }
|
||||
if (avg_db) { free(avg_db); avg_db = NULL; }
|
||||
|
||||
reset_blockread(&dsp);
|
||||
(dsp.thd)->used = 0;
|
||||
|
|
Ładowanie…
Reference in New Issue