目录
一.实验内容
二.代码分析
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(2*pi*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/(2*fc+1),1/fc,1/(4*fc)];
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