资源简介
数字滤波器的C语言实现,包括高通、低通、带通滤波器
代码片段和文件信息
/*
* July 5 1991
* Copyright 1991 Lance Norskog And Sundry Contributors
* This source code is freely redistributable and may be used for
* any purpose. This copyright notice must be maintained.
* Lance Norskog And Sundry Contributors are not responsible for
* the consequences of using this software.
*/
/*
* Sound Tools Bandpass effect file.
*
* Algorithm: 2nd order recursive filter.
* Formula stolen from MUSIC56K a toolkit of 56000 assembler stuff.
* Quote:
* This is a 2nd order recursive band pass filter of the form.
* y(n)= a * x(n) - b * y(n-1) - c * y(n-2)
* where :
* x(n) = “IN“
* “OUT“ = y(n)
* c = EXP(-2*pi*cBW/S_RATE)
* b = -4*c/(1+c)*COS(2*pi*cCF/S_RATE)
* if cSCL=2 (i.e. noise input)
* a = SQT(((1+c)*(1+c)-b*b)*(1-c)/(1+c))
* else
* a = SQT(1-b*b/(4*c))*(1-c)
* endif
* note : cCF is the center frequency in Hertz
* cBW is the band width in Hertz
* cSCL is a scale factor use 1 for pitched sounds
* use 2 for noise.
*
*
* July 1 1999 - Jan Paul Schmidt
*
* This looks like the resonator band pass in SPKit. It‘s a
* second order all-pole (IIR) band-pass filter described
* at the pages 186 - 189 in
* Dodge Charles & Jerse Thomas A. 1985:
* Computer Music -- Synthesis Composition and Performance.
* New York: Schirmer Books.
* Reference from the SPKit manual.
*/
#include
#include
#include “st_i.h“
/* Private data for Bandpass effect */
typedef struct bandstuff {
float center;
float width;
double A B C;
double out1 out2;
short noise;
/* 50 bytes of data 52 bytes long for allocation purposes. */
} *band_t;
/*
* Process options
*/
int st_band_getopts(eff_t effp int n char **argv)
{
band_t band = (band_t) effp->priv;
band->noise = 0;
if (n > 0 && !strcmp(argv[0] “-n“)) {
band->noise = 1;
n--;
argv++;
}
if ((n < 1) || !sscanf(argv[0] “%f“ &band->center))
{
st_fail(“Usage: band [ -n ] center [ width ]“);
return (ST_EOF);
}
band->width = band->center / 2;
if ((n >= 2) && !sscanf(argv[1] “%f“ &band->width))
{
st_fail(“Usage: band [ -n ] center [ width ]“);
return (ST_EOF);
}
return (ST_SUCCESS);
}
/*
* Prepare processing.
*/
int st_band_start(eff_t effp)
{
band_t band = (band_t) effp->priv;
if (band->center > effp->ininfo.rate/2)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4603 2013-05-03 15:18 数字滤波器的C语言实现,包括高通、低通、带通滤波器\band.c
文件 2515 2013-05-03 15:18 数字滤波器的C语言实现,包括高通、低通、带通滤波器\bandpass.c
文件 2957 2013-05-03 15:17 数字滤波器的C语言实现,包括高通、低通、带通滤波器\btrworth.c
文件 1697 2013-05-03 15:17 数字滤波器的C语言实现,包括高通、低通、带通滤波器\btrworth.h
文件 9579 2013-05-03 15:16 数字滤波器的C语言实现,包括高通、低通、带通滤波器\filter.c
文件 3093 2013-05-03 15:15 数字滤波器的C语言实现,包括高通、低通、带通滤波器\highp.c
文件 2402 2013-05-03 15:14 数字滤波器的C语言实现,包括高通、低通、带通滤波器\highpass.c
文件 2806 2013-05-03 15:13 数字滤波器的C语言实现,包括高通、低通、带通滤波器\lowp.c
文件 2040 2013-05-03 15:14 数字滤波器的C语言实现,包括高通、低通、带通滤波器\lowpass.c
目录 0 2013-05-03 15:26 数字滤波器的C语言实现,包括高通、低通、带通滤波器
----------- --------- ---------- ----- ----
31692 10
评论
共有 条评论