巴特沃兹滤波器 C语言
用C语言实现巴特沃兹滤波器的原理 #include <stdio.h> #include "math.h" void gainc(b,a,n,ns,x,y,len,sign) int n,ns,len,sign; double b[],a[],x[],y[]; { int i,j,k,n1; double ar,ai,br,bi,zr,zi,im,re,den,numr,numi,freq,temp; double hr,hi,tr,ti; n1=n+1; for (k=0;k<len ;k++ ) { freq=k*0.5/(len-1); zr=cos(-8.0*atan(1.0)*freq); zi=sin(-8.0*atan(1.0)*freq); x[k]=1.0; y[k]=0.0; for (j=0;j<ns ;j++ ) { br=0.0; bi=0.0; for (i=n;i>0 ;i-- ) { re=br; im=bi; br=(re+b[j*n1+i])*zr-im*zi; bi=(re+b[j*n1+i])*zi+im*zr; } ar=0.0; ai=0.0; for (i=n;i>0 ;i-- ) { re=ar; im=ai; ar=(re+a[j*n1+i])*zr-im*zi; ai=(re+a[j*n1+i])*zi+im*zr; } br=br+b[j*n1+0]; ar=ar+1.0; numr=ar*br+ai*bi; numi=ar*bi-ai*br; den=ar*ar+ai*ai; hr=numr/den; hi=numi/den; tr=x[k]*hr-y[k]*hi; ti=x[k]*hi+y[k]*hr; x[k]=tr; y[k]=ti; } switch(sign) { case 1: { temp=sqrt(x[k]*x[k]+y[k]*y[k]); if (temp!=0.0) { y[k]=atan2(y[k],x[k]); } else { y[k]=0.0; } x[k]=temp; break; } case 2: { temp=x[k]*x[k]+y[k]*y[k]; if (temp!=0.0) { y[k]=atan2(y[k],x[k]); } else { temp=1.0e-40; y[k]=0.0; } x[k]=10.0*log10(temp); } } } }
- 1
- aclsmilan2014-11-20纯代码,需要自己移植后验证.
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java SE Development Kit 11.0.23 macOS ARM64 DMG Installer
- python matplotlib 可视化编程.zip
- NumPy Matplotlib Matplotlib 是 Python 的绘图库 .zip
- Matplotlib主要的作用,是用来生成绘图,饼图,功率谱,条形图,错误图,散点图等.zip
- Java SE Development Kit 8u411 macOS x64 DMG Installer
- matplotlib 绘图库的cpp版本,负责图形的绘画与数据化.zip
- 1.使用xlrd扩展包读取Excel数据 2.使用Matplotlib绘制二维图像.zip
- a20bc49b4d1bfd71a60bfbde7c5fbe00a5ef385dc2087ffa3457e5cbf9d96897.png
- 基于STM32单片机的智能停车场设计源码+全部资料(优质毕业设计).zip
- 网上购物商城的设计与实现(部署视频)-kaic.zip