一、实验目的
1.了解熟悉MATLAB中cumsum、ifft、conv、filter、conj、flip函数的使用;
2.在已知Group Delay、Magnitude Response、输入x[n]的情况下,求出输出y[n]。
二、实验原理
Linear Phase FIR Filter Frequency Response:
三、实验设计及操作
1、写入群时延和幅度响应;
2、通过计算群时延的积分得出相位;
3、通过幅度响应和相位表示出传递函数表达式;
4、写入输入序列x[n];
5、输出序列y[n]。
四、实验结果及分析
通过比较输入和输出的图像,可以发现最高频(输入信号中三个频率信号的最高频,下同)已被滤去,中频和低频保留,位置交换,但相对相位关系没有改变。
常数幅度增益和线性相位延迟保证了信号传输不失真和各频率成分相对相位关系不改变,即信号经过滤波器后,各个频率分量的延时时间是一样的。
五、实验总结和提升
实现了在MATLAB中基于线性相位有限滤波器已知输入计算输出,加深了对线性相位滤波器的理解,为日后的其他信号处理打下基础。
六、源代码
clear
clc
close all
%% Group Delay
theta=0.01:pi/150:pi;
GD=50*(theta>=0&theta<pi/5) + 200*(theta>=pi/5&theta<pi/2) + 50*(theta>=pi/2&theta<=pi);
figure(1);subplot(311);
plot(theta,GD);xlabel('Radian frequency(w)');
set(gca,'XTick',0:pi/5:pi);
set(gca,'XTicklabel',{'0','¦Ð/5','2¦Ð/5','3¦Ð/5','4¦Ð/5','¦Ð'});
axis([0 pi 0 250]);
grid on;hold on;title('Group Delay');
%ÇóºÍ
SGD=cumsum(GD)*pi/150;
subplot(312);
plot(SGD);
%% Magnitude Response
MR=(theta>=0&theta<pi/2);
subplot(313);
plot(theta,MR);xlabel('Radian frequency(w)');
set(gca,'XTick',0:pi/5:pi);
set(gca,'XTicklabel',{'0','¦Ð/5','2¦Ð/5','3¦Ð/5','4¦Ð/5','¦Ð'});
axis([0 pi -0.5 1.5]);
grid on;title('Magnitude Response');
%% 输入x[n]
x=zeros(1,150);
for n=1:1:150
x(n)=sin(0.8*pi*n).*(n>=1&n<=50) + sin(0.1*pi*n).*(n>=51&n<=100) + sin(0.3*pi*n).*(n>=101&n<=150);
end
figure(2);
plot(1:1:150,x);axis([-20 180 -1 1]);
title('Input Signal X[n]');
xlabel('Sample Number n');
%% 输出y[n] cumsum ifft filter plot conj共轭 flip对称
Hjw=MR.*exp(SGD*1j);
temp=flip(conj(Hjw));
Hjw(:,151:300)=temp;
Hn=ifft(Hjw);
%y=filter(sqrt(Hn),1./sqrt(Hn),x);
y=conv(Hn,x);
figure(3);
plot(1:1:449,y);
%% END