ʵÑéÎ壺˫ÏßÐԱ任·¨µÄÉè¼ÆIIR Êý×ÖÂ˲¨Æ÷ ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2025/10/15 13:58:41ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

0.0940?0.3759z?1?0.5639z?2?0.3759z?1?0.0940H(z)? ?2?41?0.4860z?0.0177z

3¡¢ÒÑÖªËĽ׹éÒ»»¯µÍͨ°ÍÌØÎÖ˹ģÄâÂ˲¨Æ÷ϵͳº¯ÊýΪHa(s)?1£¬±àдMATLAB³Ì

s4?5s3?2s2?2s?1ÐòʵÏÖ´ÓHa?s?Éè¼Æ3dB½ØÖ¹ÆµÂÊΪwc??4µÄËĽ׸ßͨ°ÍÌØÎÖ˹Êý×ÖÂ˲¨Æ÷¡£

Éè¼Æ³ÌÐòÈçÏ£º

clear;

T=1; fs=1/T; N=4; wc=pi/2;

omegach=2*tan(wc/2)/T;%Ä£ÄâÂ˲¨Æ÷µÄ½ØÖ¹ÆµÂÊ M=1;

N=[1,2.6131,3.4142,2.6131,1];

[h,w]=freqs(M,N,512); %Ä£ÄâÂ˲¨Æ÷µÄ·ùƵÏìÓ¦ subplot(2,1,1);

plot(w,20*log10(abs(h))); axis([0,10,-90,0]),grid on;

xlabel('Hz');ylabel('·ù¶È'); title('¹éÒ»»¯Ä£ÄâµÍͨÂ˲¨Æ÷'); [Ms,Ns]=lp2lp(M,N,omegach); %¶ÔµÍͨÂ˲¨Æ÷½øÐÐÆµÂʱ任 [hs,ws]=freqs(Ms,Ns,512); %Ä£ÄâÂ˲¨Æ÷µÄ·ùƵÏìÓ¦ subplot(2,1,2);plot(ws,20*log10(abs(hs))); grid;

axis([0,10,-90,0]);

xlabel('Hz');ylabel('·ù¶È'); title('È¥¹éÒ»»¯Ä£ÄâµÍͨÂ˲¨Æ÷'); [Mz,Nz]=bilinear(Ms,Ns,1/T); %¶ÔÄ£ÄâÂ˲¨Æ÷Ë«ÏßÐԱ任 [h1,w1]=freqz(Mz,Nz); %Êý×ÖÂ˲¨Æ÷µÄ·ùƵÏìÓ¦ figure

plot(w1/pi,20*log10(abs(h1))); grid;

xlabel('¦Ø/¦Ð');ylabel('·ù¶È(dB)'); title('Êý×ÖµÍͨÂ˲¨Æ÷'); axis([0,1,-160,0])

6

¹éÒ»»¯Ä£ÄâµÍͨÂ˲¨Æ÷0·ù¶È-500123567HzÈ¥¹éÒ»»¯Ä£ÄâµÍͨÂ˲¨Æ÷489100·ù¶È-50012356HzÊý×ÖµÍͨÂ˲¨Æ÷4789100·ù¶È(dB)-50-100-15000.10.20.30.40.5¦Ø/¦Ð0.60.70.80.91

ËÄ¡¢ÊµÑéÄÚÈÝ

1¡¢²ÉÑùËÙÂÊΪ10000Hz£¬ÒªÇóÉè¼ÆÒ»¸ö°ÍÌØÎÖ˹´ø×èÂ˲¨Æ÷£¬fp=[1000Hz£¬1500Hz]£¬fs=[1200Hz£¬1300Hz]£¬

Rp=3dB£¬Rs=30dB¡£

³ÌÐò£º

fn=10000;%²ÉÑùƵÂÊ

fp=[1000,1500]; %ͨ´ø½ØÖ¹ÆµÂÊ fs=[1200,1300]; %×è´øÆðʼƵÂÊ Rp=3; %ͨ´ø×î´óË¥¼õ Rs=30;%×è´ø×îС˥¼õ

Wp=fp/(fn/2);%¼ÆËã¹éÒ»»¯½ÇƵÂÊ Ws=fs/(fn/2);

[n,Wn]=buttord(Wp,Ws,Rp,Rs);%¼ÆËã½×ÊýºÍ½ØÖ¹ÆµÂÊ

[b,a]=butter(n,Wn,'stop');%¼ÆËãH(z)·Ö×Ó¡¢·Öĸ¶àÏîʽϵÊý

[H,F]=freqz(b,a,1000,8000);%¼ÆËãH(z)µÄ·ùƵÏìÓ¦,freqz(b,a,¼ÆËãµãÊý,²ÉÑùËÙÂÊ) subplot(2,1,1)

plot(F,20*log10(abs(H))) %»­³ö·ùÆµÌØÐÔͼ

xlabel('Frequency(Hz)'); ylabel('Magnitude(dB)') title('´ø×èÂ˲¨Æ÷')

axis([0 4000 -30 3]);grid on pha=angle(H)*180/pi;

7

subplot(2,1,2)

plot(F,pha);grid on %»­³öÏàÆµÌØÐÔͼ xlabel('Frequency(Hz)'); ylabel('phase');

Ìáʾ£º[b,a]=butter(N,Wc,'stop')

2¡¢ ²ÉÑùËÙÂÊΪ10000Hz£¬ÒªÇóÉè¼ÆÒ»¸ö´øÍ¨Â˲¨Æ÷£¬fp=[1000Hz£¬1500Hz]£¬fs=[600Hz£¬1900Hz]£¬Rp=3dB£¬

Rs=20dB¡£

³ÌÐò£º

fn=10000;%²ÉÑùƵÂÊ

fp=[1000,1500]; %ͨ´ø½ØÖ¹ÆµÂÊ fs=[600,1900]; %×è´øÆðʼƵÂÊ Rp=3; %ͨ´ø×î´óË¥¼õ Rs=20;%×è´ø×îС˥¼õ

Wp=fp/(fn/2);%¼ÆËã¹éÒ»»¯½ÇƵÂÊ Ws=fs/(fn/2);

[n,Wn]=buttord(Wp,Ws,Rp,Rs);%¼ÆËã½×ÊýºÍ½ØÖ¹ÆµÂÊ [b,a]=butter(n,Wn);%¼ÆËãH(z)·Ö×Ó¡¢·Öĸ¶àÏîʽϵÊý

[H,F]=freqz(b,a,1000,8000);%¼ÆËãH(z)µÄ·ùƵÏìÓ¦,freqz(b,a,¼ÆËãµãÊý,²ÉÑùËÙÂÊ) subplot(2,1,1)

plot(F,20*log10(abs(H))) %»­³ö·ùÆµÌØÐÔͼ xlabel('Frequency(Hz)'); ylabel('Magnitude(dB)') title('´øÍ¨Â˲¨Æ÷') axis([0 4000 -30 3]);grid on

8

pha=angle(H)*180/pi; subplot(2,1,2)

plot(F,pha);grid on %»­³öÏàÆµÌØÐÔͼ xlabel('Frequency(Hz)'); ylabel('phase')£»

3¡¢ÒÑÖªËĽ׹éÒ»»¯µÍͨ°ÍÌØÎÖ˹ģÄâÂ˲¨Æ÷ϵͳº¯ÊýΪHa(s)?1s?5s?2s?2s?1432£¬±àдMATLAB³Ì

ÐòʵÏÖ´ÓHa?s?Éè¼Æ3dB½ØÖ¹ÆµÂÊΪwc??4µÄËĽ׸ßͨ°ÍÌØÎÖ˹Êý×ÖÂ˲¨Æ÷¡£ clear;

T=1; fs=1/T; N=4; wc=pi/4;

omegach=2*tan(wc/2)/T;%Ä£ÄâÂ˲¨Æ÷µÄ½ØÖ¹ÆµÂÊ M=1;

N=[1,sqrt(5),2,sqrt(2),1];

[h,w]=freqs(M,N,512); %Ä£ÄâÂ˲¨Æ÷µÄ·ùƵÏìÓ¦ subplot(2,1,1);

plot(w,20*log10(abs(h))); axis([0,10,-90,0]),grid on;

xlabel('Hz');ylabel('·ù¶È'); title('¹éÒ»»¯Ä£ÄâµÍͨÂ˲¨Æ÷'); [Ms,Ns]=lp2lp(M,N,omegach); %¶ÔµÍͨÂ˲¨Æ÷½øÐÐÆµÂʱ任 [hs,ws]=freqs(Ms,Ns,512); %Ä£ÄâÂ˲¨Æ÷µÄ·ùƵÏìÓ¦

9

subplot(2,1,2);plot(ws,20*log10(abs(hs))); grid;

axis([0,10,-90,0]);

xlabel('Hz');ylabel('·ù¶È'); title('È¥¹éÒ»»¯Ä£ÄâµÍͨÂ˲¨Æ÷'); [Mz,Nz]=bilinear(Ms,Ns,1/T); %¶ÔÄ£ÄâÂ˲¨Æ÷Ë«ÏßÐԱ任 [h1,w1]=freqz(Mz,Nz); %Êý×ÖÂ˲¨Æ÷µÄ·ùƵÏìÓ¦ figure

plot(w1/pi,20*log10(abs(h1))); grid;

xlabel('¦Ø/¦Ð');ylabel('·ù¶È(dB)'); title('Êý×ÖµÍͨÂ˲¨Æ÷'); axis([0,1,-160,0])

?t)?cos(400?t)?cos(800?t)ÖеÄÈý¸öÐźŷÖÀë³öÀ´¡£ 4¡¢Éè¼ÆµÍͨÂ˲¨Æ÷£¬°ÑÊäÈëÐźÅx(t)?cos(200ÒªÇ󣺻­³öÂ˲¨Ç°ºóÐźŵIJ¨Ðμ°ÆµÆ×¼°µÍͨÂ˲¨Æ÷µÄ·ùƵÏìÓ¦¡£

Ìáʾ£º[b,a]=butter(n,Wn);%¼ÆËãH(z)·Ö×Ó¡¢·Öĸ¶àÏîʽϵÊý y=filter(b,a,x);%¶ÔÊäÈëµÄÐźŽøÐÐÂ˲¨ ³ÌÐò£º

fn=2000;%²ÉÑùƵÂÊ N=2000;%Êý¾ÝµãÊý n=0:N-1;

t=0:1/fs:200/fs;%²ÉÑùʱ¼äÐòÁÐ f0=100;%ÐÅºÅÆµÂÊ

x=cos(2*pi*f0*t)+cos(2*pi*200*t)+cos(2*pi*400*t); subplot(3,1,1); plot(t,x);

10