资源描述:
《matlab基础与应用教程(人民邮电出版社-蔡旭辉)第六章b》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、6.2傅里叶分析6.2.1周期信号频域分析的MATLAB实现 例 设周期性对称三角波幅度A=1,周期T=2,试用MATLAB画出其频谱。图1周期性对称三角波解 傅里叶系数该信号的傅里叶级数展开式为MATLAB程序如下:N=8;n1=-N:-1;c1=-4*j*sin(n1*pi/2)/pi^2./n1.^2;%计算n=-N到-1的傅里叶系数c0=0;%计算n=0时的傅里叶系数n2=1:N;c2=-4*j*sin(n2*pi/2)/pi^2./n2.^2;%计算n=1~N的傅里叶系数cn=[c1c0c2];n=
2、-N:N;subplot(2,1,1);stem(n,abs(cn),'.');ylabel('Cn的幅度');subplot(2,1,2);stem(n,angle(cn),'.');ylabel('Cn的相位');xlabel('omega/omega0');图2程序运行结果例6.7方波分解为多次正弦波之和图6.7-1输入周期性方波--x图示的周期性方波,其傅里叶级数为分别计算......直到9次谐波,并做图。%第六章例6.7程序q607%方波分解为多次正弦波之和t=0:.01:2*pi;%设定一个时间数组
3、y=sin(t);plot(t,y),pause%频率为w=1(f=1/2π)的正弦基波y=sin(t)+sin(3*t)/3;plot(t,y),pause%叠加三次谐波%用1,3,5,7,9次谐波叠加y=sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7+sin(9*t)/9;plot(t,y)67%为了绘制三维曲面,要把各次波形数据存为一个三维数组,因此必须重新定义yy=zeros(10,max(size(t)));x=zeros(size(t));fork=1:2:19x=x+sin
4、(k*t)/k;y((k+1)/2,:)=x;end%将各波形叠合绘出pause,figure(1),plot(t,y(1:9,:)),gridline([0,pi+0.5],[pi/4,pi/4])%加上方波幅度线及标注text(pi+0.5,pi/4,'pi/4')%将各半波形绘成三维网格图,看出增加谐波阶次对方波逼近程度的影响halft=ceil(length(t)/2);pause,figure(2),mesh(t(1:halft),[1:10],y(:,1:halft))%只用正半周波形8温故而知新:b.三维
5、网格命令mesh利用函数mesh生成网格曲面。调用格式为:mesh(X,Y,Z,C):X、Y、Z、C是同维数的矩阵,X、Y、Z对应空间上的网格点,网格线颜色由C决定;mesh(X,Y,Z):相当于上面的C=Z的情况;mesh(x,y,Z,C):x和y是向量,Z和C是同维数的矩阵,网格曲面的网格顶点是(x(j),y(i),Z(i,j)),网格线的颜色由矩阵C决定;mesh(x,y,Z):相当于上面的C=Z的情况;mesh(Z,C):等价于mesh(x,y,Z,C),此时向量x=1:n,向量y=1:m;[m,n]=size
6、(Z)mesh(Z):相当于上面的C=Z的情况mesh(...,’PropertyName’,PropertyValue,...):给函数mesh设置曲面属性。910116.2.2非周期信号频域分析的MATLAB实现MATLAB提供了许多数值计算工具,可以用来进行信号的频谱分析。quadl是计算数值积分的函数,有下面两种调用方式:y=quadl(‘F’,a,b)y=quadl(‘F’,a,b,[],[],P)其中,F是一个字符串,表示被积函数的文件名;a、b分别表示定积分的下限和上限;P表示被积函数中的一个参数。qu
7、ad8的返回值是用自适应Simpson算法得出的积分值。(*quadl采用自适应Lobatto算法)例 试用数值积分法近似计算三角波信号f(t)=(1-
8、t
9、)g2(t)的频谱。 解 为了用quad(或者quadl、quad8)计算f(t)的频谱,定义如下MATLAB函数:functiony=sf1(t,w);y=(t>=-1&t<=1).*(1-abs(t)).*exp(-j*w*t);对不同的参数w,函数sf1将计算出傅里叶变换积分式中被积函数的值。将上述MATLAB函数用文件名sf1.m存入计算机磁盘。近似计
10、算信号频谱的MATLAB程序为:w=linspace(-6*pi,6*pi,512);N=length(w);F=zeros(1,N);fork=1:NF(k)=quad('sf1',-1,1,[],[],w(k));endfigure(1);plot(w,real(F));xlabel('omega');ylabel(