数字滤波器设计——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(2*pi*k*t(i)*f+u(k));
        %   最大最小值记录
        if maxsignal(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

三.实验结果

数字滤波器设计——Matlab实现数字信号处理<1>_第1张图片

数字滤波器设计——Matlab实现数字信号处理<1>_第2张图片

数字滤波器设计——Matlab实现数字信号处理<1>_第3张图片

数字滤波器设计——Matlab实现数字信号处理<1>_第4张图片

数字滤波器设计——Matlab实现数字信号处理<1>_第5张图片

数字滤波器设计——Matlab实现数字信号处理<1>_第6张图片

你可能感兴趣的:(学习笔记,作业解答,MATLAB,matlab,信号处理,算法,学习,上机实验)