chy19840208 发表于 2007-4-14 18:13

求救

谁有基于MATLAB的FIR数字滤波器的实例程序啊

happy 发表于 2007-4-14 20:09

西安电子第二版的第四个实验

%实验4:用窗函数法设计FIR数字滤波器
clc;
N=input('输入窗函数长度(默认值15,选择范围):\nN=','s');

N=str2num(N);
if N<1
    N=15;
else
    if N<10 | N>64
      N=15;
    end
end
w=input('输入截止频率(默认值pi/4,选择范围):\nwc=','s');

if w<1
    w=pi/4;
else
    if w<0.5 | w>pi
      w=pi/4;
    end
end
b=1;
close all;

i=0;
while(b)
    n=;

%产生理想低通滤波器单位脉冲响应hd(n)
alpha=(N-1)/2;
n=;
Q=n-alpha+eps;
hd=sin(w*Q)./(pi*Q);

    k=input('选择窗口类型(默认1):\n矩形窗\nHamming窗\nHanning窗\nBlackman\n选择:','s');
    switch(k)
      case{'1','2','3','4'}
            k=str2num(k);
      otherwise
            k=1;
    end
    switch(k)
      case 1
            B=boxcar(N);
            string='Boxcar';
      case 2
            B=hamming(N);
            string='Hamming';
      case 3
            B=hanning(N);
            string='Hanning';
      case 4
            B=blackman(N);
            string='Blackman';
    end
    string=;
   
    h=hd.*(B)';
    =freqz(h,,1024,'whole');
    mag=abs(H);
    db=20*log10((mag+eps)/max(mag));
    pha=angle(H);
    i=i+1;
   
    figure(i);
    subplot(2,2,1);
    n=0:N-1;
    stem(n,h,'.');
    axis();
    hold on;
    n=0:N-1;
    x=zeros(N);
    plot(n,x,'-');
    xlabel('n');
    ylabel('h(n)');
    title('实际低通滤波器的h(n)');
    text((0.3*N),0.27,string);
    hold off;
   
    subplot(2,2,2);
    plot(m/pi,db);
    axis();
    xlabel('w/pi');
    ylabel('20lg|H(e^j^w)|');
    title('衰减特性/dB');
    grid;
   
    subplot(2,2,3);
    plot(m,pha);
    hold on;
    n=0:7;
    x=zeros(8);
    plot(n,x,'-');
    axis();
    xlabel('w');
    ylabel('相位/rad');
    title('相频特性');
   
    subplot(2,2,4);
    plot(m,mag);
    axis();
    xlabel('w');
    ylabel('|H(e^j^w)|');
    title('幅频特性');
    text(0.9,1.2,string);
   
    b=input('继续实验吗?(默认1)\n继续\n退出\n选择:','s');
    switch(b)
      case{'0','1'}
            b=str2num(b);
      otherwise
            b=1;
    end
    if b==1
      clc;
      N=input('输入窗函数长度(默认值15,选择范围):\nN=','s');
      N=str2num(N);
      if length(N)<1
            N=15;
      else
            if N<10 | N>64
                N=15;
            end
      end
      w=input('输入截止频率(默认值pi/4,选择范围):\nwc=','s');
      w=str2num(w);
      if length(w)<1
            w=pi/4;
      else
            if w<0.5 | w>pi
                w=pi/4;
            end
      end
    end
end
页: [1]
查看完整版本: 求救