Fix distortion.
This commit is contained in:
		
							parent
							
								
									0d23d73f4f
								
							
						
					
					
						commit
						354d8e09bb
					
				|  | @ -56,22 +56,20 @@ static inline int32_t norm_fix3_28_to_s16sample(fix3_28_t a) { | |||
|     */ | ||||
| 
 | ||||
|     // Saturate the value if an overflow has occurred | ||||
|     uint32_t upper = (a >> 30); | ||||
|     uint32_t upper = (a >> 29); | ||||
|     if (a < 0) { | ||||
|         if (~upper) | ||||
|         { | ||||
|         if (~upper) { | ||||
|             return 0xff800000; | ||||
|         } | ||||
|     } else { | ||||
|         if (upper) | ||||
|         { | ||||
|             return 0x007fffff; | ||||
|         if (upper) { | ||||
|             return 0x00efffff; | ||||
|         } | ||||
|     } | ||||
|     /* When we converted the USB audio sample to a fixed point number, we applied | ||||
|        a normalization, or a gain of 1/65536. To convert it back, we can undo that | ||||
|        by shifting it but we output 24bts, so the shift is reduced. */ | ||||
|     return (a >> 4); | ||||
|     return (a >> 5); | ||||
| } | ||||
| 
 | ||||
| static inline fix3_28_t fix3_28_from_flt(float a) { | ||||
|  |  | |||
|  | @ -54,10 +54,12 @@ int main(int argc, char* argv[]) | |||
|         out[i] = in[i]; | ||||
|     } | ||||
| 
 | ||||
|     const fix3_28_t preamp = fix3_28_from_flt(0.92f); | ||||
| 
 | ||||
|     for (int i = 0; i < samples; i ++) | ||||
|     { | ||||
|         // Left channel filter
 | ||||
|         fix3_28_t x_f16 = norm_fix3_28_from_s16sample((int16_t) out[i]); | ||||
|         fix3_28_t x_f16 = fix16_mul(norm_fix3_28_from_s16sample((int16_t) out[i]), preamp); | ||||
| 
 | ||||
|         for (int j = 0; j < filter_stages; j++) | ||||
|         { | ||||
|  | @ -69,7 +71,7 @@ int main(int argc, char* argv[]) | |||
| 
 | ||||
|         // Right channel filter
 | ||||
|         i++; | ||||
|         x_f16 = norm_fix3_28_from_s16sample((int16_t) out[i]); | ||||
|         x_f16 = fix16_mul(norm_fix3_28_from_s16sample((int16_t) out[i]), preamp); | ||||
| 
 | ||||
|         for (int j = 0; j < filter_stages; j++) | ||||
|         { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 George Norton
						George Norton