实验3 信号的频域分析
一、 实验目的
1. 深入理解信号频谱的概念,掌握信号的频域分析方法。 2. 观察典型周期信号和非周期信号的频谱,掌握其频谱特性。
二、 实验原理
1. 连续周期信号的频谱分析
如果周期信号满足Dirichlet条件,就可以展开为傅里叶级数的形式,即
x(t)?k????cek??jk?0t , ck?1T0?T0x(t)e?jk?0tdt式中,T0表示基波周期,?0?2?/T0
为基波周期,?(?)表示任一个基波周期内的积分。上述两式定义为周期信号复
T0指数形式的傅里叶级数,系数Ck称为x(t)的傅里叶级数。周期信号的傅里叶级数还可以由三角函数的线性组合来表示,即
其中
第一式中同频率的正弦项和余弦项可以合并,从而得到三角函数形式的傅里叶级数,即
其中
可见,任何满足Dirichlet条件的周期信号都可以表示成一组谐波关系的复指数函数或三角函数的叠加。一般来说周期信号表示为傅里叶级数时需要无限多项才能完全逼近原信号,但是在实际应用中经常采用有限项级数来替代,所选项数越多就越逼近原信号。 2. 连续非周期信号的频谱分析
对于非周期连续时间信号,信号的傅里叶变换和傅里叶逆变换定义为
,
上述两式把信号的时域特性和频域特性联系起来,确定了非周期信号x(t)和频谱X(?)之间的关系。
采用MATLAB可以方便的求取非周期连续时间信号的傅里叶变换。 1)符号运算法
MATLAB的符号数学工具箱提供了直接求解傅里叶变换和反变换的函数,fourier函数和ifourier函数,基本调用格式为默认的时域变量为t,频域变量为?。
2)数值积分法
除了采用符号运算的方法外,我们还可以利用MATLAB的quad函数,采用数值积分的方法来进行连续信号的频谱分析。quad函数是一个用来计算数值积分的函数。利用quad函数可以计算非周期连续时间信号的频谱。quad函数的一般调用格式为:y = quad(fun,a,b),y = quad(fun,a,b,TOL,TRACE,p1,p2,…)
其中fun是指定被积函数,可以采用inline命令来创建,也可以通过传递函数句柄的形式来制定,a、b表示定积分的下限和上限,TOL表示允许的相对或绝对积分误差,TRACE表示以被积函数的点绘图形式来跟踪该函数的返回值,如果TOL和TRACE为空矩阵,则使用缺省值,“p1,p2,…”标识被积函数除时间t之外所需的其他额外输入参数。
3)数值近似法
我们还可以利用MATLAB的数值计算的方法近似计算连续时间傅里叶变换。傅里叶变换X(?)可以近似计算X(?)????,
??x(t)e?j?tdt?lim??0bk????x(k?)e+??j?k??
当x(t)为时限信号,且?足够小,则上式可以演变为X(?)???x(k?)e?j?k?
k?a而式中求和部分又可以表示成一个行向量和一列向量的乘积
?e?j?a??????j?((a?1)?)???b?e? X(?)??x(k?)e?j?k?=[x(a?),x((a+1)?),...,x(b?)]???...k?a???j?b???????e可以很方便地用MATLAB实现。 3. 离散周期时间信号的频域分析
基波周期为N的周期序列x(n)可以用N个成谐波关系的复指数序列的加权和表示,即
x(n)?k??N??ckejk(2?/N)n
将周期序列表示成上式的形式,称为离散傅里叶级数,而系数Ck则称为离散傅里叶系数。离散傅里叶系数Ck可由下式确定。
ck?1Nk??N??x(n)e?jk(2?/N)n
傅里叶系数Ck也称x(n)的频谱系数,而且可以证明Ck是以N为周期的离散频率序列。这说明了周期的离散时间函数对应于频域为周期的离散频率。
用周期N与傅里叶系数Ck的乘积来表示周期离散时间信号的频谱,即
X(k)?N?ck?k??N??x(n)e?jk(2?/N)n
X(k)可以利用MATLAB提供的函数fft用来计算,调用格式为
该函数返回X(k)一个周期内的值,其中x表示x(n)一个周期内的样本值。 4. 离散非周期时间的频域分析
非周期序列x(n)可以表示成一组复指数序列的连续和 其中
X(e)??x(n)e?j?n
j???+?x(n)?12???X(e2j?)ej?nd?
第二式称为x(n)的离散时间傅里叶变换,两式确立了非周期离散时间信号x(n)及其离散时间傅里叶变换X(ej?)之间的关系。X(ej?)是连续频率的函数,称为
频谱函数,且X(ej?)是周期的连续频率函数,其周期为2?。可见,非周期离散时间函数对应于频域中是一个连续的周期的频率函数。 对于有限长的离散时间序列,上式可以表示为
?e?jn1?????jn2?nN?e?j??j?nX(e)??x(n)e=[x(n1),x(n2),...,x(nN)]???
n?n1?...???jnN????e可以很方便地利用MATLAB实现。
三、 实验内容
1.已知x(t)是周期矩阵脉冲信号 (1)计算该信号的傅里叶变换 解:a0??AT,ak??2A?k?sin(),bk?0 k?Tk?1??该信号的傅里叶级数为:x(t)??AT??2A?k?2k?sin()*cos(t)
TTk?1k???(2)利用MATLAB绘出由前N次谐波合成的信号波形,观察随着N的变化合成信号波形的变化规律
解:设t0=?
t=-1.5:0.01:1.5;
N=input('N='); A=input('A='); t0=input('t0='); T=input('T=');
x=t0*A/T*ones(size(t)); for k=1:1:N
x=x+2*A/(k*pi)*sin(t0*k*pi/T)*cos(k*2*pi/T*t); end
plot(t,x);
方波的信号波形如下:
A=1 T=1 t0=?=0.5 N=5
1.210.80.60.40.20-0.2-1.5-1-0.500.511.5
A=1 T=1 t0=?=0.5 N=10
1.2
10.80.60.40.20-0.2-1.5-1-0.500.511.5