📄 preemp.c
字号:
/*$Log: preemp.c,v $Revision 1.1.1.1 2001/11/19 19:50:16 smorlatFirst cvs.Revision 1.1.1.1 2001/08/08 21:29:08 simonFirst import * Revision 1.1 1996/08/19 22:30:58 jaf * Initial revision **/#ifdef P_R_O_T_O_T_Y_P_E_Sextern int preemp_(real *inbuf, real *pebuf, integer *nsamp, real *coef, real *z__);#endif/* -- translated by f2c (version 19951025). You must link the resulting object file with the libraries: -lf2c -lm (in that order)*/#include "f2c.h"/* ******************************************************************* *//* PREEMP Version 55 *//* $Log: preemp.c,v $/* Revision 1.1.1.1 2001/11/19 19:50:16 smorlat/* First cvs./*/* Revision 1.1.1.1 2001/08/08 21:29:08 simon/* First import/* * 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? *//* Are there ever cases when "factoring" one high-order filter into *//* 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 *//* variable temp was used. It seemed that the statements in the do *//* 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_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -