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 -------------- <