第11讲和第12讲.docx
《第11讲和第12讲.docx》由会员分享,可在线阅读,更多相关《第11讲和第12讲.docx(39页珍藏版)》请在冰豆网上搜索。
第11讲和第12讲
目录
第十一讲信号处理工具箱主要功能库介绍2
1信号处理工具箱综述2
2基本信号处理概念6
3滤波、线性系统和变换7
第十二讲滤波器的设计和实现16
4..滤波器设计和实现16
第十一讲信号处理工具箱主要功能库介绍
1信号处理工具箱综述
信号处理工具箱支持广泛的数字信号处理运算,从波形产生到滤波器设计及实现,参数建模和谱分析。
该工具箱提供两种工具:
命令行函数和图形用户界面。
1.1命令行函数
以下处理可用命令行函数实现:
✓离散时间滤波器设计,分析和实现
✓模拟滤波器设计,分析和实现
✓线性系统变换
✓加窗
✓谱分析和倒谱分析
✓变换
✓统计信号处理
✓参数建模
✓线性预测
✓多速率信号处理
✓波形产生
1.2图形用户界面
以下处理可用图形用户界面实现:
✓滤波器设计和分析
✓窗设计和分析
✓信号绘制和分析,谱分析和滤波
1.3支持的数据类型
信号处理工具箱仅支持双精的输入数据。
如果输入单精浮点或整型数据,你不会接受到正确的结果,在大多数情况下会出错。
若滤波器设计工具箱与定点工具箱相结合,可使滤波及滤波器设计支持对单精度浮点和定点数据的处理。
1.4主要特征
Ø信号处理工具箱函数
信号处理工具箱函数是一些用M文件表示的数字信号处理算法,这些算法可以实现各种不同的信号处理任务。
Ø信号与系统
信号处理工具箱处理的对象是信号和系统。
工具箱中的函数主要是针对数字(或离散)信号和数字滤波器进行操作,而不是模拟(或连续)信号和滤波器,工具箱支持的主要滤波器类型是具有单输入、单输出的线性时不变数字滤波器。
可以用任一种模型来表示线性时不变系统(如传输函数,状态空间,零极点增益),也可以在不同的模型间进行变换。
Ø滤波器设计,分析和实现
该工具箱中的滤波器设计函数有FIR、IIR滤波器设计、分析和实现,滤波器阶数估计以及模拟滤波器原型设计和变换。
Ø线性系统变换
工具箱提供了许多变化函数,
Ø窗
包含许多常用窗函数以供滤波器设计使用。
Ø谱分析
用于估计功率谱密度、均方谱密度、伪随机谱,计算功率谱密度的平均功率,单边谱以及将直流分量移动到谱的中央。
Ø变换
各种变换和反变换如傅立叶、离散余弦、Goertzel和Hilbert变换
Ø统计信号处理
用于计算相关,互相关,协方差和自相关。
Ø参数建模
用于自回归参数建模、对频率响应进行拟合。
Ø线性预测
用于计算线性预测系数,在自相关和预测多项式、反馈系数、线谱频率之间进行转换。
Ø多速率信号处理
用于多速率信号处理,包括抽取、过采样、欠采样、重采样、内插。
Ø波形产生
用于产生许多类型的周期、非周期波形,包括锯齿波、狄拉克函数、高斯射频脉冲、脉冲序列、矩形波、sinc函数、方波、三角波和压控震荡器。
1.5交互工具
以下交互工具使信号处理工具箱功能更为强大
Ø滤波器设计与分析工具(命令fdatool)
提供更为全面的功能进行滤波器设计,FDATool可提供与其它MATLAB功能的无缝连接如其它的滤波器设计方法、量化功能、C代码产生功能以及滤波器设计工具箱的其它一些增强型滤波功能,如果已经安装了FilterDesignHDLCoder,就可以通过FDATool来产生HDL代码,即硬件描述语言。
用fdatool打开FDATool,用FDATool可设计滤波器、分析滤波器、修改现有的滤波器设计。
Ø滤波器可视化工具(命令fvtool)
滤波器可视化工具提供一图形环境来对滤波器响应图形进行观察、注释和打印。
b1=firpm(20,[00.40.51],[1100]);
b2=firpm(40,[00.40.51],[1100]);
fvtool(b1,1,b2,1);
Ø窗设计和分析工具(命令wintool)
窗设计和分析工具是用来设计和分析谱窗。
缺省状态打开的是64点的汉明窗。
Ø窗可视化工具(命令wvtool)
窗可视化工具提供一图形环境来对窗图形进行观察、注释和打印。
wvtool(hamming(64),hann(64),gausswin(64))
Ø信号处理工具(命令sptool)提高一丰富的图形环境来进行信号的观察、滤波器设计和谱分析。
SPTool是一图形用户界面,由它来统一管理四个GUI:
信号浏览器、滤波器设计器、FVTool、谱观察器。
通过这些GUI可以使用许多信号、滤波器、谱分析函数。
用命令sptool打开SPTool,如下图
用SPTool可以完成:
1)用信号浏览器完成对Signals列表中信号的分析
2)用滤波器设计器完成对滤波器的设计或编辑。
3)用FVTool完成对Filters列表中滤波器的滤波器响应的分析
4)将Filters列表中的滤波器作用于Signals列表中的信号
5)用谱观察器产生和分析信号频谱
1.6扩展性
MATLAB环境最为重要的特征之一就是可扩展性。
MATLAB允许产生自己的M文件来满足用于信号处理系统的研究、设计或工程化的数值计算的需求。
只要复制信号处理工具箱提供的M文件而后按照自己的需要进行修改,或者直接产生一个新函数来扩展信号处理工具箱的功能。
许多MATLAB工具箱可以扩展和增强信号处理工具箱的功能。
包括
1)滤波器设计工具箱FilterDesignToolbox,用于高级滤波器设计
2)信号处理模块集SignalProcessingBlockset,用于产生和分析信号处理模型
3)定点工具箱FixedPointToolbox用于定点运算
4)滤波器设计HDL代码生成器FilterDesignHDLCoder,用于产生和输出HDL代码。
5)LinkforCodeComposerStudio,用于对TI的DSP中嵌入式软件的操作。
2基本信号处理概念
2.1信号的表示法(信号的向量和数值数组表示法)
Ø数值数组:
它是一个由有序实数或复数组成的二维或多维的数据集合,数值数组可以表示信号处理中的基本数据对象。
Ø向量表示法:
MATLAB将通常的一维采样数据信号(sequence)表示为向量(vector)。
如:
x=[437-91];x=x';单信道采用列向量表示
矩阵中每一列为信号的一个通道,如下面所示的三通道信号:
y=[x2*xx/pi];多信道表示。
2.2波形产生:
时间向量和正弦曲线(周期、非周期波形,脉冲序列)
产生信号波形,首先要产生信号的时间范围,用一列向量表示,如:
t=(0:
0.001:
1)';
y=sin(2*pi*50*t)+2*sin(2*pi*120*t);
Ø一般信号序列
t=(0:
0.01:
0.99)';
y=[1;zeros(99,1)];%单位脉冲
y=ones(100,1);%单位阶跃
y=t;%斜坡函数
y=t.^2;
y=square(4*t);%方波信号
Ø多通道信号
用MATLAB的矩阵的操作可产生多信道信号,如
z=[tt.^2square(4*t)];
利用冒号和ones函数产生多通道的单位采样函数
a=[1zeros(1,5)]';
c=a(:
ones(1,3));
c=
111
000
000
000
000
000
Ø常见周期信号波形
峰值为
1的锯齿函数sawtooth,峰值为
1的方波函数square,用法跟sin函数相似。
(1)sawtooth函数的调用格式:
sawtooth(t)
sawtooth(t,width)width在0和1之间取值;
例子:
fs=10000;
t=0:
1/fs:
1.5;
x1=sawtooth(2*pi*50*t);
x2=sawtooth(2*pi*50*t,0.2);
x3=sawtooth(2*pi*50*t,0.5);
x4=sawtooth(2*pi*50*t,0.7);
plot(t,x1),axis([00.2-11])
axis([00.1-1.51.5])
figure
plot(t,x2,'k--',t,x3,'g-',t,x4,'r-.')
axis([00.1-1.51.5])
legend('width=0.2','width=0.5','width=0.7');
结果:
(2)square函数的调用格式:
x=square(t)
x=square(t,duty)duty为占空因数,即信号中正值的波形在一个周期中所占的百分比。
例子:
fs=10000;
t=0:
1/fs:
1.5;
x1=square(2*pi*50*t);
x2=square(2*pi*50*t,30);
x3=square(2*pi*50*t,50);
x4=square(2*pi*50*t,70);
plot(t,x1),axis([00.2-11])
axis([00.1-1.21.2])
figure
subplot(311)
plot(t,x2,'k-')
axis([00.1-1.21.2])
legend('duty=30');
subplot(312)
plot(t,x3,'g-')
axis([00.1-1.21.2])
legend('duty=50');
subplot(313)
plot(t,x4,'r-')
axis([00.1-1.21.2])
legend('duty=70');
结果:
Ø常见非周期信号波形
gauspuls函数:
高斯已调正弦脉冲
chirp函数:
线性调频信号
Ø脉冲串函数pulstran,下面的列子为:
产生一个由高斯已调正选脉冲组成的脉冲串,脉冲串的采样频率为50Hz,长度为10ms,脉冲重复频率为1kHz,D矩阵中的第一列为每个脉冲的延时,第二列为每个脉冲的衰减。
T=0:
1/50e3:
10e-3;%脉冲串长10ms,
D=[0:
1/1e3:
10e-3;0.8.^(0:
10)]';%定义脉冲间的延时
Y=pulstran(T,D,'gauspuls',10e3,0.5);%脉冲形状为高斯型,且采样速率为50KHz.
plot(T,Y)
ØSinc函数
Sinc函数是宽为
,高为1的矩形脉冲的反傅立叶变换,其表达式为:
x=linspace(-5,5);
y=sinc(x);
plot(x,y)
2.3对数据的操作(输入、输出数据)
产生数据可以通过直接输入、使用MATLAB函数和导入文件中的数据实现。
导入文件中的数据使用的命令有:
●load
●fopen、fread、fscanf
3滤波、线性系统和变换
3.1滤波实现和分析
此部分主要描述如何用filter函数对离散信号进行滤波,讨论如何用工具箱中的函数来分析滤波器特性,包括脉冲响应、幅度和相位响应、群延时和零极点位置。
1)卷积和滤波
滤波的数学基础是卷积。
函数conv可以完成一维的标准卷积,即两个向量的卷积。
conv的调用格式:
w=conv(u,v),若向量u中元素的个数为m,向量v中元素个数为n,则卷积得出的结果w中元素个数为m+n-1。
conv([111],[111])
ans=
12321
数字滤波器输出信号就是输入信号
与滤波器的脉冲响应
的卷积。
x=randn(5,1);%Arandomvectoroflength5
h=[1111]/4;%Length4averagingfilter
y=conv(h,x);
注意:
用conv2来实现二维数组的卷积。
2)滤波器和传输函数
通常,数字滤波器输出
的Z变换
与输入
的Z变换
之间关系为:
H(z)是滤波器的传输函数,b(i)、a(i)是滤波器系数。
滤波器的阶数为max(n,m)。
MATLAB用两个行向量来存储滤波器系数,一个向量代表分子,另一个向量代表分母。
滤波器的名称反映了系数向量a、b中元素的个数:
●当n=0(即b是一标量),滤波器是一无限冲激响应滤波器(IIR),全极点,递归或自动回归(AR)滤波器。
AR模型为:
●当m=0(即a是一标量),滤波器是一有限冲激响应滤波器(FIR),全零点,非递归或滑动平均(MA)滤波器。
MA模型为:
●如果n和m大于零,滤波器是一IIR,零极点,递归或自回归滑动平均(ARMA)滤波器。
ARMA模型为:
3)用filter函数滤波
由滤波器的传输函数可以得出对应的差分方程,假设a
(1)=1,则
滤波器的输出为
滤波器输出的递归表示,假设初始条件为零
MATLAB用函数filter来实现以上滤波运算,如求一简单的单极点滤波器(低通滤波器)
b=1;%滤波器传输函数的分子
a=[1-0.9];%滤波器传输函数的分母
y=filter(b,a,x);%滤波器输入信号的样值个数与输出样值个数相同
什么时候使用filter函数?
答:
当知道H(z)表达式时调用此函数。
3.2filter函数
filter是一维数字滤波器,其调用格式:
y=filter(b,a,x)x为输入序列,b和a分别为传输函数H(z)分子和分母的系数,如果a
(1)不等于1,则H(z)的分子分母必须同时同于a
(1),使得a
(1)等于1,如果a
(1)=0,则filter会返回一个错误。
[y,zf]=filter(b,a,x)
[y,zf]=filter(b,a,x,zi)
y=filter(b,a,x,zi,dim)dim为1时,对x矩阵中的每一列进行滤波,若为2,则对矩阵x的行进行滤波。
[...]=filter(b,a,x,[],dim)
Ø[y,zf]=filter(b,a,x,zi)
zi,系统初始条件,即过去的输入和输出值,一般情况为零。
zf,滤波器输出延时。
内存不够存储x=[x1;x2]时,可分段处理大数据
x1=randn(5000,1);%Generatetworandomdatasequences.
x2=randn(5000,1);
[y1,zf]=filter(b,a,x1);
y2=filter(b,a,x2,zf);%将第一段数据通过滤波器后的延时zf作为第二段数据的初%始条件
3.3冲激响应
数字滤波器的冲激响应是单位冲激序列的输出,MATLAB用以下命令来实现
imp=[1;zeros(49,1)];%产生单位冲激序列的最简单的方法
b=1;%滤波器传输函数的分子多项式的系数
a=[1-0.9];%滤波器传输函数的分母多项式的系数
h=filter(b,a,imp);%产生冲激响应
fvtool(b,a)%用滤波器可视化工具显示冲激响应
3.4频率响应
信号处理工具箱可以完成对模拟和数字滤波器的频域分析。
Ø数字域
函数freqz用FFT算法计算数字滤波器的z变换频率响应。
[h,w]=freqz(b,a,p)
返回数字滤波器的p点复频率响应
b,a为滤波器系数
p为计算频率响应的采样点数
h为复频率响应
w为实际的频率采用点(rad/s)
[b,a]=cheby1(12,0.5,200/500);%产生12阶的切比雪夫类型I滤波器
[h,f]=freqz(b,a,256,1000);%产生该滤波器的频率响应,采样频率为1000,采样点数为256,f为0到fs/2之间的采样点
注意1奈奎斯特频率是采样速率的一半。
2所有基本滤波器设计函数的截止频率都是被奈奎斯特频率归一化的频率。
3将归一化的频率转换成实际角频率时,只需给归一化值乘以π。
4将归一化的频率转换成实际频率时,只需给归一化值乘以奈奎斯特频率。
函数freqz没有输出变量表示在计算滤波器频率响应的同时画出其幅频响应和相频响
应,如
[b,a]=butter(9,400/1000);
freqz(b,a,256,2000)
或fvtool(b,a)
Ø模拟域
函数freqs可以计算由输入的系数向量b和a定义的模拟滤波器的频率响应。
该函数的操作与函数freqz相同
Ø幅度和相位
MATLAB提供函数抽取一频率响应向量h的幅值和相位。
函数abs求幅值,函数angle求相角(求得的相角在
之间)。
例如提取Butterworth滤波器的幅值和相角,由以下语句先设计出滤波器,而后在滤波器可视化工具中观察滤波器的幅值和相角。
[b,a]=butter(9,400/1000);
fvtool(b,a)
函数unwrap在频率分析中也是有用的,它通过加±360°的整数倍将相位展开,使它在整个360°相位不连续点上都是连续的。
如设计一个25阶的低通FIR滤波器
h=fir1(25,0.4);
[H,f]=freqz(h,1,512,2);%用函数freqz获得该滤波器的频率响应,然后画相位。
plot(f,angle(H)*180/pi);%乘180/pi的目的是将弧度转换为度
grid
由以上图很难从表示频率响应为零的180°跳变处区分出是否有360°的跳变。
用函数unwrap就可以删除360°的跳变
plot(f,unwrap(angle(H))*180/pi);
或者用函数phasez就可看到展开(解绕)的相位。
思考:
相位为什么会出现跳变?
因为用angle函数求出的相角在
之间,所以会出现跳变。
例如一个信号序列两个相邻值的实际相角为180°和184°时,但用angle求得的相角度为180°和-176°,出现跳变。
Ø延时
●滤波器的群延时是用来度量滤波器的平均延时的,它是频率的函数。
它被定义为滤波器相位响应的一阶导数,如果滤波器的复频率响应是
,那么群延时为
其中
是
的相角。
用函数grpdelay计算群延时
[gd,w]=grpdelay(b,a,n)
该函数返回了由b和a定义的数字滤波器的n点群延时,群延时对应的频率点为向量w。
●滤波器的相位延时是相位除以频率的负值
要想在同一个FVTool图形窗口中画出群延时和相位延时,输入以下语句:
[b,a]=butter(10,200/1000);
hFVT=fvtool(b,a,'Analysis','grpdelay');
set(hFVT,'NumberofPoints',128,'OverlayedAnalysis','phasedelay');
legend(hFVT)
Ø零极点分析
用函数zplane来绘制线性系统的零极点。
此函数的主要调用格式:
(1)zplane(z,p)z和p分别为零点组成的列向量和极点组成的列向量,如果z和p是二维数组,则zplabe函数用不同的颜色来绘制z和p中每一列的零极点。
(2)zplane(b,a)a和b分别为分母多项式和分子多项式的系数,且为行向量
例题:
一简单滤波器在-1/2有一零点,在
和
处有一对复极点,观察该滤波器的零、极点图:
zer=-0.5;
pol=0.9*exp(j*2*pi*[-0.30.3]');
zplane(zer,pol)%画零、极点图,
[b,a]=zp2tf(zer,pol,1);%将零、极点转换成传输函数的形式
fvtool(b,a)%打开滤波器可视化工具可进行其它方面的分析
Ø线性系统模型
信号处理工具箱提供了几种方法来表示线性时不变系统,这样可以灵活地选择最适合于应用系统的表示方法。
在数值稳定性的边界条件下,可以在这些表示方法间随意转换。
●离散时间系统模型
离散时间系统模型是针对于数字滤波器的表示方案。
MATLAB支持几种离散时间系统模型:
(1)传输函数
传输函数是数字滤波器的基本的z域表现形式,它把滤波器表示成两个多项式的比率,这是信号处理工具箱中的基本离散时间模型。
数字滤波器的差分方程的z变换就是传输函数
这里,常数b(i)和a(i)是滤波器系数,滤波器的阶数是n和m中的最大值。
在MAT
LAB中可将这些系数存成两个行向量(按惯例),一个放分子系数,一个放分母系数。
(2)零点-极点-增益
传输函数的零极点增益形式就是传输函数分解因式的形式,即
按惯例,MATLAB将多项式系数存入行向量中,将多项式的根存入列向量中。
因此,用零极点增益的形式,对应于传输函数分子、分母的零极点就被存在了列向量中。
因式分解后的传输函数增益k是一个标量。
函数poly和roots可在多项式表示与零极点增益表示之间进行转换。
如
%一滤波器传输函数系数
b=[234];
a=[1331];
%分别求出零极点
q=roots(b)
q=
-0.7500+1.1990i
-0.7500-1.1990i
p=roots(a)
p=
-1.0000
-1.0000+0.0000i
-1.0000-0.0000i
%零极点增益形式的标量常数
k=b
(1)/a
(1)
k=
2
%由零极点恢复多项式表示
bb=k*poly(q)
bb=
2.00003.00004.0000
aa=poly(p)
aa=
1.00003.00003.00001.0000
总结:
此部分主要内容为
(1)已知多项式的系数求多形式的跟;
(2)已知多项式的根求多项式的系数。
所需函数如下:
roots函数的调用格式:
r=roots(c)
ploy函数的调用格式:
p=poly(A)
p=poly(r)
(3)状态空间
数字滤波器或差分方程系统也可以表示为一组一阶差分方程,也就是以矩阵或状态空间的形式来表示一系统。
这里,u是输入,x是状态矢量,y是输出。
对于单通道系统(即只有一路输入),A是mxm矩阵,m是滤波器的阶数,B是列向量,C是行向量,D是标量。
状态空间表示法对于多通道系统尤为方便,此时的输入u和输出y变成了向量,且B,C,D变为矩阵。
而对于矩阵操作来说,MAT
LAB尤为方便。
将状态空间方程取Z变换并合并以上两式就可得到传输函数
部分分式展开(留数形式)
每个传输函数有对应的部分分式展开式或是留数形式,其表示形式为
r是部分分式系数即留数,k是假分式的系数,p为极点。
则:
length(p)=length(r)=length(a)-1
若m信号处理工具箱中的函数residuez可将传输函数和部分分式展开式之间进行转换,函数residuez将极点返回到列向量p中,极点所对应的留数返回到列向量r中,假分