Matlab实现数字信号处理(1)——数字滤波器设计

目录

一.实验内容

二.代码分析

1.信号产生部分

2.利用傅立叶级数展开的方法,自由生成所需的x(t)

3.通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n)

3.对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线)

4.利用巴特沃思滤波器设计数字滤波器

<1>低通滤波器

<2>高通滤波器

<3>绘图

5.利用窗函数设计法或频率采样法设计数字滤波器

<1>高通滤波器

<2>低通滤波器

<3>绘图

三.实验结果


一.实验内容

1.利用傅立叶级数展开的方法,自由生成所需的x(t);

2.通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n)(作出x(n)图形);

3.对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线);

4.利用巴特沃思、切比雪夫或椭圆滤波器设计数字滤波器(滤波特性自定),要求通过改变滤波器参数或特性(低通、高通、带通或带阻)设计至少两种数字滤波器,分析所设计滤波器(画出频率特性曲线),并对上述给出的不同x(n)分别进行滤波(画出滤波结果),然后加以讨论;

5.利用窗函数设计法或频率采样法设计数字滤波器(滤波特性自定),要求通过改变滤波器参数或特性(低通、高通、带通或带阻等)设计至少两种数字滤波器,分析所设计滤波器(画出频率特性曲线),并对上述给出的不同x(n)分别进行滤波(画出滤波结果),然后加以讨论。

二.代码分析

1.信号产生部分


​ function [signal]=signal_xt(t_length,T,f,A,u)
​ %% 函数描述
​ % 功能:利用傅立叶级数展开的方法,自由生成所需的x(t)(不含直流量);
​ % 输入参数:产生序列的长度t_length;采样间隔T;f(t)的基波频率f;傅立叶级数展开的各项幅值和相位。故最高频率为fc=length(A)f
​ % 使用举例:signal=signal_xt(3,0.01,1,[1,2,3,4],[0,1,0,1])
​ %% t,y初始化并计算
​ t=0:T:t_length-T;
​ t_num=t_length/T;
​ signal=zeros(1,t_num);
​ max=0;
​ min=0;
​ for i=1:t_num
​ for k=1:length(A)
​ % 计算函数值
​ signal(i)= signal(i) + A(k)cos(2pi
k*t(i)*f+u(k));
​ % 最大最小值记录
​ if max<signal(i)
​ max=signal(i);
​ end
​ if min>signal(i)
​ min=signal(i);
​ end
​ end
​ end
​ %% 结果展示
​ figure;
​ subplot(2,1,1);
​ plot(t,signal);
​ % x,y轴范围限制及标题
​ axis([0-0.1,t_length+0.1,min-0.5,max+0.5])
​ title(‘x(t)’);
​ xlabel(‘t’);
​ ylabel(‘x(t)’);
​ grid on

​ subplot(2,1,2);
​ stem(t,signal,”.”);
​ % x,y轴范围限制及标题
​ axis([0-0.1,t_length+0.1,min-0.5,max+0.5])
​ title(‘x(t)’);
​ xlabel(‘t’);
​ ylabel(‘x(t)’);
​ grid on

function [signal]=signal_xt(t_length,T,f,A,u)
%% 函数描述
% 功能:利用傅立叶级数展开的方法,自由生成所需的x(t)(不含直流量);
% 输入参数:产生序列的长度t_length;采样间隔T;f(t)的基波频率f;傅立叶级数展开的各项幅值和相位。故最高频率为fc=length(A)*f
% 使用举例:signal=signal_xt(3,0.01,1,[1,2,3,4],[0,1,0,1])

2.利用傅立叶级数展开的方法,自由生成所需的x(t)


​ %% 利用傅立叶级数展开的方法,自由生成所需的x(t),即signal_origin;
​ t_length=1; %生成长度
​ f=1; %基础频率
​ A=[3,1,1,3]; %各项幅度
​ u=[-1,0,1,0]; %各项相位
​ signal_origin=signal_xt(t_length,0.01,f,A,u);
​ fc=f*length(A);

3.通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n)


​ %% 通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n);
​ T=[1/(2fc+1),1/fc,1/(4fc)];
​ N=zeros(1,length(T));
​ for i=1:length(T)
​ N(i)=1/T(i);
​ end
​ x1=signal_xt(t_length,T(1),f,A,u);
​ x2=signal_xt(t_length,T(2),f,A,u);
​ x3=signal_xt(t_length,T(3),f,A,u);

选取频率分别为2fc+1、fc、4fc

3.对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线)


​ %% 对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线);
​ X1=fft(x1,N(1));
​ X2=fft(x2,N(2));
​ X3=fft(x3,N(3));

​ % 绘制
​ figure;
​ % 幅值绘制
​ subplot(2,3,1);
​ stem(0:N(1)-1,abs(X1),’.’);
​ title(“X1”);
​ grid on

subplot(2,3,2);
stem(0:N(2)-1,abs(X2),’.’);
title(“X2”);
grid on

subplot(2,3,3);
stem(0:N(3)-1,abs(X3),'.');
title("X3");
grid on

%   相位绘制
subplot(2,3,4);
stem(0:N(1)-1,angle(X1),'.');
title("X1");
grid on

subplot(2,3,5);
stem(0:N(2)-1,angle(X2),'.');
title("X2");
grid on

subplot(2,3,6);
stem(0:N(3)-1,angle(X3),'.');
title("X3");
grid on

使用 fft 函数进行 DFT,注意结果频率响应是复数,使用abs函数得其幅值,angle函数得其相位。

4.利用巴特沃思滤波器设计数字滤波器
<1>低通滤波器


​ % 设置低通滤波器参数
​ wp=0.35; %通带边界频率
​ ws=0.7; %阻带截止频率
​ Rp=3;
​ As=15;
​ % 计算滤波器阶数N和3dB截止频率wc
​ [Nc,wc]=buttord(wp,ws,Rp,As,’s’);
​ % 计算滤波器系统函数分子分母多项式系数
​ [Bz,Az]=butter(Nc,wc,’low’);
​ wk=64;
​ Hk=freqz(Bz,Az,wk);

参数设置及函数使用参考课本《数字信号处理》

<2>高通滤波器


​ % 设置高通滤波器参数
​ wp=0.75;
​ ws=0.5;
​ rp=3;
​ rs=15;
​ [Nc,wc]=buttord(wp,ws,rp,rs,’s’);
​ [Bz,Az]=butter(Nc,wc,’high’);
​ wk=64;
​ Hk=freqz(Bz,Az,wk);

<3>绘图


​ % 绘图
​ figure;
​ subplot(2,3,1);
​ stem(0:1/63:1,abs(Hk),’.’);
​ xlabel(‘频率’);
​ ylabel(‘滤波器幅度/dB’);
​ grid on

​ % 滤波后结果
​ m1=filter(Bz,Az,x1);
​ m2=filter(Bz,Az,x2);
​ m3=filter(Bz,Az,x3);
​ Y1=fft(m1,N(1));
​ Y2=fft(m2,N(2));
​ Y3=fft(m3,N(3));
​ % 绘图
​ subplot(2,3,4);
​ stem(0:N(1)-1,abs(Y1),’.’);
​ title(‘滤波后Y频率特性’);
​ grid on
​ subplot(2,3,5);
​ stem(0:N(2)-1,abs(Y2),’.’);
​ title(‘滤波后Y频率特性’);
​ grid on
​ subplot(2,3,6);
​ stem(0:N(3)-1,abs(Y3),’.’);
​ title(‘滤波后Y频率特性’);
​ grid on

5.利用窗函数设计法或频率采样法设计数字滤波器
<1>高通滤波器


​ % 设置高通滤波器参数
​ wp=pi/2;
​ ws=pi/4;
​ Bt=wp-ws; %过渡带宽度
​ N0=ceil(6.2*pi/Bt); %汉宁窗计算所需h(n)长度N0
​ Nn=N0+mod(N0+1,2); %确保h(n)长度为奇数
​ wc=(wp+ws)/2/pi; %理想高通滤波器通带截止频率
​ hn=fir1(Nn-1,wc,’HIGH’,hanning(Nn));
​ % 高通滤波器频率响应
​ Hk=fft(hn,length(hn));

<2>低通滤波器


​ % 设置低通滤波器参数
​ wp=pi/4;
​ ws=pi/2;
​ Bt=abs(wp-ws); %过渡带宽度
​ N0=ceil(6.2*pi/Bt); %汉宁窗计算所需h(n)长度N0
​ Nn=N0+mod(N0+1,2); %确保h(n)长度为奇数
​ wc=(wp+ws)/2/pi; %理想高通滤波器通带截止频率
​ hn=fir1(Nn-1,wc,’LOW’,hanning(Nn));
​ % 低通滤波器频率响应
​ Hk=fft(hn,length(hn));

<3>绘图


​ % 滤波结果
​ y1=conv(hn,x1);
​ y2=conv(hn,x2);
​ y3=conv(hn,x3);
​ n1=length(y1);
​ n2=length(y2);
​ n3=length(y3);
​ Y1=fft(y1,n1);
​ Y2=fft(y2,n2);
​ Y3=fft(y3,n3);
​ % 绘图
​ figure;
​ subplot(2,3,1);
​ stem(0:Nn-1,hn,’.’);
​ xlabel(‘n’);
​ ylabel(‘h(n)’);
​ grid on
​ subplot(2,3,2);
​ stem(0:Nn-1,abs(Hk),’.’);
​ xlabel(‘k’);
​ ylabel(‘H(k)’);
​ grid on
​ subplot(2,3,4);
​ stem(0:n1-1,abs(Y1),’.’);
​ title(‘滤波后Y频率特性’);
​ grid on
​ subplot(2,3,5);
​ stem(0:n2-1,abs(Y2),’.’);
​ title(‘滤波后Y频率特性’);
​ grid on
​ subplot(2,3,6);
​ stem(0:n3-1,abs(Y3),’.’);
​ title(‘滤波后Y频率特性’);
​ grid on

三.实验结果

本文转自 https://blog.csdn.net/qq_32971095/article/details/134966834,如有侵权,请联系删除。

> --------------- THE END -------------- <