kopia lustrzana https://github.com/rs1729/RS
				
				
				
			demod_mod: decimate/lowpass -Ofast speed-up
							rodzic
							
								
									f2402c3b3d
								
							
						
					
					
						commit
						d7497540e2
					
				| 
						 | 
				
			
			@ -625,7 +625,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
 | 
			
		|||
    }
 | 
			
		||||
    return (float complex)w;
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
    ui32_t s = sample % taps;
 | 
			
		||||
    double complex w = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -635,6 +635,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
 | 
			
		|||
    return (float complex)w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    float complex w = 0;     // -Ofast
 | 
			
		||||
    int n;
 | 
			
		||||
    int s = sample % taps; // lpIQ
 | 
			
		||||
    int S1 = s+1;
 | 
			
		||||
    int S1N = S1-taps;
 | 
			
		||||
    int n0 = taps-1-s;
 | 
			
		||||
    for (n = 0; n < n0; n++) {
 | 
			
		||||
        w += buffer[S1+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    for (n = n0; n < taps; n++) {
 | 
			
		||||
        w += buffer[S1N+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    return w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -699,7 +699,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
 | 
			
		|||
    }
 | 
			
		||||
    return (float complex)w;
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
    ui32_t s = sample % taps;
 | 
			
		||||
    double complex w = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -709,6 +709,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
 | 
			
		|||
    return (float complex)w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    float complex w = 0;     // -Ofast
 | 
			
		||||
    int n;
 | 
			
		||||
    int s = sample % taps; // lpIQ
 | 
			
		||||
    int S1 = s+1;
 | 
			
		||||
    int S1N = S1-taps;
 | 
			
		||||
    int n0 = taps-1-s;
 | 
			
		||||
    for (n = 0; n < n0; n++) {
 | 
			
		||||
        w += buffer[S1+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    for (n = n0; n < taps; n++) {
 | 
			
		||||
        w += buffer[S1N+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    return w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float re_lowpass0(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -395,7 +395,7 @@ static int lowpass_init(float f, int taps, float **pws) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
    ui32_t s = sample % taps;
 | 
			
		||||
    double complex w = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -405,6 +405,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
 | 
			
		|||
    return (float complex)w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    float complex w = 0;     // -Ofast
 | 
			
		||||
    int n;
 | 
			
		||||
    int s = sample % taps; // lpIQ
 | 
			
		||||
    int S1 = s+1;
 | 
			
		||||
    int S1N = S1-taps;
 | 
			
		||||
    int n0 = taps-1-s;
 | 
			
		||||
    for (n = 0; n < n0; n++) {
 | 
			
		||||
        w += buffer[S1+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    for (n = n0; n < taps; n++) {
 | 
			
		||||
        w += buffer[S1N+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    return w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -733,7 +733,7 @@ static int lowpass_init(float f, int taps, float **pws) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
    ui32_t s = sample % taps;
 | 
			
		||||
    double complex w = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -743,6 +743,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
 | 
			
		|||
    return (float complex)w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    float complex w = 0;     // -Ofast
 | 
			
		||||
    int n;
 | 
			
		||||
    int s = sample % taps; // lpIQ
 | 
			
		||||
    int S1 = s+1;
 | 
			
		||||
    int S1N = S1-taps;
 | 
			
		||||
    int n0 = taps-1-s;
 | 
			
		||||
    for (n = 0; n < n0; n++) {
 | 
			
		||||
        w += buffer[S1+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    for (n = n0; n < taps; n++) {
 | 
			
		||||
        w += buffer[S1N+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    return w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static float re_lowpass(float buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -650,7 +650,7 @@ static float complex lowpass0(float complex buffer[], ui32_t sample, ui32_t taps
 | 
			
		|||
    }
 | 
			
		||||
    return (float complex)w;
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
static float complex lowpass1(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    ui32_t n;
 | 
			
		||||
    ui32_t s = sample % taps;
 | 
			
		||||
    double complex w = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -660,6 +660,22 @@ static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps,
 | 
			
		|||
    return (float complex)w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
static float complex lowpass(float complex buffer[], ui32_t sample, ui32_t taps, float *ws) {
 | 
			
		||||
    float complex w = 0;     // -Ofast
 | 
			
		||||
    int n;
 | 
			
		||||
    int s = sample % taps; // lpIQ
 | 
			
		||||
    int S1 = s+1;
 | 
			
		||||
    int S1N = S1-taps;
 | 
			
		||||
    int n0 = taps-1-s;
 | 
			
		||||
    for (n = 0; n < n0; n++) {
 | 
			
		||||
        w += buffer[S1+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    for (n = n0; n < taps; n++) {
 | 
			
		||||
        w += buffer[S1N+n]*ws[n];
 | 
			
		||||
    }
 | 
			
		||||
    return w;
 | 
			
		||||
// symmetry: ws[n] == ws[taps-1-n]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static int f32buf_sample(FILE *fp, int inv) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue