当前位置 博文首页 > 通信汪的美好生活的博客:数字滤波器设计(数字信号处理的上机实

    通信汪的美好生活的博客:数字滤波器设计(数字信号处理的上机实

    作者:[db:作者] 时间:2021-07-11 22:23

    一、实验目的
    1、加深对数字滤波器的基本设计方法的理解。
    2、掌握用模拟滤波器原型设计IIR数字滤波器的方法。
    3、掌握对窗函数法设计FIR数字滤波器的基本原理的理解。
    4、了解MATLAB有关数字滤波器设计的子函数的调用方法。

    二、课后习题
    注意:我的第三题代码写的有点问题,改的方法治标不治本,等有时间了去问问我们这个课的老师再改。实验的文档在我的上传资源里面。
    (1) 分析信号S=3+0.6sin(2pi90t+pi/2)+ sin(2pi50*t-pi/6)的频谱,并用脉冲响应不变法设计低通滤波器,滤除90Hz的正弦波信号。要求画出:
    ① 信号滤波前的时域图及频谱图(坐标轴是实际幅度及实际频率)
    ② 滤波器的脉冲响应、滤波器的幅频响应曲线和相频响应曲线。
    ③ 信号滤波后的时域图及频谱图(坐标轴是实际幅度及实际频率)
    代码:

    close all
    clc
    clear
    df=1;N=256;
    Ts=1/N/df;L=N*Ts;t=[0:Ts:L]; %采样时刻
    %信号
    S=3+0.6*sin(2*pi*90*t+pi/2)+ sin(2*pi*50*t-pi/6)+0.7*sin(2*pi*80*t-pi/6);
    %显示原始信号
    plot(S);
    title('原始信号');grid on;
    figure;
    Y = fft(S,N); %做FFT变换
    Ayy = (abs(Y)); %取模
    Ayy=Ayy/(N/2);   %换算成实际的幅度
    Ayy(1)=Ayy(1)/2;
    F=([1:N]-1)/Ts/N; %换算成实际的频率值
    plot(F(1:N/2),Ayy(1:N/2));   %显示换算后的FFT模值结果
    title('幅度-频率曲线图'); grid on;
    figure;
    Pyy=[1:N/2];
    for i=1:N/2
    Pyy(i)=phase(Y(i)); %计算相位
    Pyy(i)=Pyy(i)*180/pi; %换算为角度
    end
    plot(F(1:N/2),Pyy(1:N/2));   %显示相位图
    title('相位-频率曲线图'); grid on;
    
    figure;
    %%%%%%%%%%%%%%%%%%%%%%%数字滤波器设计6%(1)给定的数字滤波器的设计指标
    wp=2*pi*50*Ts;    %滤波器的通带截止频率
    ws=2*pi*80*Ts;     %滤波器的阻带截止频率
    Rp=1;As=15;    %滤波器的通阻带衰减指标
    ripple=10^(-Rp/20); %滤波器的通带衰减对应的幅度值
    Attn=10^(-As/20);   %滤波器的阻带衰减对应的幅度值
    %(2)转换为模拟滤波器的技术指标
    Fs=2000;T=1/Fs;Omgp=wp*Fs;Omgs=ws*Fs;
    %(3)确定模拟滤波器的最小阶数N和截止频率;
     [n,Omgc]=buttord(Omgp,Omgs,Rp,As,'s')  %计算阶数n和截止频率
    %(4) 根据最小阶数N计算模拟低通原型滤波器的系统传递函数 
    [z0,p0,k0]=buttap(n);    %设计归一化的巴特沃思模拟滤波器原型
    [ba1,aa1]=zp2tf(z0,p0,k0);     %由零极点得到传递函数
    %(5)利用模拟域频率变换法将模拟低通原型滤波器转换为实际模拟滤波器的系统传递函数;
    [ba,aa]=lp2lp(ba1,aa1,Omgc);  %变换为模拟低通滤波器
    %(6)用脉冲响应不变法将模拟滤波器转换为数字滤波器 
     [bd,ad]=impinvar(ba,aa,Fs)    %脉冲响应不变法
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%数字滤波器特性
     [H,w]=freqz(bd,ad);         %求数字系统的频率特性       
    dbH=20*log10((abs(H)+eps)/max(abs(H))); 
    subplot(2,2,1);plot(w/pi,abs(H));
    ylabel('|H|');title('幅度响应');axis([0,1,0,1.1]);
    set(gca,'XTickMode','manual','XTick',[0,wp,ws,2*ws]);
    set(gca,'YTickMode','manual','YTick',[0,Attn,ripple,1]);grid
    subplot(2,2,2);plot(w/pi,angle(H)/pi);
    ylabel('\phi');title('相位响应');axis([0,1,-1,1]);
    set(gca,'XTickMode','manual','XTick',[0,wp,ws,2*ws]);
    set(gca,'YTickMode','manual','YTick',[-1,0,1]);grid
    subplot(2,2,3);plot(w/pi,dbH);title('幅度响应(dB)');
    ylabel('dB');xlabel('频率(\pi)');axis([0,1,-40,5]);
    set(gca,'XTickMode','manual','XTick',[0,wp,ws,12*ws]);
    set(gca,'YTickMode','manual','YTick',[-50,-15,-1,0]);grid
    subplot(2,2,4);zplane(bd,ad);axis([-1.1,1.1,-1.1,1.1]);title('零极点图');
    S1=filter(bd,ad,S);
    figure;
    plot(