实验3 信号的频域分析
(综合型实验)
一、实验目的
1)深入理解信号频谱的概念,掌握信号的频域分析方法。 2)观察典型周期信号和非周期信号的频谱,掌握其频谱特性。 二、实验原理与方法
1. 连续周期信号的频谱分析
如果周期信号满足Dirichlet 条件,就可展开为傅里叶级数的形式,即
x (t)=
k =-∞
∑c e
k
+∞
jk ω0t
(1)
c k =
1-jk ω0t
x (t)edt (2) ⎰T 0T 0
其中T 0表示基波周期,ω0=2π/T 0为基波频率,(...)表示任一个基波周期内的积分。
T 0
⎰
上面两式为周期信号复指数形式的傅里叶级数,系数c k 成为x(t)的傅里叶系数。周期信号的傅里叶级数还可由三角函数的线性组合来表示,即
x (t)=a 0+∑a k cos k ω0t +∑b k sin k ω0t (3)
k =1
k =1
+∞+∞
其中a 0=
122
x (t)dt , a =x (t)coskωtdt , b =x (t)sinkω0tdt (4) k 0k ⎰⎰⎰T 0T T T 0T 00T 00
+∞
(3)式中同频率的正弦、余弦项合并可以得到三角函数形式的傅里叶级数,即
x (t)=A 0+∑A k cos(kω0t +θk ) (5)
k =1
其中A 0=a 0, A k =
θk =-arctan
b k
(6) a k
任何满足Dirichlet 条件的周期信号都可以表示成一组谐波关系的复指数函数或三角函数的叠加。周期信号表示为傅里叶级数时需要无限多项才能完全逼近原信号,但在实际应用中常采用有限项级数代替,所选级数项越多就越接近原信号。 2. 连续非周期信号的频谱分析
对于非周期连续时间信号,信号的傅里叶变换和傅里叶逆变换定义为
+∞
X (ω) =
-∞
⎰
x (t)e
-j ωt
dt (7)
1x (t)=
2π
+∞
-∞
⎰
X (ω)e j ωt d ω (8)
以上两式把信号的时频特性联系起来,确立了非周期信号x (t)和频谱X (ω) 之间的关系。 利用MATLAB 可以方便地求出非周期连续时间信号的傅里叶变换,几种常见方法如下: 1) 符号运算法
MATLAB 的符号数学工具箱提供了直接求解傅里叶变换和反变换的函数,fourier 函数和ifourier 函数,基本调用格式为
X =fourier (x)
默认的时域变量为t ,频域变量为ω。
x =ifourier (X)
例:求x (t)=e -2|t|的傅里叶变换,代码及运行结果如下: >> syms t
>> x=exp(-2*abs(t)); >> X=fourier(x) X =
4/(w^2 + 4)
所以傅里叶变换结果为X (ω) =
4
4+ω2
2)
也可利用int 函数直接根据式(7)求傅里叶变换。
数值积分法
除了采用符号运算的方法外,还可以采用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 (ω) 可以由(9)式近似计算
+∞
X (ω) =
-∞
⎰
x (t)e
-j ωt
dt =lim ∑x (k∆)e -j ωk ∆∆ (9)
∆→0
k =-∞
+∞
当x(t)为时限信号,且∆足够小,则(9)可以演变成
X (ω) =∆∑x (k∆)e -jk ω∆ (10)
k =a
b
(10)中求和部分又可以表示成一个行向量和一个列向量的乘积
∑x (k∆)e
k =a
b
-jk ω∆
⎡e -ja ∆ω⎤⎢-j (a +1) ∆ω⎥e ⎥ (11) =[x(a ∆), x((a+1) ∆),..., x(b∆)]⋅⎢⎢... ⎥⎢⎥-jb ∆ω⎢⎥⎣e ⎦
上式可以很方便地利用MATLAB 实现。
3. 离散周期信号的分频域分析
基波周期为N 的周期序列x (n)可以用N 个成谐波关系的复指数序列的加权和表示,即
x (n)=
k =
∑
c k e jk (2π/N)n (12)
这里k=表示求和仅需包括一个周期内的N 项,周期序列在一个周期内的求和与起点无关。将周期序列表示成式(12)的形式,称为离散傅里叶级数,而系数c k 则称为傅里叶系数。离散傅里叶系数c k 可由(13)式确定。
c k =
1
N
k =
∑
x (n)e-jk (2π/N)n (13)
傅里叶系数c k 也称为x (n)的频谱系数,而且可以证明c k 是以N 为周期的离散频率序列。这说明了周期的离散时间函数对应于频域为周期的离散频率。
这里,我们用周期N 与傅里叶系数c k 的乘积来表示周期离散时间信号的频谱,即
X (k)=N ⋅c k =
k =
∑
x (n)e-jk (2π/N)n (14)
X(k)可以利用MATLAB 提供的函数fft 用来计算,调用格式为 X=fft(x)
该函数返回X(k)一个周期内的值,其中x 表示x(n)一个周期内的样本值。
4. 离散非周期信号的频域分析
非周期序列x(n)可以表示成一组复指数序列的连续和
1
x (n)=
2π
2
⎰πX (e
j Ω
) e
j Ωn
d Ω (15)
其中X (e
j Ω
) =
n =-∞
∑x (n)e
+∞
-j Ωn
(16)
式(16)成为x(n)的离散时间傅里叶变换,式(15)和(16)确立了非周期离散时间信号x(n)及其离散时间傅里叶变换X (e) 之间的变换。X (e) 是连续频率Ω的函数,称为频谱函数,且X (e) 是周期的连续频率函数,其周期为2π。可见,非周期离散时间函数对应于频域中是一个连续的周期频率函数。
对于有限长的离散时间序列,(16)可以表示为
j Ω
j Ω
j Ω
X (e) =∑x (n)e-j Ωn
j Ω
n =n 1
n N
⎡e -jn 1Ω⎤⎢-jn 2Ω⎥e ⎥ (17)
=[x(n1), x(n2),..., x(nN )]⋅⎢
⎢... ⎥⎢⎥-jn N Ω⎢⎥⎣e ⎦
上式可以方便地利用MATLAB 实现。
三、实验内容
(1)已知x(t)是如下图所示的周期矩形脉冲信号。
x(t)
A
... ...
-T -c/2c/2T
1)计算该信号的傅里叶级数;
a 0=
τ
T
A ,a k =
2A τ
sin(kπ) ,b k =0 k πT
得傅里叶级数为:
2A τ+∞2πkt
x (t)=A +sin(kπ) ⋅∑cos()
T k πT k =1T
2)利用MATLAB 绘出由前N 次谐波合成的信号波形,观察随着N 的变化合成信号波形的变
化规律;
用MATLAB 编写代码如下:
N=input('N='); A=input('A='); c=input('c='); T=input('T='); t=-1.5:0.001:1.5; x=A*c*ones(size(t))/T; for n=1:N
x=x+(2*A/(n*pi))*sin(n*pi*c/T)*cos(2*pi*n*t/T); end plot(t,x);
xlabel('Time(sec)') title(['N=' num2str(n)])
τ
在命令窗口输入以下语句:
>> subplot(221) >> DFTthird_2_1 N=5 A=1 c=0.5 T=1
>> subplot(222) >> DFTthird_2_1 N=10 A=1 c=0.5 T=1
图形如下:
N=5
Time(sec)N=20
Time(sec)N=40
N=10
>> subplot(223) >> DFTthird_2_1 N=20 A=1 c=0.5 T=1
>> subplot(224) >> DFTthird_2_1 N=40 A=1 c=0.5 T=1
Time(sec)
Time(sec)
由以上四个图可知,随着N 的增大,合成信号的波形越来越接近原脉冲信号。 3) 利用MATLAB 绘出周期矩形脉冲信号的频谱,观察参数T 和τ变化时对频谱波形的影响。
可计算出傅里叶系数为:
⎧τ
A, k =0⎪⎪T
c k =⎨
A τ⎪sin(kπ), k ≠0⎪T ⎩k π
画出该信号频谱MATLAB 代码如下:
N=input('N='); c=input('c='); A=input('A='); T=input('T='); n1=-N:-1;
c1=(A./(n1*pi)).*sin(n1*pi*c/T); c0=c*A/T; n2=1:N;
c2=(A./(n2*pi)).*sin(n2*pi*c/T); cn=[c1 c0 c2]; n=-N:N; subplot(211);
stem(n,abs(cn),'filled' ); xlabel('\omega/\omega_0'); title('Magnitude of ck'); subplot(212);
stem(n,angle(cn),'filled' ); xlabel('\omega/\omega_0'); title('Phase of ck')
命令窗口: >> DFTthird_2_2 N=20 c=0.5 A=1 T=4 图形:
Magnitude of ck
ω/ω0
Phase of ck
ω/ω0
N=20,A=1,改变T 和τ时的波形变化:
c=0.5;T=8;c/T=0.0625
c=0.5;T=4;c/T=0.125
M a g h i t u d e o f c k
ω/ω0
M a g h i t u d e o f c k
ω/ω0
c=1;T=4;c/T=0.25
c=0.5;T=2;c/T=0.25
M a g h i t u d e o f c k
ω/ω0
M a g h i t u d e o f c k
ω/ω0
综合分析以上四个图像可得:频谱的波形与占空比不变,频谱波形不变,当
ττ
有关,对于T 或τ取不同的值时,当T T
τ
变大,频宽(第一个过零点频率)减小,过零点频率增多,谱T
线变得稀疏,各频率分量振幅增大。
观察实验结果,思考如下问题:
1—1. 什么是吉伯斯现象?产生吉伯斯现象的原因是什么?
答:
吉伯斯现象:将具有不连续点的周期函数(如矩形脉冲)进行傅里叶级数展开后选取有限项进行合成。在不连续点附近,部分和有起伏,其峰值最大值是不连续点处高度的1.09倍。不连续点处级数收敛于左右极限的平均值,t 愈接近不连续点时,为将误差减小至低于某一给定值,N 必须取得很大。随着N 的增大,部分和的起伏就向不连续点处压缩,但是对有限的N 值,起伏的峰值大小不变。
产生吉伯斯现象的原因:当一个信号通过某一系统时,如果这个信号是不连续时间函数,则因为一般的物理系统对信号的高频分量都有衰减作用,所以产生了吉伯斯现象。
1—2. 以周期矩形脉冲为例,说明周期信号的频谱有什么特点?
由结果可知:
1. 周期性矩形脉冲信号的频谱是离散的,其频谱仅存在于ω=ω0,2ω0,3ω0,... 等离
散值处,谱线间隔距离为固定值ω0,各次谐波的频率均为基频ω0的整数倍。
2. 随着谐波次数增高,谱线长度逐渐趋于收敛。
所以离散型、收敛性以及谐波性是周期信号的共同特点。
1—3. 周期矩形脉冲信号的有效频带宽度与信号的时域宽度之间有什么关系?
答:
根据B ω=2π/T (B ω为有效频宽,T 为脉冲的时域宽度),有效频带宽度与信号的
时域宽度成反比。
1—4. 随着矩形脉冲信号参数τ/T 的变化,其频谱结构(如频谱包络形状、过零点、谱线
间隔等)如何变化? 答:
随着
(2)已知x(t)是如下图所示的矩形脉冲信号。
x(t)
ττ
的变换,频谱包络形状不变。增大时,过零点增多,谱线间隔逐渐变大。 T T
ans =
(2*A*sin((c*w)/2))/w
1)求该信号的傅里叶变换; >> syms t c A
>> x=A*[heaviside(t+c/2)-heaviside(t-c/2)]; >> X=fourier(x); >> collect(X)
所以傅里叶变换为:
X (ω) =
2A
ω
sin(
ωτ
2
)
2)利用MATLAB 绘出矩形脉冲信号的频谱,观察矩形脉冲宽度τ变化时对频谱波形的影响; 代码:
A=input('A='); c=input('c='); syms t w
X=int(A*(heaviside(t+c/2)-heaviside(t-c/2))*exp(-j*w*t),t,-1,1) ezplot(abs(X),[-6*pi,6*pi]); grid on ;
xlabel('\omega'); ylabel('Magnitude' ); title('|X(\omega)|')
图形如下:
M a g n i t u d e
ω
令A=1,改变τ的大小:
c=0.25
M a g n i t u d e
c=0.5
M a g n i t u d e
ω
c=1
M a g n i t u d e
ω
c=2
M a g n i t u d e
ωω
τ增大时,频谱振幅增大,有效频宽减小。
syms t w c=input('c=');
x=(1/c).*(heaviside(t+c/2)-heaviside(t-c/2));
X=int(x*exp(-j*w*t),t,-c/2,c/2); subplot(211); ezplot(x,[-c,c]); xlabel('t' );
3). 让矩形脉冲的面积始终等于1,改变矩形脉冲宽度,观察矩形脉冲信号时域波形和频谱随矩形脉冲宽度的变化趋势。
title('x(t)'); subplot(212);
ezplot(abs(X),[-6*pi,6*pi]); grid on ;
xlabel('\omega'); ylabel('Magnitude' ); title('|X(w)|') axis tight
时域波形及频谱在不同脉冲宽度下的图像:
c=0.25
t
t
|X(w)|
c=0.5
M a g n i t u d e
M a g n i t u d
e
ω
c=2
x(t)
ω
c=1:
t
|X(w)|
t
|X(w)|
M a g n i t u d
e
M a g n i t u d e
分析以上图形得:随着矩形脉冲宽度值的增加,时域波形幅值减小,信号频带宽度减小。
观察实验结果,思考如下问题:
2—1. 比较矩形脉冲信号和周期矩形脉冲信号的频谱,两者之间有何异同? 答:
异:矩形脉冲信号的频谱是连续的,周期矩形脉冲信号的频谱是离散的。 同:有效频带宽度与脉冲宽度成反比
当脉冲宽度相同时,二者频谱的包络相同。
2—2. 根据矩形脉冲宽度τ变化时频谱的变化规律,说明信号的有效频带宽度与其时域宽度之间有什么关系?当脉冲宽度τ→0,脉冲的面积始终等于1,其频谱有何特点? 答:
信号的有效频带宽度与其时域宽度成反比。
由3)的四个图像可知,当τ减小时,信号频带宽度增大而最大幅值始终为1,当脉冲宽度 τ→0时,信号的频谱无限趋近于一条幅值为1的直线。
ωω
(3)已知x(n)是如图所示的周期方波序列。
x(n)
1
-N
-N10
N1N n
利用MATLAB 绘制出周期方波序列的频谱波形,改变参数N 和N 1的大小,观察频谱波形的变化趋势。
N=input('N='); N1=input('N1='); n=1:N;
x=[ones(1,N1) zeros(1,N-1-2*N1) ones(1,N1+1)]; X=fft(x);
stem(n,x,'filled' ); subplot(211) stem(n,x,'filled' );
xlabel('n' );
title(['x(n) N=' num2str(N) ' N1=' num2str(N1)]); subplot(212); stem(n,X,'filled' ); xlabel('k' );
title(['X(k) N=' num2str(N) ' N1=' num2str(N1)])
N=9,N1=2时图像如下:
n
X
(k) N=9 N1=2
k
改变N 和N 1的大小,频谱波形变化如下:
k
k
X (k) N=20 N1=4
X (k) N=40 N1=4
k
k
k
k
由上面六组图可得:N 1一定的时候,随着N 的增大,频谱的谱线逐渐变密,但包络线保持不变。
N 一定的时候,随着N 1的增大,频谱振幅增大,而且在以横轴为轴的两侧振动更为剧烈。
观察实验结果,思考如下问题:
3—1. 以周期方波序列为例,说明周期序列与连续周期信号的频谱有何异同。 答:
异:连续周期信号频谱随着时间变量t 的绝对值的增大,振幅逐渐收敛于零; 而周期序列频谱在一个周期内,由中间向两侧振幅逐渐增大。 同:二者的频谱都是离散的,具有谐波性。
3—2. 随着周期方波序列占空比的变化,其频谱如何随之变化? 答:
随着占空比的增大,谱线逐渐变得稀疏。
(4)已知一矩形脉冲序列。
⎧1,|n |≤N 1
x (n)=⎨
⎩0,|n |>N 1
利用MATLAB 绘制周期方波序列的频谱波形,改变矩形脉冲序列的宽度,观察频谱波形的变化趋势。
N1=input('N1='); w=-pi:0.01*pi:pi; n=-N1:N1; x=ones(size(n)); X=x*exp(-j*n'*w); subplot(211); stem(n,x,'filled' );
xlabel('n' ); title('x(n)'); subplot(212); plot(w/pi,abs(X)); xlabel('\Omega/\pi'); title('|X(e^j^\Omega)|');
取不同的N1值:
>> DFTthird_2_5 N1=4
>> DFTthird_2_5 N1=8
n
j Ω
n |X(ej Ω)|
Ω/π
Ω/π
>> DFTthird_2_5 N1=16
n |X(ej Ω)|
Ω/π
随着N1增大,频带宽度减小,振幅增大。
观察实验结果,思考如下问题:
4—1. 随着矩形脉冲序列宽度的变化,其频谱如何随之变化?其宽度与频谱的有效频带宽度有何关系? 答:
随着矩形脉冲序列宽度增大,频谱有效频带宽度逐渐减小,频谱振幅逐渐增大。 矩形脉冲序列宽度与频谱有效频带宽度成反比。
四.实验收获体会
这次实验分别对连续周期信号、连续非周期信号、离散周期时间信号、离散非周期时间信号进行了频谱分析,采用MATLAB 对信号进行傅里叶变换,加深了对信号频谱的理解,更熟练地掌握了信号的频域分析方法。
实验3 信号的频域分析
(综合型实验)
一、实验目的
1)深入理解信号频谱的概念,掌握信号的频域分析方法。 2)观察典型周期信号和非周期信号的频谱,掌握其频谱特性。 二、实验原理与方法
1. 连续周期信号的频谱分析
如果周期信号满足Dirichlet 条件,就可展开为傅里叶级数的形式,即
x (t)=
k =-∞
∑c e
k
+∞
jk ω0t
(1)
c k =
1-jk ω0t
x (t)edt (2) ⎰T 0T 0
其中T 0表示基波周期,ω0=2π/T 0为基波频率,(...)表示任一个基波周期内的积分。
T 0
⎰
上面两式为周期信号复指数形式的傅里叶级数,系数c k 成为x(t)的傅里叶系数。周期信号的傅里叶级数还可由三角函数的线性组合来表示,即
x (t)=a 0+∑a k cos k ω0t +∑b k sin k ω0t (3)
k =1
k =1
+∞+∞
其中a 0=
122
x (t)dt , a =x (t)coskωtdt , b =x (t)sinkω0tdt (4) k 0k ⎰⎰⎰T 0T T T 0T 00T 00
+∞
(3)式中同频率的正弦、余弦项合并可以得到三角函数形式的傅里叶级数,即
x (t)=A 0+∑A k cos(kω0t +θk ) (5)
k =1
其中A 0=a 0, A k =
θk =-arctan
b k
(6) a k
任何满足Dirichlet 条件的周期信号都可以表示成一组谐波关系的复指数函数或三角函数的叠加。周期信号表示为傅里叶级数时需要无限多项才能完全逼近原信号,但在实际应用中常采用有限项级数代替,所选级数项越多就越接近原信号。 2. 连续非周期信号的频谱分析
对于非周期连续时间信号,信号的傅里叶变换和傅里叶逆变换定义为
+∞
X (ω) =
-∞
⎰
x (t)e
-j ωt
dt (7)
1x (t)=
2π
+∞
-∞
⎰
X (ω)e j ωt d ω (8)
以上两式把信号的时频特性联系起来,确立了非周期信号x (t)和频谱X (ω) 之间的关系。 利用MATLAB 可以方便地求出非周期连续时间信号的傅里叶变换,几种常见方法如下: 1) 符号运算法
MATLAB 的符号数学工具箱提供了直接求解傅里叶变换和反变换的函数,fourier 函数和ifourier 函数,基本调用格式为
X =fourier (x)
默认的时域变量为t ,频域变量为ω。
x =ifourier (X)
例:求x (t)=e -2|t|的傅里叶变换,代码及运行结果如下: >> syms t
>> x=exp(-2*abs(t)); >> X=fourier(x) X =
4/(w^2 + 4)
所以傅里叶变换结果为X (ω) =
4
4+ω2
2)
也可利用int 函数直接根据式(7)求傅里叶变换。
数值积分法
除了采用符号运算的方法外,还可以采用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 (ω) 可以由(9)式近似计算
+∞
X (ω) =
-∞
⎰
x (t)e
-j ωt
dt =lim ∑x (k∆)e -j ωk ∆∆ (9)
∆→0
k =-∞
+∞
当x(t)为时限信号,且∆足够小,则(9)可以演变成
X (ω) =∆∑x (k∆)e -jk ω∆ (10)
k =a
b
(10)中求和部分又可以表示成一个行向量和一个列向量的乘积
∑x (k∆)e
k =a
b
-jk ω∆
⎡e -ja ∆ω⎤⎢-j (a +1) ∆ω⎥e ⎥ (11) =[x(a ∆), x((a+1) ∆),..., x(b∆)]⋅⎢⎢... ⎥⎢⎥-jb ∆ω⎢⎥⎣e ⎦
上式可以很方便地利用MATLAB 实现。
3. 离散周期信号的分频域分析
基波周期为N 的周期序列x (n)可以用N 个成谐波关系的复指数序列的加权和表示,即
x (n)=
k =
∑
c k e jk (2π/N)n (12)
这里k=表示求和仅需包括一个周期内的N 项,周期序列在一个周期内的求和与起点无关。将周期序列表示成式(12)的形式,称为离散傅里叶级数,而系数c k 则称为傅里叶系数。离散傅里叶系数c k 可由(13)式确定。
c k =
1
N
k =
∑
x (n)e-jk (2π/N)n (13)
傅里叶系数c k 也称为x (n)的频谱系数,而且可以证明c k 是以N 为周期的离散频率序列。这说明了周期的离散时间函数对应于频域为周期的离散频率。
这里,我们用周期N 与傅里叶系数c k 的乘积来表示周期离散时间信号的频谱,即
X (k)=N ⋅c k =
k =
∑
x (n)e-jk (2π/N)n (14)
X(k)可以利用MATLAB 提供的函数fft 用来计算,调用格式为 X=fft(x)
该函数返回X(k)一个周期内的值,其中x 表示x(n)一个周期内的样本值。
4. 离散非周期信号的频域分析
非周期序列x(n)可以表示成一组复指数序列的连续和
1
x (n)=
2π
2
⎰πX (e
j Ω
) e
j Ωn
d Ω (15)
其中X (e
j Ω
) =
n =-∞
∑x (n)e
+∞
-j Ωn
(16)
式(16)成为x(n)的离散时间傅里叶变换,式(15)和(16)确立了非周期离散时间信号x(n)及其离散时间傅里叶变换X (e) 之间的变换。X (e) 是连续频率Ω的函数,称为频谱函数,且X (e) 是周期的连续频率函数,其周期为2π。可见,非周期离散时间函数对应于频域中是一个连续的周期频率函数。
对于有限长的离散时间序列,(16)可以表示为
j Ω
j Ω
j Ω
X (e) =∑x (n)e-j Ωn
j Ω
n =n 1
n N
⎡e -jn 1Ω⎤⎢-jn 2Ω⎥e ⎥ (17)
=[x(n1), x(n2),..., x(nN )]⋅⎢
⎢... ⎥⎢⎥-jn N Ω⎢⎥⎣e ⎦
上式可以方便地利用MATLAB 实现。
三、实验内容
(1)已知x(t)是如下图所示的周期矩形脉冲信号。
x(t)
A
... ...
-T -c/2c/2T
1)计算该信号的傅里叶级数;
a 0=
τ
T
A ,a k =
2A τ
sin(kπ) ,b k =0 k πT
得傅里叶级数为:
2A τ+∞2πkt
x (t)=A +sin(kπ) ⋅∑cos()
T k πT k =1T
2)利用MATLAB 绘出由前N 次谐波合成的信号波形,观察随着N 的变化合成信号波形的变
化规律;
用MATLAB 编写代码如下:
N=input('N='); A=input('A='); c=input('c='); T=input('T='); t=-1.5:0.001:1.5; x=A*c*ones(size(t))/T; for n=1:N
x=x+(2*A/(n*pi))*sin(n*pi*c/T)*cos(2*pi*n*t/T); end plot(t,x);
xlabel('Time(sec)') title(['N=' num2str(n)])
τ
在命令窗口输入以下语句:
>> subplot(221) >> DFTthird_2_1 N=5 A=1 c=0.5 T=1
>> subplot(222) >> DFTthird_2_1 N=10 A=1 c=0.5 T=1
图形如下:
N=5
Time(sec)N=20
Time(sec)N=40
N=10
>> subplot(223) >> DFTthird_2_1 N=20 A=1 c=0.5 T=1
>> subplot(224) >> DFTthird_2_1 N=40 A=1 c=0.5 T=1
Time(sec)
Time(sec)
由以上四个图可知,随着N 的增大,合成信号的波形越来越接近原脉冲信号。 3) 利用MATLAB 绘出周期矩形脉冲信号的频谱,观察参数T 和τ变化时对频谱波形的影响。
可计算出傅里叶系数为:
⎧τ
A, k =0⎪⎪T
c k =⎨
A τ⎪sin(kπ), k ≠0⎪T ⎩k π
画出该信号频谱MATLAB 代码如下:
N=input('N='); c=input('c='); A=input('A='); T=input('T='); n1=-N:-1;
c1=(A./(n1*pi)).*sin(n1*pi*c/T); c0=c*A/T; n2=1:N;
c2=(A./(n2*pi)).*sin(n2*pi*c/T); cn=[c1 c0 c2]; n=-N:N; subplot(211);
stem(n,abs(cn),'filled' ); xlabel('\omega/\omega_0'); title('Magnitude of ck'); subplot(212);
stem(n,angle(cn),'filled' ); xlabel('\omega/\omega_0'); title('Phase of ck')
命令窗口: >> DFTthird_2_2 N=20 c=0.5 A=1 T=4 图形:
Magnitude of ck
ω/ω0
Phase of ck
ω/ω0
N=20,A=1,改变T 和τ时的波形变化:
c=0.5;T=8;c/T=0.0625
c=0.5;T=4;c/T=0.125
M a g h i t u d e o f c k
ω/ω0
M a g h i t u d e o f c k
ω/ω0
c=1;T=4;c/T=0.25
c=0.5;T=2;c/T=0.25
M a g h i t u d e o f c k
ω/ω0
M a g h i t u d e o f c k
ω/ω0
综合分析以上四个图像可得:频谱的波形与占空比不变,频谱波形不变,当
ττ
有关,对于T 或τ取不同的值时,当T T
τ
变大,频宽(第一个过零点频率)减小,过零点频率增多,谱T
线变得稀疏,各频率分量振幅增大。
观察实验结果,思考如下问题:
1—1. 什么是吉伯斯现象?产生吉伯斯现象的原因是什么?
答:
吉伯斯现象:将具有不连续点的周期函数(如矩形脉冲)进行傅里叶级数展开后选取有限项进行合成。在不连续点附近,部分和有起伏,其峰值最大值是不连续点处高度的1.09倍。不连续点处级数收敛于左右极限的平均值,t 愈接近不连续点时,为将误差减小至低于某一给定值,N 必须取得很大。随着N 的增大,部分和的起伏就向不连续点处压缩,但是对有限的N 值,起伏的峰值大小不变。
产生吉伯斯现象的原因:当一个信号通过某一系统时,如果这个信号是不连续时间函数,则因为一般的物理系统对信号的高频分量都有衰减作用,所以产生了吉伯斯现象。
1—2. 以周期矩形脉冲为例,说明周期信号的频谱有什么特点?
由结果可知:
1. 周期性矩形脉冲信号的频谱是离散的,其频谱仅存在于ω=ω0,2ω0,3ω0,... 等离
散值处,谱线间隔距离为固定值ω0,各次谐波的频率均为基频ω0的整数倍。
2. 随着谐波次数增高,谱线长度逐渐趋于收敛。
所以离散型、收敛性以及谐波性是周期信号的共同特点。
1—3. 周期矩形脉冲信号的有效频带宽度与信号的时域宽度之间有什么关系?
答:
根据B ω=2π/T (B ω为有效频宽,T 为脉冲的时域宽度),有效频带宽度与信号的
时域宽度成反比。
1—4. 随着矩形脉冲信号参数τ/T 的变化,其频谱结构(如频谱包络形状、过零点、谱线
间隔等)如何变化? 答:
随着
(2)已知x(t)是如下图所示的矩形脉冲信号。
x(t)
ττ
的变换,频谱包络形状不变。增大时,过零点增多,谱线间隔逐渐变大。 T T
ans =
(2*A*sin((c*w)/2))/w
1)求该信号的傅里叶变换; >> syms t c A
>> x=A*[heaviside(t+c/2)-heaviside(t-c/2)]; >> X=fourier(x); >> collect(X)
所以傅里叶变换为:
X (ω) =
2A
ω
sin(
ωτ
2
)
2)利用MATLAB 绘出矩形脉冲信号的频谱,观察矩形脉冲宽度τ变化时对频谱波形的影响; 代码:
A=input('A='); c=input('c='); syms t w
X=int(A*(heaviside(t+c/2)-heaviside(t-c/2))*exp(-j*w*t),t,-1,1) ezplot(abs(X),[-6*pi,6*pi]); grid on ;
xlabel('\omega'); ylabel('Magnitude' ); title('|X(\omega)|')
图形如下:
M a g n i t u d e
ω
令A=1,改变τ的大小:
c=0.25
M a g n i t u d e
c=0.5
M a g n i t u d e
ω
c=1
M a g n i t u d e
ω
c=2
M a g n i t u d e
ωω
τ增大时,频谱振幅增大,有效频宽减小。
syms t w c=input('c=');
x=(1/c).*(heaviside(t+c/2)-heaviside(t-c/2));
X=int(x*exp(-j*w*t),t,-c/2,c/2); subplot(211); ezplot(x,[-c,c]); xlabel('t' );
3). 让矩形脉冲的面积始终等于1,改变矩形脉冲宽度,观察矩形脉冲信号时域波形和频谱随矩形脉冲宽度的变化趋势。
title('x(t)'); subplot(212);
ezplot(abs(X),[-6*pi,6*pi]); grid on ;
xlabel('\omega'); ylabel('Magnitude' ); title('|X(w)|') axis tight
时域波形及频谱在不同脉冲宽度下的图像:
c=0.25
t
t
|X(w)|
c=0.5
M a g n i t u d e
M a g n i t u d
e
ω
c=2
x(t)
ω
c=1:
t
|X(w)|
t
|X(w)|
M a g n i t u d
e
M a g n i t u d e
分析以上图形得:随着矩形脉冲宽度值的增加,时域波形幅值减小,信号频带宽度减小。
观察实验结果,思考如下问题:
2—1. 比较矩形脉冲信号和周期矩形脉冲信号的频谱,两者之间有何异同? 答:
异:矩形脉冲信号的频谱是连续的,周期矩形脉冲信号的频谱是离散的。 同:有效频带宽度与脉冲宽度成反比
当脉冲宽度相同时,二者频谱的包络相同。
2—2. 根据矩形脉冲宽度τ变化时频谱的变化规律,说明信号的有效频带宽度与其时域宽度之间有什么关系?当脉冲宽度τ→0,脉冲的面积始终等于1,其频谱有何特点? 答:
信号的有效频带宽度与其时域宽度成反比。
由3)的四个图像可知,当τ减小时,信号频带宽度增大而最大幅值始终为1,当脉冲宽度 τ→0时,信号的频谱无限趋近于一条幅值为1的直线。
ωω
(3)已知x(n)是如图所示的周期方波序列。
x(n)
1
-N
-N10
N1N n
利用MATLAB 绘制出周期方波序列的频谱波形,改变参数N 和N 1的大小,观察频谱波形的变化趋势。
N=input('N='); N1=input('N1='); n=1:N;
x=[ones(1,N1) zeros(1,N-1-2*N1) ones(1,N1+1)]; X=fft(x);
stem(n,x,'filled' ); subplot(211) stem(n,x,'filled' );
xlabel('n' );
title(['x(n) N=' num2str(N) ' N1=' num2str(N1)]); subplot(212); stem(n,X,'filled' ); xlabel('k' );
title(['X(k) N=' num2str(N) ' N1=' num2str(N1)])
N=9,N1=2时图像如下:
n
X
(k) N=9 N1=2
k
改变N 和N 1的大小,频谱波形变化如下:
k
k
X (k) N=20 N1=4
X (k) N=40 N1=4
k
k
k
k
由上面六组图可得:N 1一定的时候,随着N 的增大,频谱的谱线逐渐变密,但包络线保持不变。
N 一定的时候,随着N 1的增大,频谱振幅增大,而且在以横轴为轴的两侧振动更为剧烈。
观察实验结果,思考如下问题:
3—1. 以周期方波序列为例,说明周期序列与连续周期信号的频谱有何异同。 答:
异:连续周期信号频谱随着时间变量t 的绝对值的增大,振幅逐渐收敛于零; 而周期序列频谱在一个周期内,由中间向两侧振幅逐渐增大。 同:二者的频谱都是离散的,具有谐波性。
3—2. 随着周期方波序列占空比的变化,其频谱如何随之变化? 答:
随着占空比的增大,谱线逐渐变得稀疏。
(4)已知一矩形脉冲序列。
⎧1,|n |≤N 1
x (n)=⎨
⎩0,|n |>N 1
利用MATLAB 绘制周期方波序列的频谱波形,改变矩形脉冲序列的宽度,观察频谱波形的变化趋势。
N1=input('N1='); w=-pi:0.01*pi:pi; n=-N1:N1; x=ones(size(n)); X=x*exp(-j*n'*w); subplot(211); stem(n,x,'filled' );
xlabel('n' ); title('x(n)'); subplot(212); plot(w/pi,abs(X)); xlabel('\Omega/\pi'); title('|X(e^j^\Omega)|');
取不同的N1值:
>> DFTthird_2_5 N1=4
>> DFTthird_2_5 N1=8
n
j Ω
n |X(ej Ω)|
Ω/π
Ω/π
>> DFTthird_2_5 N1=16
n |X(ej Ω)|
Ω/π
随着N1增大,频带宽度减小,振幅增大。
观察实验结果,思考如下问题:
4—1. 随着矩形脉冲序列宽度的变化,其频谱如何随之变化?其宽度与频谱的有效频带宽度有何关系? 答:
随着矩形脉冲序列宽度增大,频谱有效频带宽度逐渐减小,频谱振幅逐渐增大。 矩形脉冲序列宽度与频谱有效频带宽度成反比。
四.实验收获体会
这次实验分别对连续周期信号、连续非周期信号、离散周期时间信号、离散非周期时间信号进行了频谱分析,采用MATLAB 对信号进行傅里叶变换,加深了对信号频谱的理解,更熟练地掌握了信号的频域分析方法。