| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $Log$ | 
					
						
							| 
									
										
										
										
											2004-06-26 03:50:14 +00:00
										 |  |  | Revision 1.15  2004/06/26 03:50:14  markster | 
					
						
							|  |  |  | Merge source cleanups (bug #1911) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-02-12 13:59:15 +00:00
										 |  |  | Revision 1.14  2003/02/12 13:59:15  matteo | 
					
						
							|  |  |  | mer feb 12 14:56:57 CET 2003 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Revision 1.1.1.1  2003/02/12 13:59:15  matteo | 
					
						
							|  |  |  | mer feb 12 14:56:57 CET 2003 | 
					
						
							| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Revision 1.2  2000/01/05 08:20:39  markster | 
					
						
							|  |  |  | Some OSS fixes and a few lpc changes to make it actually work | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * Revision 1.1  1996/08/19  22:30:58  jaf | 
					
						
							|  |  |  |  * Initial revision | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*  -- translated by f2c (version 19951025).
 | 
					
						
							|  |  |  |    You must link the resulting object file with the libraries: | 
					
						
							|  |  |  | 	-lf2c -lm   (in that order) | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "f2c.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-26 03:50:14 +00:00
										 |  |  | #ifdef P_R_O_T_O_T_Y_P_E_S
 | 
					
						
							|  |  |  | extern int preemp_(real *inbuf, real *pebuf, integer *nsamp, real *coef, real *z__); | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  | /* ******************************************************************* */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* 	PREEMP Version 55 */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* $Log$
 | 
					
						
							| 
									
										
										
										
											2004-06-26 03:50:14 +00:00
										 |  |  |  * Revision 1.15  2004/06/26 03:50:14  markster | 
					
						
							|  |  |  |  * Merge source cleanups (bug #1911) | 
					
						
							| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2006-10-13 18:45:44 +00:00
										 |  |  |  * Revision 1.14  2003/02/12 13:59:15  matteo | 
					
						
							|  |  |  |  * mer feb 12 14:56:57 CET 2003 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Revision 1.1.1.1  2003/02/12 13:59:15  matteo | 
					
						
							|  |  |  |  * mer feb 12 14:56:57 CET 2003 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Revision 1.2  2000/01/05 08:20:39  markster | 
					
						
							|  |  |  |  * Some OSS fixes and a few lpc changes to make it actually work | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  |  * Revision 1.1  1996/08/19  22:30:58  jaf | 
					
						
							|  |  |  |  * Initial revision | 
					
						
							|  |  |  |  * */ | 
					
						
							|  |  |  | /* Revision 1.3  1996/03/14  23:16:29  jaf */ | 
					
						
							|  |  |  | /* Just added a few comments about which array indices of the arguments */ | 
					
						
							|  |  |  | /* are used, and mentioning that this subroutine has no local state. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Revision 1.2  1996/03/11  23:23:34  jaf */ | 
					
						
							|  |  |  | /* Added a bunch of comments to an otherwise simple subroutine. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Revision 1.1  1996/02/07 14:48:48  jaf */ | 
					
						
							|  |  |  | /* Initial revision */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ******************************************************************* */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*   Preemphasize speech with a single-zero filter. */ | 
					
						
							|  |  |  | /*  (When coef = .9375, preemphasis is as in LPC43.) */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Inputs: */ | 
					
						
							|  |  |  | /*  NSAMP  - Number of samples to filter */ | 
					
						
							|  |  |  | /*  INBUF  - Input speech buffer */ | 
					
						
							|  |  |  | /*           Indices 1 through NSAMP are read. */ | 
					
						
							|  |  |  | /*  COEF   - Preemphasis coefficient */ | 
					
						
							|  |  |  | /* Input/Output: */ | 
					
						
							|  |  |  | /*  Z      - Filter state */ | 
					
						
							|  |  |  | /* Output: */ | 
					
						
							|  |  |  | /*  PEBUF  - Preemphasized speech buffer (can be equal to INBUF) */ | 
					
						
							|  |  |  | /*           Indices 1 through NSAMP are modified. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* This subroutine has no local state. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Subroutine */ int preemp_(real *inbuf, real *pebuf, integer *nsamp, real * | 
					
						
							|  |  |  | 	coef, real *z__) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /* System generated locals */ | 
					
						
							|  |  |  |     integer i__1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Local variables */ | 
					
						
							|  |  |  |     real temp; | 
					
						
							|  |  |  |     integer i__; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       Arguments */ | 
					
						
							|  |  |  | /*       Local variables */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       None of these need to have their values saved from one */ | 
					
						
							|  |  |  | /*       invocation to the next. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       Logically, this subroutine computes the output sequence */ | 
					
						
							|  |  |  | /*       pebuf(1:nsamp) defined by: */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       pebuf(i) = inbuf(i) - coef * inbuf(i-1) */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       where inbuf(0) is defined by the value of z given as input to */ | 
					
						
							|  |  |  | /*       this subroutine. */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       What is this filter's frequency response and phase response? */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       Why is this filter applied to the speech? */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       Could it be more efficient to apply multiple filters */ | 
					
						
							|  |  |  | /*       simultaneously, by combining them into one equivalent filter? */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | /*       Are there ever cases when "factoring" one high-order filter into
 | 
					
						
							| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | /*       multiple smaller-order filter actually reduces the number of */ | 
					
						
							|  |  |  | /*       arithmetic operations needed to perform them? */ | 
					
						
							|  |  |  | /*       When I first read this subroutine, I didn't understand why the */ | 
					
						
							| 
									
										
										
										
											2017-12-22 09:23:22 -05:00
										 |  |  | /*       variable temp was used.  It seemed that the statements in the do
 | 
					
						
							| 
									
										
										
										
											2000-01-05 08:20:27 +00:00
										 |  |  | */ | 
					
						
							|  |  |  | /*       loop could be replaced with the following: */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*           pebuf(i) = inbuf(i) - coef * z */ | 
					
						
							|  |  |  | /*           z = inbuf(i) */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*       The reason for temp is so that even if pebuf and inbuf are the */ | 
					
						
							|  |  |  | /*       same arrays in memory (i.e., they are aliased), then this */ | 
					
						
							|  |  |  | /*       subroutine will still work correctly.  I didn't realize this */ | 
					
						
							|  |  |  | /*       until seeing the comment after PEBUF above that says "(can be */ | 
					
						
							|  |  |  | /*       equal to INBUF)". */ | 
					
						
							|  |  |  |     /* Parameter adjustments */ | 
					
						
							|  |  |  |     --pebuf; | 
					
						
							|  |  |  |     --inbuf; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* Function Body */ | 
					
						
							|  |  |  |     i__1 = *nsamp; | 
					
						
							|  |  |  |     for (i__ = 1; i__ <= i__1; ++i__) { | 
					
						
							|  |  |  | 	temp = inbuf[i__] - *coef * *z__; | 
					
						
							|  |  |  | 	*z__ = inbuf[i__]; | 
					
						
							|  |  |  | 	pebuf[i__] = temp; | 
					
						
							|  |  |  | /* L10: */ | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } /* preemp_ */ |