周期信号频域分析.docx
- 文档编号:26664749
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:13
- 大小:21.13KB
周期信号频域分析.docx
《周期信号频域分析.docx》由会员分享,可在线阅读,更多相关《周期信号频域分析.docx(13页珍藏版)》请在冰豆网上搜索。
周期信号频域分析
周期信号频域分析
(3-5)
连续时间周期信号的傅立叶综合
任何满足狄里赫利条件的周期信号,可以表示成式(3-1)或(3-5)的和式形式,式(3-1)或(3-5)成为连续时间周期信号(CTFS)综合公式。
一般说来,傅立叶级数系数有无限个非零值,即任何具有有限个间断点的周期信号都一定有一个无限项非零系数的傅立叶级数表示。
但对于数值计算来说,这是无法实现的。
在实际应用中,可以用有限项傅立叶级数求和来逼近。
即:
(3-7)
当值取得较大时,上式就是原周期信号的一个很好近似。
式(3-7)常称做的截断傅立叶级数表示。
MATLAB的符号积分函数int()可以用来求解连续时间周期信号的截断傅立叶级数及傅立叶表示。
求积函数int()的具体使用格式如下:
a.intf=int(f,v);给出符号表达式f对指定变量v的(不带积分常数)不定积分;
b.intf=int(f,v,a,b);给出符号表达式f对指定变量v的定积分;
1、利用MATLAB实现周期信号的傅立叶级数分解与综合
(1)利用MATLAB求解周期矩形脉冲傅立叶级数,并绘制出各次谐波叠加的傅立叶综合波形图。
周期矩形脉冲为,式中。
采用三角形式傅立叶级数分解与综合形式,用式(3-2)~(3-4)求出傅立叶级数分解系数,运用MATLAB的符号运算功能,用式(3-7)实现信号的综合,谐波的阶数。
(a)实现流程
利用MATLAB实现上述分析过程的流程如下:
∙编写子函数x=time_fun_x(t),用符号表达式表示出周期信号在第一个周期内的符号表达式,并赋值返回给符号变量x;
∙编写子函数y=time_fun_e(t),求出该周期信号在绘图区间内的信号样值,并赋值给返回变量y;
∙编写求解信号傅立叶系数及绘制合成波形图的通用CTFShchsym.m,该函数流程如下:
1.调用函数time_fun_x(t),获取周期信号的符号表达式;
2.求出信号的傅立叶系数;
3.求出各次谐波;
4.绘制各次谐波叠加波形图;
5.调用函数time_fun_e(t),绘制原信号波形图。
(b)MATLAB算法提示及说明
∙采用符号积分int求一个周期内时间函数的三角级数展开系数:
,,,即计算式(3-2)~(3-4)的值;
∙用循环语句for…end求出三角级数展开系数,的数值,分别为A_sym,B_sym;
∙用disp()语句输出三角级数展开系数A_sym,B_sym;
∙用傅立叶三角级数展开式(3-7)合成连续时间信号;
∙化简表达式,据函数奇偶性可知,若为奇函数,则;若为偶函数,则。
(c)源程序
编写函数文件CTFShchsym.m,这是一个计算连续时间周期信号的三角级数前6次展开系数,再用这6次谐波合成原连续时间周期信号的程序,如下所示。
function[A_sym,B_sym]=CTFShchsym
%采用符号计算求一个周期内连续时间函数f的三角级数展开系数,再用这些
% 展开系数合成连续时间函数f.傅立叶级数
% 函数的输入输出都是数值量
% Nf=6 谐波的阶数
% Nn 输出数据的准确位数
% A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
% B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin项展开系数
% tao=1 tao/T=0.2
symst n k x
T=5;tao=0.2*T;a=0.5;
ifnargin<4;Nf=6;end
ifnargin<5;Nn=32;end
x=time_fun_x(t);
A0=int(x,t,-a,T-a)/T; %求出三角函数展开系数A0
As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a); %求出三角函数展开系数As
Bs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a); %求出三角函数展开系数Bs
A_sym
(1)=double(vpa(A0,Nn)); %获取串数组A0所对应的ASC2码数值数组
fork=1:
Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); %获取串数组A所对应的ASC2码数值数组
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); %获取串数组B所对应的ASC2码数值数组
end
ifnargout==0
c=A_sym;disp(c) %输出c为三角级数展开系数:
第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
d=B_sym;disp(d) %输出d为三角级数展开系数:
第2,3,4,...元素依次是1,2,3...次谐波sin项展开系数
t=-8*a:
0.01:
T-a;
f1=c
(1)+c
(2).*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5);; %基波
f2=c(3).*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5);; %2次谐波
f3=c(4).*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5); %3次谐波
f4=c(5).*cos(2*pi*4*t/5)+0.*sin(2*pi*4*t/5);; %4次谐波
f5=c(6).*cos(2*pi*6*t/5)+0.*sin(2*pi*6*t/5); %6次谐波
f6=f1+f2; %基波+2次谐波
f7=f6+f3; %基波+2次谐波+3次谐波
f8=f7+f4+f5; %基波+2次谐波+3次谐波+4次谐波+6次谐波
subplot(2,2,1)
plot(t,f1),holdon
y=time_fun_e(t) %调用连续时间函数-周期矩形脉冲
plot(t,y,'r:
')
title('周期矩形波的形成—基波+直流')
axis([-4,4.5,-0.5,1.5])
subplot(2,2,2)
plot(t,f6),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('周期矩形波的形成—基波+2次谐波')
axis([-4,4.5,-0.5,1.5])
subplot(2,2,3)
plot(t,f7),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波')
axis([-4,4.5,-0.5,1.5])
subplot(2,2,4)
plot(t,f8),holdon
y=time_fun_e(t)
plot(t,y,'r:
')
title('基波+2次谐波+3次谐波+4次谐波+6次谐波')
axis([-4,4.5,-0.5,1.5])
end
%-------------------------------------------
functionx=time_fun_x(t)
%该函数是CTFShchsym.m的子函数。
它由符号变量和表达式写成。
h=1;
x1=sym('Heaviside(t+0.5)')*h;
x=x1-sym('Heaviside(t-0.5)')*h;
%-------------------------------------------
functiony=time_fun_e(t)
%该函数是CTFShchsym.m的子函它由符号函数和表达式写成
a=0.5;T=5;h=1;tao=0.2*T;t=-8*a:
0.01:
T-a;
e1=1/2+1/2.*sign(t+tao/2);
e2=1/2+1/2.*sign(t-tao/2);
y=h.*(e1-e2); %连续时间函数-周期矩形脉冲
(d)程序运行结果
在MATLAB命令窗口键入CTFShchsym,并按回车键,即可绘制出周期矩形波形各次谐波合成波形
执行如下命令就可以得到三角级数展开系数:
[A_sym,B_sym]=CTFShchsym
结果为
A_sym=
0.2000 0.3742 0.3027 0.2018 0.0935 0.0000 -0.0624
B_sym=
0 0 0 0 0 0 0
(2)实验内容
要求:
(a)首先,推导出求解,,的公式,计算出前10次系数;
(b)利用MATLAB求解,,的值,其中,求解前10次系数,并给出利用这些系数合成的信号波形。
三、周期信号频谱分析
1、周期信号频谱
对周期为的信号进行傅立叶级数展开可得到 .如果求出和,根据以下两式可以画出周期信号的幅度谱和相位谱。
2、MATLAB实现
由上述分析可知,只要求出了周期信号的傅立叶级数幅度和相位,就可以根据和随频率的变化关系画出幅度谱和相位谱。
现仍以周期矩形脉冲为,()为例,来说明如何用MATLAB绘制周期信号的频谱图,并对周期信号的频谱特性进行分析。
由于绘制频谱图的前提是必须先求出周期信号的傅立叶级数系数,因此只需对上述给出的求周期信号傅立叶级数的函数CTFShchsym.m进行适当修改,即可编写出绘制周期信号频谱的通用函数。
需注意的是,由于周期信号的频谱是离散的,故在绘制频谱时,采用的是stem命令而不是plot命令,下面给出实现上述通用程序CTFStpshsym.m的过程。
(1)实现流程
此处采用三角形式傅立叶级数分解,求出分解系数和,再利用式(3-8)求出傅立叶复指数系数,画出的幅度谱。
谐波的阶数可任意指定,此处指定。
(a)实现流程如下:
∙编写子函数y=time_fun_s(t),用符号表达式表示出周期信号在第一个周期内的符号表达式,并赋值返回给符号变量y;
∙编写子函数x=time_fun_e(t),求出该周期信号在绘图区间内的信号样值,并赋值给返回变量x;
∙编写求解信号傅立叶复指数系数的通用函数,该函数流程如下:
1.调用函数time_fun_s(t),获取周期信号的符号表达式;
2.求出信号的三角形式的傅立叶系数和;
3.求出信号的傅立复指数系数;
4.绘制的幅度频谱图;
5.调用函数time_fun_e(t)绘制信号波形。
(b)算法提示
∙采用符号积分int求[0,T]内时间信号的三角级数展开系数:
,,;
∙用循环语句for…end求出三角级数展开系数和的数值,并赋值给变量A_sym(k+1),B_sym(k+1);
∙从三角级数展开系数和得到复指数展开系数:
可以根据式(3-8)求出,需要注意的是、和的自变量取值情况,、的变量的取值范围为,而的变量的取值范围为,为了从和得到,需要用到MATLAB的反折函数fliplr来实现频谱的反折;例如已知一个序列a=[54321],采样位置为:
0,1,2,3,4。
要组成员序列反折后再叠加原序列的一个新序列(采样位置:
-4,-3,-2,-1,0,1,2,3,4)。
程序如下:
n=0:
4;
a=[54321];
subplot(2,1,1);stem(n,a);
b=fliplr(a);
k=-4:
4;
c=[b,a(2:
end)];
subplot(2,1,2);stem(k,c);
(c)源程序代码
编写函数文件CTFStpshsym.m,如下所示:
[CTFStpshsym.m]
function[A_sym,B_sym]=CTFSshbpsym(T,Nf)
%采用符号计算求[0,T]内时间函数的三角级数展开系数。
% 函数的输入输出都是数值量
% Nn 输出数据的准确位数
% A_sym 第1元素是直流项,其后元素依次是1,2,3...次谐波cos项展开系数
% B_sym 第2,3,4,...元素依次是1,2,3...次谐波sin项展开系数
% T T=m*tao, 信号周期
% Nf 谐波的阶数
% Nn 输出数据的准确位数
% m(m=T/tao)周期与脉冲宽度之比,如m=4,8,16,100等
% tao 脉宽:
tao=T/m
symst n y
ifnargin<3;Nf=input('pleaseInput所需展开的最高谐波次数:
Nf=');end
T=input('pleaseInput信号的周期T=');
ifnargin<5;Nn=32;end
y=time_fun_s(t);
A0=2*int(y,t,0,T)/T;
As=int(2*y*cos(2*pi*n*t/T)/T,t,0,T);
Bs=int(2*y*sin(2*pi*n*t/T)/T,t,0,T);
A_sym
(1)=double(vpa(A0,Nn));
fork=1:
Nf
A_sym(k+1)=double(vpa(subs(As,n,k),Nn));
B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn));
end
ifnargout==0
S1=fliplr(A_sym); %对A_sym阵左右对称交换
S1(1,k+1)=A_sym
(1); %A_sym的1*k阵扩展为1*(k+1)阵
S2=fliplr(1/2*S1); %对扩展后的S1阵左右对称交换回原位置
S3=fliplr(1/2*B_sym); %对B_sym阵左右对称交换
S3(1,k+1)=0; %B_sym的1*k阵扩展为1*(k+1)阵
S4=fliplr(S3); %对扩展后的S3阵左右对称交换回原位置
S5=S2-i*S4; %用三角函数展开系数A、B值合成付里叶指数系数
S6=fliplr(S5);
N=Nf*2*pi/T;
k2=-N:
2*pi/T:
N;
S7=[S6,S5(2:
end)];
subplot(3,3,3)
x=time_fun_e(t) %调用连续时间函数-周期矩形脉冲
subplot(2,1,1)
stem(k2,abs(S7)); %画出周期矩形脉冲的频谱(T=M*tao)
title('连续时间函数周期矩形脉冲的双边幅度谱')
axis([-80,80,0,0.12])
line([-80,80],[0,0])
line([0,0],[0,0.12])
end
%-------------------------------------------
functiony=time_fun_s(t)
%该函数是CTFSshbpsym.m的子函数。
它由符号变量和表达式写成。
symsaa1
T=input('pleaseInput信号的周期T=');
M=input('周期与脉冲宽度之比M=');
A=1;tao=T/M;a=tao/2;
y1=sym('Heaviside(t+a1)')*A;
y=y1-sym('Heaviside(t-a1)')*A;
y=subs(y,a1,a);
y=simple(y);
%------------------------------
functionx=time_fun_e(t)
%该函数是CTFSshbpsym.m的子函数。
它由符号变量和表达式写成。
% t 是时间数组
% T 是周期 duty=tao/T=0.2
T=5;t=-2*T:
0.01:
2*T;tao=T/5;
x=rectpuls(t,1); %产生一个宽度tao=1的矩形脉冲
subplot(2,2,2)
plot(t,x)
holdon
x=rectpuls(t-5,1); %产生一个宽度tao=1的矩形脉,中心位置在t=5处
plot(t,x)
holdon
x=rectpuls(t+5,1); %产生一个宽度tao=1的矩形脉,中心位置在t=-5处
plot(t,x)
title('周期为T=5,脉宽tao=1的矩形脉冲')
axis([-10,10,0,1.2])
(d)运行结果及分析
∙程序运行结果
调用CTFStpshsym.m函数文件,即可绘出周期矩形脉冲波形信号的双边幅度频谱。
指令如下:
在MATLAB命令窗口键入CTFStpshsym,回车,命令窗口将会出现:
pleaseInput所需展开的最高次谐波次数Nf=?
;此处输入Nf=60,然后命令窗口将出现:
pleaseInput信号的周期T=?
,此处输入T=5;然后命令窗口又出现:
周期与脉冲宽度之比M=?
,此处输入M=5,即可绘出频谱图,如图3-2所示。
周期信号的频谱是离散谱,仅含有的各分量,其相邻谱线的间隔是。
∙脉冲宽度与频谱的关系
脉冲与频谱关系如图3-3所示。
(a)周期T=5,脉冲宽度tao=T/4=1.25的矩形脉冲频谱
(b)周期T=5,脉冲宽度tao=T/8=0.625的矩形脉冲频谱
(c)周期T=5,脉冲宽度tao=T/16=0.3125的矩形脉冲频谱
由于周期T相同,因而相邻谱线的间隔相同;脉冲宽度越窄,其频谱包络线第一个零点的频率越高,即信号脉宽越宽,这就验证了信号的频带宽度与脉冲宽度成反比,即
(a)脉冲宽度tao=1,周期T=4*tao=4的矩形脉冲频谱
(b)脉冲宽度tao=1,周期T=8*tao=8的矩形脉冲频谱
(c)脉冲宽度tao=1,周期T=16*tao=16的矩形脉冲频谱
由于周期信号的时域脉冲宽度不变,这时频谱包络线的零点所在位置不变,而当周期变长时,相邻谱线的间隔减少,频谱变密。
如果周期无限长(这时信号变为非周期),那么,相邻谱线的间隔将趋近于零,周期信号的频谱就过渡到非周期信号的连续谱。
随着周期信号的增长,各谐波分量的幅度也相应减小。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 周期 信号 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)