⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsp04.m

📁 FIR滤波器实验程序(西安电子第二版的第四个实验)
💻 M
字号:
%实验4:用窗函数法设计FIR数字滤波器
clc;
N=input('输入窗函数长度(默认值15,选择范围[10-64]):\nN=','s');

N=str2num(N);
if N<1
    N=15;
else
    if N<10 | N>64
        N=15;
    end
end
w=input('输入截止频率(默认值pi/4,选择范围[0.5-pi]):\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=[0:(N-1)];

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

    k=input('选择窗口类型(默认1):\n[1]矩形窗\n[2]Hamming窗\n[3]Hanning窗\n[4]Blackman\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=[string,' N=',num2str(N)];
    
    h=hd.*(B)';
    [H,m]=freqz(h,[1],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([0 N-1 -0.1 0.3]);
    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([0 1 -100 0]);
    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([0 3.15 -4 4]);
    xlabel('w');
    ylabel('相位/rad');
    title('相频特性');
    
    subplot(2,2,4);
    plot(m,mag);
    axis([0 3.15 0 1.5]);
    xlabel('w');
    ylabel('|H(e^j^w)|');
    title('幅频特性');
    text(0.9,1.2,string);
    
    b=input('继续实验吗?(默认1)\n[1]继续\n[0]退出\n选择:','s');
    switch(b)
        case{'0','1'}
            b=str2num(b);
        otherwise
            b=1;
    end
    if b==1
        clc;
        N=input('输入窗函数长度(默认值15,选择范围[10-64]):\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,选择范围[0.5-pi]):\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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -