首页 > 编程语言 >C语言源码的陷波器设计及调试总结

C语言源码的陷波器设计及调试总结

时间:2023-12-08 10:59:11浏览次数:39  
标签:ch 陷波 short float 滤波 C语言 源码 bw

一 前记 音频信号处理中,限波器是一个常用的算法。这个算法难度不是很高,可用起来却坑很多。 二 源码解析 1 滤波器的核心函数,这里注意两点,一个是带宽不能太宽了,太宽了杀伤力太大了,容易出问题。另外一个就是滤波器的阶数非常重要,假如想滤波宽度尽量窄一些,那就阶数尽量高一些。

/************************************************************************
*  IIR陷波器(直接II型/典范型)
*  参数列表:
*        short ch:滤波通道,0-17
*        int   xn:滤波输入
*        float fnotch:陷波频率,Hz
*        float bw:    带宽,Hz(eg:50Hz±1Hz,BW=2Hz )    
*        float fs:    采样率,Hz
*        short init:  是否初始化陷波器(1:初始化,0:不初始化)
*  输出:
*        滤波输出(若ch超出范围,或者fs,bw,fnotch不合理,返回-1)
* 说明: 陷波器个数由ch决定,每个陷波器相互独立,因此需要单独初始化;
************************************************************************/
int AzIIRNotchFilter(short ch,int xn, float fnotch,float bw, float fs, short init)
{
    float y0;
    float Fn;
    float BW;

    if (ch<0 || ch>=AZ_CH_NUM)return -1;
    if (bw<=0 || fs<=0 || fnotch<=0 || fs<=fnotch*2 || fnotch-bw/2<=0)return -1;

    Fn = fnotch/(fs/2);
    BW = bw/(fs/2);
    if (init)
    {
        AzInitNotchByChannel(ch,Fn,BW);
    }

//     fNotchBuf[ch][0]=(float)xn*fCoefA[ch][0]-fCoefA[ch][1]*fNotchBuf[ch][1]-fCoefA[ch][2]*fNotchBuf[ch][2];
    fNotchBuf[ch][0]=(float)xn-fCoefA[ch][1]*fNotchBuf[ch][1]-fCoefA[ch][2]*fNotchBuf[ch][2];
    y0=fCoefB[ch][0]*fNotchBuf[ch][0]+fCoefB[ch][1]*fNotchBuf[ch][1]+fCoefB[ch][2]*fNotchBuf[ch][2];
    fNotchBuf[ch][2]=fNotchBuf[ch][1];
    fNotchBuf[ch][1]=fNotchBuf[ch][0];

    return (int)y0;
}
三 效果展示 一个1k的正玄波处理前如下所示:     过了这个滤波器之后如下所示:   这样看可以得出这个限波器还是非常有价值的。 四 总结备忘 1 限波期会影响音质,所以用的时候的原则就是尽量少用或者不用。

标签:ch,陷波,short,float,滤波,C语言,源码,bw
From: https://www.cnblogs.com/dylancao/p/17884666.html

相关文章

  • springboot蜗牛兼职网的设计与实现-计算机毕业设计源码+LW文档
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,蜗牛兼职网当然也不能排除在外。蜗牛兼职网是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整个开发过程首先对软件系......
  • springboot018母婴商城-计算机毕业设计源码+LW文档
    一、选题背景以母婴人群和准母婴人群及其家庭群体为目标用户。站在整个社会产业的角度,有些产业为所有用户提供某类基本需求,有些产业为某类用户提供某类特定需求,而母婴产业是最终满足特定人群相关多元化需求的一个宽辐射市场。母婴产品及服务最终以线上与线下为出口抵达用户,从市场......
  • springboot019高校心理教育辅导设计与实现-计算机毕业设计源码+LW文档
    1.1选题的意义和目的当今社会,经济飞速发展,科技日新月异,人际关系复杂多变,整个社会生活节奏越来越快,人们承受的生活压力越来越大。而对于在校大学生来说,他们还未完全融入到社会之中,但他们却依然要面对这些社会问题,他们要不断地学习新的知识,要开始学会如何解决身边地人际关系问题,要面......
  • 浅谈clickhouse的Mutation机制(附源码分析)
    最近研究了一点ch的代码。发现一个很有意思的词,mutation。google这个词有突变的意思,但更多的相关文章翻译这个为"订正"。上一篇文章分析了background_pool_size参数。这个参数和后台异步工作线程池merge工作有关。ClickHouse内核中异步merge、mutation工作由统一的工作线程池来完成......
  • 【Java语言】区域医院信息系统云HIS源码
    一个好的HIS系统,要具有开放性,便于扩展升级,增加新的功能模块,支撑好医院的业务的拓展,而且可以反过来给医院赋能,最终向更多的患者提供更好地服务。新理念新技术的趋势云计算技术:云计算是一种通过网络将高弹性的共享的物理和虚拟资源,按需进行服务和管理的方式。它具有以下特点:虚拟......
  • 《初学C语言第17天》
    ////浮点数在内存中的存储//常见的浮点数://3.14159//1E10=1.0*10^10//浮点数家族包括:float、double、longdouble类型。//浮点数表示的范围:float.h中定义//浮点数存储的例子//#include<stdio.h>//intmain()//{// intn=9;// float*pFloat=(float*)&n;// printf......
  • 高级实现Java的七大热门技术框架解析源码特性分析
    设计模式是软件开发中常用的解决方案,可以帮助我们构建灵活可扩展的应用程序。本文将深入探讨Java的七大经典设计模式,并提供相关示例代码。一、单例模式单例模式确保一个类只有一个实例,并提供全局访问点。以下是一个简单的单例模式示例代码:publicclassSingleton{privatesta......
  • [c语言]volatile关键字的作用
    volatile描述volatile是C和C++都支持的一个关键字,是一种类型修饰符。这个关键字被设计用来告诉编译器,一个变量可能会在程序之外被改变,例如,它可能被中断服务程序修改,或者它可能映射到一个硬件寄存器,这个寄存器的值可能由硬件改变。因此,编译器不应对涉及volatile变量的操作进行优化,......
  • 集合异或运算--记录学习C语言每一天
    ////main.c//Hello////Createdbyrenxinon2023/11/28.//#defineElemTypeint#defineMaxSize50#include<stdio.h>#include<stdlib.h>typedefstructList{ElemTypeList[MaxSize];intLength;intSize;}List;voidIn......
  • java云HIS系统源码 区域HIS信息管理系统源码
    医院管理信息系统(HIS)是医院基本、重要的管理系统,是医院大数据的基础。“云”指系统采用云计算的技术和建设模式,具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生,由原来医院(Hospital)到现在的医疗卫生(Healthcare),拓展了H的内涵与外延。云......