matlab数字带阻滤波器设计以及DSP设计(精).doc

上传人:聆听****声音 文档编号:708244 上传时间:2023-04-29 格式:DOC 页数:5 大小:159KB
下载 相关 举报
matlab数字带阻滤波器设计以及DSP设计(精).doc_第1页
第1页 / 共5页
matlab数字带阻滤波器设计以及DSP设计(精).doc_第2页
第2页 / 共5页
matlab数字带阻滤波器设计以及DSP设计(精).doc_第3页
第3页 / 共5页
matlab数字带阻滤波器设计以及DSP设计(精).doc_第4页
第4页 / 共5页
matlab数字带阻滤波器设计以及DSP设计(精).doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

matlab数字带阻滤波器设计以及DSP设计(精).doc

《matlab数字带阻滤波器设计以及DSP设计(精).doc》由会员分享,可在线阅读,更多相关《matlab数字带阻滤波器设计以及DSP设计(精).doc(5页珍藏版)》请在冰点文库上搜索。

matlab数字带阻滤波器设计以及DSP设计(精).doc

数字滤波器设计是用硬件或者软件实现的一种算法,这个算法是为了达到滤波的目的而对数字输入信号进行运算产生数字输出信号。

数字滤波器这个词是指执行滤波算法的特定硬件或者软件程序,数字滤波器经常作用的对象是数字化的模拟信号,或者刚好是存储在计算机存储器里代表某些变量的数据。

下图给出了一个具有模拟输入信号和输出信号的实时数字滤波器的简化框图。

带限模拟信号x(t)被周期地抽样,然后通过量化转化成一数字序列x(n)(n=0,1,……)。

数字处理器依据滤波器的计算算法执行滤波运算,把输入系列x(n)映射到输出

系列y(n)。

DAC把数字滤波后的输出转化成模拟值,这些模拟值接着被模拟滤波器平滑,并且消去不想要的高频分量.

利用MATLAB的强大运算功能,基于MATLAB信号处理工具的数字滤波器设计法可以快速有效的设计由软件组成的常规数字滤波器,设计方便、快捷,极大的减轻了工作量。

在设计过程中可以对比滤波器特性,随时更改参数,以达到滤波器设计的最优化。

1、MATLB仿真源程序

fs=15000;T=1/fs;>>rp=1;rs=40;

>>wp1=0.11*pi;wp2=0.81*pi;ws1=0.31*pi;ws2=0.61*pi;%数字带阻滤波器技术指标>>wc1=(2/T)*tan(wp1/2);%频率预畸变>>wc2=(2/T)*tan(wp2/2);wr1=(2/T)*tan(ws1/2);wr2=(2/T)*tan(ws2/2);>>w0=sqrt(wc1*wc2);B=wc2-wc1;

>>wp=1;%归一化通带截止频率>>ws=wp*(wr1*B)/(w0^2-wr1^2);%归一化阻带截止频率>>[N,wc]=buttord(wp,ws,rp,rs,'s');%求滤波器阶数和3dB截止频率>>[Z,P,K]=buttap(N);

>>[Md,Nd]=zp2tf(Z,P,K);%将零极点形式转换为传输形式>>[M,N]=lp2bs(Md,Nd,w0,B);%对低通滤波器进行频率变换,转换为带阻滤波器>>[h,w]=freqs(M,N);%模拟带阻滤波器的幅频响应>>xlabel('频率/Hz');ylabel('幅度');title('模拟带阻滤波器');

>>[b,a]=bilinear(M,N,15000);%对模拟滤波器双线性变换>>figure

(1);

>>freqz(b,a);[H,W]=freqz(b,a);%绘出频率响应>>axis([0,1,-100,20]);

>>figure

(2);

>>plot(W*fs/(2*pi),abs(H));gridon;

>>xlabel('频率/Hz');ylabel('幅值');

>>title('数字滤波器幅频响应

|H(ejOmega)|');

指标参数:

sl=0.5062rad,sl=0.5536rad,

pl=0.3750rad,pu=0.6750rad,

p=1dB,s=40dB

由MATLAB可得出系统函数系数:

Bz=[0.35210.18191.04160.35761.04160.18190.3521]

Az=[1.00000.35311.05470.30380.72320.06450.0095]

系统函数为:

H(Z)=(0.3521+0.1819*z-1+1.0416*z-2+0.3576*z-3+1.0416*z-4+0.1819*z+0.3521*z)/(1.0000+0.3531*z+1.0547*z+0.3038*z+

-4-5-60.7232*z+0.0645*z+0.0095*z)

DSP带阻源程序:

#include"math.h"

#defineIIRNUMBER30

#defineSIGNAL1F2200

#defineSAMPLEF8000

#definePI3.1415926-5-6-1-2-3

floatInputWave();

floatIIR();

floatfAn[IIRNUMBER]=

{0.3521,0.0575735,0.649911,-0.0395743,0.0979831,-0.0727494,-0.190606,0.100419,0.113193,-0.0413053,0.00630108,-0.0526857,-0.0620213,0.0971701,0.0441409,-0.0611411,-0.00629462,-0.0124744,-0.00798267,0.0583348,-0.000312435,-0.0489819,0.0065404,0.0078924,0.00173493,0.023966,-0.0142577,-0.0264339,0.0152646,0.00930233,-0.00260476}

floatfXn[IIRNUMBER]={0.0};

floatfInput,fOutput;

floatfSignal1,fSignal2,fSignal3;

floatfStepSignal1,fStepSignal2,fStepSignal3;

floatf2PI;

inti;

floatfIn[256],fOut[256];

intnIn,nOut;

main()

{

nIn=0;nOut=0;

fInput=fOutput=0;

f2PI=2*PI;

fSignal1=0.0;

fSignal2=0.0;

fSignal3=0.0;

fStepSignal1=PI*0.4;

fStepSignal2=PI*0.55;

fStepSignal2=PI*0.7;

while

(1)

{

fInput=InputWave();

fIn[nIn]=fInput;

nIn++;nIn%=256;

fOutput=IIR();

fOut[nOut]=fOutput;

nOut++;//breakpoint

if(nOut>=256)

{

nOut=0;

}

}

}

floatInputWave()

{for(i=IIRNUMBER-1;i>0;i--)

{fXn[i]=fXn[i-1];

}

fXn[0]=sin((double)fSignal1)+sin((double)fSignal2)+sin((double)fSignal3);

fSignal1+=fStepSignal1;

if(fSignal1>=f2PI)fSignal1-=f2PI;

fSignal2+=fStepSignal2;

if(fSignal2>=f2PI)fSignal2-=f2PI;

fSignal3+=fStepSignal3;

if(fSignal3>=f2PI)fSignal3-=f2PI;

return(fXn[0]);

}

floatIIR()

{floatfSum;

fSum=0.0;

for(i=0;i

{fSum+=(fXn[i]*fAn[i]);

}

return(fSum);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2