资源描述
摘 要
《信号与系统》课程是一门理论和技术发展十分迅速、应用非常广泛的前沿性学科,它的理论性和实践性都很强。复用是一种将若干个彼此独立的信号,合并为一个可在同一信道上同时传输的复合信号的方法。可以把它们的频谱调制到不同的频段,合并在一起而不致相互影响,并能在接收端彼此分离开来。按频率区分信号的方法叫频分复用。我们在生活中接触到得大部分都是模拟信号,而计算机只能对数字信号进行处理。我们可以通过FFT变换,通过对模拟信号采样,使其变成数字信号,本设计就是通过FFT来实现的。Matlab语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,Matlab功能强大、简单易学、编程效率高。它的工具箱里有很多函数可以方便的对信号进行分析与处理。本设计是用FFT实现对三个同频带信号的频分复用,就是通过Matlab语言来实现的。本设计报告分析了数字信号处理课程设计的过程。用Matlab进行数字信号处理课程设计的思路,并阐述了课程设计的具体方法、步骤和内容。
关键词:数字信号处理;滤波器设计;MATLAB;频谱分析
1 设计任务目的及要求
1.1设计目的
巩固已经学过的知识,加深对知识的理解和应用,加强学科间的横向联系,学会应用MATLAB对实际问题进行仿真,并设计MUI界面。
1.2设计要求
一、课程设计的内容
选择三个不同频段的信号对其进行频谱分析,根据信号的频谱特征设计三个不同的数字
滤波器,将三路信号合成一路信号,分析合成信号的时域和频域特点,然后将合成信号
分别通过设计好的三个数字滤波器,分离出原来的三路信号,分析得到的三路信号的时
域波形和频谱,与原始信号进行比较,说明频分复用的特点。
二、课程设计的要求与数据
(1)熟悉离散信号和系统的时域特性。
(2)掌握数字信号处理的基本概念,基本理论和基本方法。
(3)掌握序列傅里叶变换的计算机实现方法,利用序列傅里叶变换对离散间可以分别调整。
(4)学会MATLAB的使用,掌握MATLAB的程序设计方法。
(5)掌握MATLAB设计FIR和IIR数字滤波器的方法。
(6)掌握GUI界面的设计方法
三、课程设计应完成的工作
(1)利用MATLAB语言产生三个不同频段的信号。
(2)对产生的三个信号进行FFT变换。
(3)将三路信号叠加为一路信号。
(4)根据三路信号的频谱特点得到性能指标,由性能指标设计三个滤波器。
(5)用设计的滤波器对信号进行滤波,并对其频谱图进行分析。
(6)分析得到信号的频谱,并画出滤波后信号的时域波形和频谱。
2 原理与模块介绍
2.1 快速傅里叶变换FFT原理
快速傅立叶变换(FFT)算法
长度为N的序列的离散傅立叶变换为:
N点的DFT可以分解为两个N/2点的DFT,每个N/2点的DFT又可以分解为两个N/4点的DFT。依此类推,当N为2的整数次幂时(),由于每分解一次降低一阶幂次,所以通过M次的分解,最后全部成为一系列2点DFT运算。以上就是按时间抽取的快速傅立叶变换(FFT)算法。当需要进行变换的序列的长度不是2的整数次方的时候,为了使用以2为基的FFT,可以用末尾补零的方法,使其长度延长至2的整数次方。
序列的离散傅立叶反变换为
离散傅立叶反变换与正变换的区别在于变为,并多了一个的运算。因为和对于推导按时间抽取的快速傅立叶变换算法并无实质性区别,因此可将FFT和快速傅立叶反变换(IFFT)算法合并在同一个程序中。
若信号是模拟信号,用FFT进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可按照前面的方法用FFT来对连续信号进行谱分析。按采样定理,采样频率应大于2倍信号的最高频率,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
2.2 频分复用原理
复用是一种将若干个彼此独立的信号,合并为一个可在同一信道上同时传输的复合信号的方法。比如,传输的语音信号的频谱一般在300~3400Hz内,为了使若干个这种信号能在同一信道上传输,可以把它们的频谱调制到不同的频段,合并在一起而不致相互影响,并能在接收端彼此分离开来。按频率分割信号的方法称为频分复用,频分复用(FDM,Frequency Division Multiplexing)就是将用于传输信道的总带宽划分成若干个子频带(或称子信道),每一个子信道传输1路信号。频分复用要求总频率宽度大于各个子信道频率之和,同时为了保证各子信道中所传输的信号互不干扰,应在各子信道之间设立隔离带,这样就保证了各路信号互不干扰(条件之一)。频分复用技术的特点是所有子信道传输的信号以并行的方式工作,每一路信号传输时可不考虑传输时延,因而频分复用技术取得了非常广泛的应用。
2.3滤波器原理
数字滤波器可分为FIR(有限脉冲响应)和IIR(无限脉冲响应)两种。IIR滤波器的系统函数是两个Z的多项式的有理分式,而FIR滤波器的分母为1,即只有一个分子多项式。
本次实验采用的是巴特沃斯滤波器,把buttord函数和butter函数结合起来,就可以设计任意的巴特沃斯IIR滤波器。根据输入量的不同,它有以下几种形式:
[b,a]=butter(N,wc,’high’): 设计N阶高通滤波器,wc为它的3dB边缘频率,以Π为单位,故0≤w≤1。
[b,a]=butter(N,wc):当wc为具有两个元素的矢量wc=[w1,w2]时,它设计2N阶带通滤波器,3dB通带w1≤w≤w2,w单位为Π。
[b,a]=butter(N,wc,’stop’): 若wc=[w1,w2],则它设计2N阶带阻滤波器,3dB通带为w1≤w≤w2,w单位为Π。
为了设计任意的选频巴特沃斯滤波器,必须知道阶数N和3dB边缘频率矢量wc。这可以直接利用信号处理工具箱中的buttord函数计算。如果已知滤波器指标wp,ws,Rp,As,则调用格式为
[N,wc]=buttord(wp,ws,Rp,As)
对于不同类型的滤波器,参数wp和ws有一些限制: 对于低通滤波器,wp<ws;对于高通滤波器,wp>ws;对于带通滤波器,wp和ws分别为具有两个元素的矢量,wp=[wp1,wp2]和ws=[ws1,ws2],并且ws1<wp1<wp2<ws2; 对于带阻滤波器wp1<ws1<ws2<wp2。
有些情况下,还对滤波器的相位特性提出要求,理想的是线性相位特性,即移与频率成线性关系。实际的滤波器不可能完全实现理想幅频特性,必有一定误差,因此要规定适当的指标。以低通滤波器为例,在[0,wp]的通带区,幅频特性会在1附近波动;在ws~1的阻带区,幅频特性不会真等于零是一个大于零的值;wp也不可能等于ws,在[wp,ws]之间,为过渡区;这三个与理想特性的不同点,就构成了滤波器的指标体系。即通带频率wp和通带波动,阻带频率ws和阻带衰减。
在许多情况下,人们习惯用分贝为单位,定义通带波动为(分贝)阻带衰减为(分贝)。
对于带通滤波器,wp应表为[wp1,wp2];对于带阻滤波器,ws应表为[ws1,ws2]。其他复杂形状的预期特性通常也可由若干理想的幅频特性叠合构成。
3 设 计 内 容
3.1 设计产生三个信号
通过Matlab软件自己编程产生三个同频带不同频率的模拟信号,编程如下。
t=-1:0.001:1;
n=1:256;
N=512;
fs=1000;
x1=cos(150*pi*t);
f1=n*fs/N;
figure(1);
subplot(3,1,1)
plot(x1);
title('x1的时域波形');
xlabel('x1的时间');ylabel('x1的幅值');
axis([0,100,-1,1])
x2=cos(320*pi*t);
subplot(3,1,2)
plot(x2);
title('x2的时域波形');
xlabel('x2的时间');ylabel('x2的幅值');
axis([0,100,-1,1])
x3=cos(450*pi*t);
subplot(3,1,3)
plot(x3);
title('x3的时域波形');
xlabel('x3的时间');ylabel('x3的幅值');
axis([0,100,-1,1])
三个信号的时域波形:
3.2对三个信号进行FFT变换
通过Matlab编程对产生的三个信号进行FFT变换,从而生成频谱波形图。
y1=fft(x1,512);
figure(2);
subplot(3,1,1)
plot(f1,abs(y1(1:256)));
title('x1的频域波形');
xlabel('x1的频率(Hz)');ylabel('x1的幅值');
axis([0,500,0,250])
y2=fft(x2,512);
subplot(3,1,2)
plot(f1,abs(y2(1:256)));
title('x2的频域波形');
xlabel('x2的频率(Hz)');ylabel('x2的幅值');
axis([0,500,0,250])
y3=fft(x3,512);
subplot(3,1,3)
plot(f1,abs(y3(1:256)));
title('x3的频域波形');
xlabel('x3的频率(Hz)');ylabel('x3的幅值');
axis([0,500,0,250])
三个信号的频域波形:
3.3三个信号的叠加的时域和频域
x=x1+x2+x3;
figure(3)
subplot(211);
plot(x(1:100));
title('三个信号叠加的时域波形');
y=fft(x,512);
subplot(212);
plot(f1,abs(y(1:256)));
title('三个信号叠加的频谱')
axis([0,600,0,250])
3.4 滤波器设计
3.4.1低通滤波器设计
本次试验的三个频率分别为75、160、225,所以低通滤波器设计如下:
Wp=2*pi*75;Ws=2*pi*100;Rp=1;As=30;
[N,wc]=buttord(Wp,Ws,Rp,As,'s');
[b,a]=butter(N,wc,'s');
k=1:512;fk=0:1000/1024:1000;
wk=2*pi*fk;
Hk=freqs(b,a,wk);
figure(4);
plot(fk,abs(Hk));grid on;
xlabel('频率(Hz)');ylabel('幅度');
axis([0,200,0,1.1])
低通滤波器频域图:
3.4.2 带通滤波器2设计
该滤波器主要用于滤出信号X2即160的频率,所以滤波器的设计如下:
wp=2*pi*[140,200];
ws=2*pi*[120,230];
Rp=1;
As=30;
[N,wc]=buttord(wp,ws,Rp,As,'s');
[B1,A1]=butter(N,wc,'s');
k=0:511;
fk=0:1000/512:1000;
wk=2*pi*fk;
Hk=freqs(B1,A1,wk);
figure(6)
plot(fk,20*log10(abs(Hk)));
grid on
title('带通滤波器的频响2')
xlabel('频率(Hz)');
ylabel('幅度(dB)')
axis([100,400,-40,5])
3.4.3 带通滤波器3设计
该滤波器主要用于滤出信号X3即225的频率,所以滤波器的设计如下:
wp=2*pi*[260,320];
ws=2*pi*[240,350];
Rp=1;
As=30;
[N,wc]=buttord(wp,ws,Rp,As,'s');
[B2,A2]=butter(N,wc,'s');
k=0:511;
fk=-1000:1000/512:1000;
wk=2*pi*fk;
Hk=freqs(B2,A2,wk);
figure(8)
plot(fk,20*log10(abs(Hk)));
grid on
title('带通滤波器的频响3')
xlabel('频率(Hz)');
ylabel('幅度(dB)')
axis([100,400,-40,5])
3.5用设计的滤波器对信号进行滤波
滤波后的频谱图跟原信号的频谱图有一点差别,这是因为设计的滤波器不可能完全达到理想状态。
3.5.1用低通滤波器对x进行滤波
[Bz,Az]=bilinear(b,a,1000);
y=filter(Bz,Az,x);
Y1=fft(y,512);
figure(5);
subplot(211);
plot(y);
title('Â˲¨ºóx1µÄʱÓò²¨ÐÎ');
axis([0,200,-1,1])
subplot(212);
plot(f1,abs(Y1(1:256)));
title('Â˲¨ºóx1µÄƵÆ×²¨ÐÎ');
3.5.2用带通滤波器2对x进行滤波
[Bz1,Az1]=bilinear(B1,A1,1000);
y2=filter(Bz1,Az1,x);
Y2=fft(y2,512);
figure(7);
subplot(211);
plot(y2);
title('Â˲¨ºóx2µÄʱÓò²¨ÐÎ');
axis([0,200,-1,1])
3.5.3 用带通滤波器3对x进行滤波
[Bz2,Az2]=bilinear(B2,A2,1000);
y3=filter(Bz2,Az2,x);
Y3=fft(y3,512);
figure(9);
subplot(211);
plot(y3);
title('Â˲¨ºóx3µÄʱÓò²¨ÐÎ');
axis([0,200,-1,1])
3.6 GUI界面设计
滤波前波形:
滤波后波形:
4 实验结果与数据处理
4.1测试步骤
1. 各个模块逐一调试
按照任务书的要求依次进行编程设计,依次实现各部分的功能。首先是利用MATLAB语言产生三个不同频段的信号,接着对其进行FFT变换,然后将三个叠加,分别观察其对应的波形是否符合预想当中的结果;确认信号波形无误后,开始设计低通和带通巴特沃斯滤波器,并运用所设计的3个滤波器对叠加信号进行滤波,还原到3个不同频率的信号x1,x2,x3。所得到的3个信号频率应与所产生的3个原始信号频率相同。
2. 制作GUI界面
(1) 首先,对显示界面进行排版,确定各部分内容的摆放位置;
(2) 对控制按钮加载程序进行控制;
(3) 改进程序,调整显示效果。
4.2 实验现象及数据分析
1、经过调试仿真(仿真图在模块介绍中),各模块的功能都得到实现。
2、GUI界面布局简洁明了,显示效果良好,让人一目了然。
3、在调试过程当中,对于滤波后的x1,x2,x3的时域波形图在起始的阶段的衰减比较严重,而且衰减的带宽也比较大。后来经过不断的摸索,我们终于找到了问题所在。我们调整了所设计的3个滤波器的衰减系数Rp和As,使其更加合理,最后显示效果也得到了改善。
5 结论与问题讨论
5.1 课程设计总结
本次课程设计历时一个星期,最终各部分要求都得到了较好的实现,并且在此基础上设计了GUI界面,使得显示界面更加的清晰明了,让人一目了然。
5.2 心得体会
本次课程设计主要是运用到MATLAB软件编程,由于之前有过MATLAB的实验进行练习,对于MATLAB软件编程有一定的基础,但是并不是很熟练,在本次设计过程当中还存在一个摸索和熟练的过程。通过本次课程设计,经过我和同伴的共同研究和探索,我们对MATLAB软件的使用有了更多的了解,使用起来也更加的熟练自如;此外,我们通过查找资料,自学掌握了基于MATLAB的IIR和FIR滤波器的设计方法。在设计过程当中,我们也遇到不少的问题和困惑,但是通过组内讨论还有请教同学,最终经过多次的尝试,这些问题都得到了较好的解决。
参考文献
1.《数字信号处理教程——MATLAB释义与实现》 陈怀琛编著 电子工业出版社
2.《辅助信号处理技术与应用 MATLAB 7》飞思科技产品研发中心编著 电子工业出版社
3.《自适应滤波器原理(第四版)》 西蒙·赫金编著 郑宝玉等译 电子工业出版社
附 录
close all
clf
t=-1:0.001:1;
n=1:256;
N=512;
fs=1000;
x1=cos(150*pi*t);
f1=n*fs/N;
figure(1);
subplot(3,1,1)
plot(x1);
title('x1时域波形');
xlabel('x1的时间');ylabel('x1的幅值');
x2=cos(320*pi*t);
subplot(3,1,2)
plot(x2);
title('x2的时域波形');
xlabel('x2的时间)');ylabel('x2的幅值');
axis([0,100,-1,1])
x3=cos(450*pi*t);
subplot(3,1,3)
plot(x3);
title('x3的时域波形');
xlabel('x3的时间');ylabel('x3的幅值');
axis([0,100,-1,1])
y1=fft(x1,512);
figure(2);
subplot(3,1,1)
plot(f1,abs(y1(1:256)));
title('x1的频域波形');
xlabel('x1的频率(Hz)');ylabel('x1的幅值');
axis([0,500,0,250])
y2=fft(x2,512);
subplot(3,1,2)
plot(f1,abs(y2(1:256)));
title('x2的频域波形');
xlabel('x2的频率(Hz)');ylabel('x2的幅值');
axis([0,500,0,250])
y3=fft(x3,512);
subplot(3,1,3)
plot(f1,abs(y3(1:256)));
title('x3的频域波形');
xlabel('x3的频率(Hz)');ylabel('x3的幅值');
axis([0,500,0,250])
%close all;
x=x1+x2+x3;
figure(3)
subplot(211);
plot(x(1:100));
title('三个信号叠加的时域波形');
y=fft(x,512);
subplot(212);
plot(f1,abs(y(1:256)));
title('三个信号叠加的频谱')
axis([0,600,0,250])
%close all
Wp=2*pi*75;Ws=2*pi*100;Rp=1;As=30;
[N,wc]=buttord(Wp,Ws,Rp,As,'s');
[b,a]=butter(N,wc,'s');
k=1:512;fk=0:1000/1024:1000;
wk=2*pi*fk;
Hk=freqs(b,a,wk);
figure(4);
plot(fk,abs(Hk));grid on;
xlabel('频率(Hz)');ylabel('幅度');
axis([0,200,0,1.1])
[Bz,Az]=bilinear(b,a,1000);
y=filter(Bz,Az,x);
Y1=fft(y,512);
figure(5);
subplot(211);
plot(y);
title('滤波后x1的时域波形');
axis([0,200,-1,1])
subplot(212);
plot(f1,abs(Y1(1:256)));
title('滤波后x1的频谱波形');
%close all
wp=2*pi*[140,200];
ws=2*pi*[120,230];
Rp=1;
As=30;
[N,wc]=buttord(wp,ws,Rp,As,'s');
[B1,A1]=butter(N,wc,'s');
k=0:511;
fk=0:1000/512:1000;
wk=2*pi*fk;
Hk=freqs(B1,A1,wk);
figure(6)
plot(fk,20*log10(abs(Hk)));
grid on
title('带通滤波器的频响2')
xlabel('频率(Hz)');
ylabel('幅度(dB)')
axis([100,400,-40,5])
[Bz1,Az1]=bilinear(B1,A1,1000);
y2=filter(Bz1,Az1,x);
Y2=fft(y2,512);
figure(7);
subplot(211);
plot(y2);
title('滤波后x2的时域波形');
axis([0,200,-1,1])
subplot(212);
plot(f1,abs(Y2(1:256)));
title('滤波后x2的频谱波形');
%%%%%%%%%%%%%%%%%%%%%%
wp=2*pi*[260,320];
ws=2*pi*[240,350];
Rp=1;
As=30;
[N,wc]=buttord(wp,ws,Rp,As,'s');
[B2,A2]=butter(N,wc,'s');
k=0:511;
fk=-1000:1000/512:1000;
wk=2*pi*fk;
Hk=freqs(B2,A2,wk);
figure(8)
plot(fk,20*log10(abs(Hk)));
grid on
title('带通滤波器的频响3')
xlabel('频率(Hz)');
ylabel('幅度(dB)')
axis([200,600,-40,5])
[Bz2,Az2]=bilinear(B2,A2,1000);
y3=filter(Bz2,Az2,x);
Y3=fft(y3,512);
figure(9);
subplot(211);
plot(y3);
title('滤波后x3的时域波形');
axis([0,200,-1,1])
subplot(212);
plot(f1,abs(Y3(1:256)));
title('滤波后x3的频谱波形');
展开阅读全文