用C语言画带通滤波器的幅频特性和相频特性曲线

iampolaris 2003-06-11 07:30:43
请各位高手指点一下 怎样 来设计?
thanh you!
...全文
354 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzh7800 2003-06-11
  • 打赏
  • 举报
回复
matlab里面有这样的函数,可直接使用
huigll 2003-06-11
  • 打赏
  • 举报
回复
tc里有和画点的函数。

void far putpixel (int x, int y, int pixelcolor);

把x,y的值计算出来慢慢画就是了
配套光盘:数字信号处理-胡广书-第七版.iso 关于光盘的使用说明 本光盘共包含六个子目录,其中三个是DSP_FORTRAN, DSP_C和DSP_MATLAB,另外三个是有关习题所需要的数据或文献。DSP_FORTRAN和DSP_C各含有约40个信号处理的子程序,概括了书中所涉及到的绝大部分算法。程序分别由FORTRAN语言和C语言编写(MA模型、ARMA模型及最小方差谱估计三个算法只给出了用C语言编写的程序, 没有给出相应的FORTRAN子程序),并在PC机上调试通过。编译环境是FORTRAN77 V5. 10和TURBO C2. 0。DSP_MATLAB含有近120多个用MATLAB编写的信号处理程序,它们是本书各个章节的大部分例题,使用的是MATLAB6.1。 FORTRAN子程序名称的长度全都是6位,扩展名为 .for,C语言子程序的名称全部是7位,由相应的FORTRAN子程序在其名称前加字母m而形成,并将扩展名改为 .c。为了方便读者的使用,光盘中还给出了调用FORTRAN子程序的简单主程序。读者只需将此主程序和主程序指定的子程序作编译、连接和运行,即可得出相应的结果。FORTRAN主程序的名称为7位或8位,它是在原FORTRAN子程序前加字母h所构成的,扩展名仍是 .for。h后面的一个数(如果有的话)表示该程序是相应子程序的第几个主程序。例如,子程序desiir.for是用来设计IIR滤波器的FORTRAN子程序,对应的C程序是mdesiir.c,调用desiir.for的第一个主程序是h1desiir.for(设计低通IIR DF),依此类推。 用MATLAB编写的程序的名称由“exa”开头,接下来是所在的章、节及例题的序号,如exa010101,指的是第1章第1节(即1.1节)的第1个例题,即例1.1.1。如果该程序是为了说明某一个m文件的应用,则在上述名称的后面跟一个下划线,再在后面加上所说明的MATLAB文件的名称,如exa011001_rand,即是例1.10.1,该例用来说明rand.m文件的应用。应该说明的是,这些MATLAB程序不是像所附的FORTRAN和C程序那样作为一个个子程序应用,而是用来说明书上的例题及各个m文件的应用。 用FORTRAN和C语言编写的每一个子程序的功能及调用时各个参数的含义已在程序的开头作了较为详细的说明,此处不再赘述。所附程序中,绝大多数都是作者和其研究生编写的,也有少量是参考国外已公开发表的杂志和教科书,如经典的FFT和REMEZ算法等。 下面给出的是用FORTRAN语言和C语言编写的程序的名称、功能以及有关问题的说明,程序按字母顺序排列。 1.aftodf.for,maftodf.c 将模拟滤波器转变为数字滤波器。 2.ampres.for,mampres.c 由 得到幅频响应 。系统函数 由下式给出: (A.1) 若 ,则 为一全极点IIR系统,若 ,则 为FIR系统。在以下程序中,凡涉及到系统,系统函数 都按(A.1)式给出,不再一一说明。 3.arburg.for(harburg.for),marburg.c 用Burg算法求AR模型的参数。 4.ar1psd.for,mar1psd.c 由AR模型参数得到功率谱。 5.aryuwa.for(haryuwa.for),maryuwa.c 用Levinson算法求解Yule-Walker方程以得到 阶AR模型的参数 。 6.biline.for,mbiline.c 实现双线性Z变换。 7.butwcf.for,mbutwcf.c 设计巴特沃斯模拟低通滤波器,求出转移函数 。 8.chebsh.for,mchebsh.c 设计切比雪夫I型模拟低通滤波器,求出转移函数 。 9.cmpdft.for(hcmpdft.for),mcmpdft.c 直接由定义求 点复序列 的DFT 。 10.cmpfft.for(hcmpfft.for),mcmpfft.c 利用经典的Cooley-Tukey基2算法求复序列 的DFT 。 11.convo1.for(hconvo1.for),mconvo1.c 直接按定义求序列 的线性卷积 。 12.convo2.for(hconvo2.for),mcnvo2.c 利用DFT的卷积性质求两个复序列的线性卷积。 13.corpsd.for(hcorpsd.for),mcorpsd.c 用Blackman-Tukey法(自相关法)对信号 作功率谱估计。 14.corre1.for(hcorre1.for),mcorre1.c 直接按定义计算 的互相关函数 ,若 ,则求出的是自相关, 为复序列。 15.corre2.for(hcorre2.for),mcorre2.c 用FFT实现相关函数快速估计。 16.cztfft.for(hcztfft.for),mcztfft.c 实现Chirp Z变换算法。 17.decint.for(h1decint.for,h2decint.for,h3decint.for),mdecint.c 对给定数据 作 倍的抽样率转换。 18.defir1.for(h1defir1.for,h4defir1.for),mdefir1.c 利用窗函数法设计FIR滤波器,给出其抽样响应 。程序中调用了子程序window。 19.defir2.for(h1defir2.for,h4defir2.for),mdefir2.c 用频率抽样法设计FIR滤波器。 20.defir3.for(h1defir3.for,h2defir3.for,h3defir3.for),mdefir3.c 用切比雪夫最佳一致逼近法设计FIR滤波器,调用子程序remez1。 注意:以上FIR滤波器设计的三个程序中,滤波器的长度应取奇数。 21.desiir.for(h1desiir.for,h2desiir.for,h7desiir.for,h8desiir.for),mdesiir.c 利用双线性Z变换设计巴特沃斯和切比雪夫I型IIR数字滤波器,包括低通、高通、带通、带阻四种形式。使用者只需指定通带、阻带的边缘实际频率及相应的衰减,便可输出数字滤波器 的级联形式的各子系统分子、分母的系数,并输出其幅频和相频响应。程序中调用了子程序orderb,butwcf,chebsh,aftodf,iirres等。 22.firres.for(hfirres.for),mfirres.c 求FIR系统的频率响应 。 23.fitout.for(hfitout.for),mfitout.c 求IIR系统对 的输出 ,若 ,则 。 24.iirres.for(hiirres.for),miirres.c 求IIR系统的频率响应 。 25.lattic.for(hlattic.for),mlattic.c 将全零系统、全极系统及极零系统的直接实现形式转化为Lattic结构。注意,当 为FIR系统时,应把它视为全极系统。 26.marmach.c(主程序:wmarmach.c) 用Cholesky分解求ARMA模型的参数并作谱估计。 27.mcholsk.c 实现矩阵的Cholesky分解。 28.mmayuwa.c(主程序:wmmayuwa.c) 求MA模型的参数 并估计功率谱。 29.mmvseps.c(主程序:wmmvseps.c) 用最小方差法估计序列 的功率谱。 30.orderb.for,morderb.c 计算归一化巴特沃斯或切比雪夫I型模拟低通滤波器所需的阶次。 31.perpsd.for(h1perpsd.for,h3perpsd.for),mperpsd.c 用Welch平均法对信号 作功率谱估计。 32.phares.for,mphares.c 得到 的相频响应 ,程序中调用了子程序unwrap。 33.prgfft.for(hprgfft.for),mprgfft.c 实现输入、输出都为少数点时的FFT Pruning算法。 34.psplot.for,mpsplot.c 在归一化频率轴上绘出归一化的功率谱曲线。 35.random.for(hrandom.for),mrandom.c 用来产生均匀分布或高斯分布的伪随机数 (近似白噪声),它们可具有不同的均值和方差。 36.relfft.for(hrelfft.for),mrelfft.c 利用分裂基算法求实序列 的DFT, 的虚部赋值为零。 37.remez1.for,mremez1.c 用REMEZ算法求交错点组。 38.splfft.for(hsplfft.for),msplfft.c 利用分裂基算法求复序列 的DFT 。 39.unwrap.for,munwrap.c 将得到的 解卷绕,得到无跳变的相频特性。 40.window.for(hwindow.for),mwindow.c 计算七类窗函数并给出归一化对数幅频曲线。 注:本书按13.5节的方法产生了一个实验数据test,该数据是128点复序列,用于功率谱估计,并分别放在三个子目录中。在FORTRAN和C的子目录中,该数据文件的名字是test.dat,在MATLAB的子目录中,其名字是test.mat。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧