• 大小: 13KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: C/C++
  • 标签:

资源简介

数字滤波器的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


评论

共有 条评论

相关资源