您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于MATLAB的通信系统仿真++文中代码
《基于MATLAB的通信系统仿真》赵静张谨高新科编著北京航空航天大学出版社出版发行2007年9月第1版2007年9月第1次印刷ISBN978-7-81124-152-5定价:18.00元========================================================================第1章MATLAB语言基础【P10】下面这个例子中包括矩阵与常数的运算、矩阵的逆、矩阵与矩阵的运算:A=[675;369;415]B=20+AC=inv(A)*BA=675369415B=262725232629242125C=3.85712.85712.8571-0.95240.0476-0.95241.90481.90482.9048求矩阵的特征根:eig(C)ans=4.80951.00001.0000矩阵的乘方运算及开方验证:A=[675;369;415];B=A^2B=77891187266114473954再对B进行开方验证:C=sqrtm(B)C=6.00007.00005.00003.00006.00009.00004.00001.00005.0000【P12】以比较两个数的大小为例:x=32;y=86;ifxy'x大于y'elseifxy'x小于y'elseifx==y'x等于y'else'error'endans=x小于y【P14】表达式的值和哪个case的值相同,就执行哪个case后的语句,如果不同,则执行otherwise后的语句。例:switchicase0'iequals0'case1'iequals1'case2'iequals2'otherwise'iisnotequalto0,1or2'endans=iisnotequalto0,1or2【P15】下面这个例子可以描述绘图的基本步骤:x=-pi:.1:pi;y1=sin(x);y2=cos(x);%准备绘图数据figure(1)%打开图形窗口subplot(2,1,1)%确定第一幅图绘图窗口plot(x,y1)%以x、y1绘图title('plot(x,y1)')%为第一幅图取名为'plot(x,y1)'gridon%为第一幅图绘制网格线subplot(2,1,2)%确定第二幅图绘图窗口plot(x,y2)%以x、y2绘图xlabel('time'),%第二幅图横坐标名为'time'ylabel('y')%第二幅图纵坐标名为'y'【P16】空间曲面的绘制:在该例中提供了四种空间曲面函数的对比。x=[-2:0.2:2];y=x;[X,Y]=meshgrid(x,y);%生成x-y坐标“格点”矩阵Z=X.*exp(-X.^2-Y.^2);subplot(2,2,1),surf(Z);%绘制曲面shadingflat%把曲面上的小格平滑掉subplot(2,2,2),mesh(Z);%绘制网格曲面subplot(2,2,3),meshc(Z);%等高线投影到平面上subplot(2,2,4),surfl(Z);view(20,0)%变换立体图视角第2章Simulink仿真基础第3章信号系统分析基础【P30】例如绘制复指数信号时域波形的Matlab实现如下:(函数文件sigexp.m)functionsigexp(a,s,w,t1,t2)%本函数实现绘制复指数信号时域波形%a:复指数信号幅度%s:复指数信号频率实部%w:复指数信号频率虚部%t1,t2:绘制波形的时间范围t=t1:0.01:t2;theta=s+j*w;fc=a*exp(theta*t);real_fc=real(fc);imag_fc=imag(fc);mag_fc=abs(fc);phase_fc=angle(fc);subplot(2,2,1)plot(t,real_fc)title('实部');xlabel('t');axis([t1,t2,-(max(mag_fc)+0.2),max(mag_fc)+0.2]);subplot(2,2,2)plot(t,imag_fc);title('虚部');xlabel('t');axis([t1,t2,-(max(mag_fc)+0.2),max(mag_fc)+0.2]);subplot(2,2,3)plot(t,mag_fc);title('模');xlabel('t');axis([t1,t2,0,max(mag_fc)+0.5]);subplot(2,2,4)plot(t,phase_fc);title('相角');xlabel('t');axis([t1,t2,-(max(phase_fc)+0.5),max(phase_fc)+0.5]);【P34】绘制离散幅度谱和谐波叠加的Matlab实现如下:(函数rectexpd.m)functionrectexpd(T1,T0,m);%矩形信号串信号分解与合成%T1:矩信号区间为(-T1/2,T1/2)%T0:矩形矩形信号串周期%m:傅立叶级数展开项次数t1=-T1/2:0.01:T1/2;t2=T1/2:0.01:(T0-T1/2);t=[(t1-T0)';(t2-T0)';t1';t2';(t1+T0)'];n1=length(t1);n2=length(t2);%根据周期矩形信号函数周期,计算点数f=[ones(n1,1);zeros(n2,1);ones(n1,1);zeros(n2,1);ones(n1,1)];%构造周期矩形信号串y=zeros(m+1,length(t));y(m+1,:)=f';figure(1);plot(t,y(m+1,:));%绘制周期矩形信号串axis([-(T0+T1/2)-0.5,(T0+T1/2)+0.5,0,1.2]);set(gca,'XTick',[-T0,-T1/2,T1/2,T0]);set(gca,'XTickLabel',{'-T0','-T1/2','T1/2','T0'});title('矩形信号串');grid;a=T1/T0;pause;%绘制离散幅度谱freq=[-20:1:20];mag=abs(a*sinc(a*freq));stem(freq,mag);x=a*ones(size(t));fork=1:m%循环显示谐波叠加图形pause;x=x+2*a*sinc(a*k)*cos(2*pi*t*k/T0);y(k,:)=x;%计算叠加和plot(t,y(m+1,:));holdon;plot(t,y(k,:));%绘制各次叠加信号holdoff;grid;axis([-(T0+T1/2)-0.5,(T0+T1/2)+0.5,-0.5,1.5]);title(strcat(num2str(k),'次谐波叠加'));xlabel('t');endpause;plot(t,y(1:m+1,:));grid;axis([-T0/2,T0/2,-0.5,1.5]);title('各次谐波叠加');xlabel('t');【P36】在Matlab中提供了符号计算傅立叶变换的函数fourier,借用该函数,绘制信号的幅度谱和相位谱的实现如下:(函数名称sexpfr.m)functionsexpfr(alpha)%计算exp(-alpha*t)*u(t)的幅度谱和相位谱symstmagphasea=abs(alpha);xt=exp(-a*t)*sym('Heaviside(t)');ezplot(xt);set(findobj('Type','line'),'Color','k')title('\rme^{-|a|t}u(t)');axis([0,3,0,1]);figure(2);Xf=fourier(xt);subplot(1,2,1);ezplot(abs(Xf));set(findobj('Type','line'),'Color','k')title('\rmF[e^{-|a|t}u(t)]幅度谱');xlabel('f')subplot(1,2,2);phase=atan(imag(Xf)/real(Xf));ezplot(phase);set(findobj('Type','line'),'Color','k')title('\rmF[e^{-|a|t}u(t)]相位谱');xlabel('f')【P42】假设对截断信号进行采样,设采样间隔为0.5s。利用离散傅立叶变换和FFT绘制频谱的Matlab实现如下:ts=0.5;df=1.0;fs=1/ts;%采样频率n2=50/ts;n1=fs/df;N=2^(max(nextpow2(n1),nextpow2(n2)));%当序列是2的幂次时,FFT算法高效df=fs/N;%设置分辨率t=0:0.01:50;y=cos(2/5*pi*t);subplot(2,2,1);plot(t,y,'k:');%绘制余弦信号holdont2=0:ts:50;y2=cos(2/5*pi*t2);stem(t2,y2,'k');%对余弦信号进行抽样axis([010-1.2,1.2]);title('抽样信号:\rmx_{s}(t)');xlabel('t');line([010],[00],'color',[000]);holdoffk=-N:N;w=df*k;Y=0.01*y*exp(-j*2*pi*t'*w);%计算CFTY=abs(Y);subplot(2,2,2);plot(w,Y,'k');axis([-fs/2-0.5,fs/2+0.5,0,8*pi+0.5]);title('连续傅立叶变换:X(f)');xlabel('f');subplot(2,2,3);Y1=y2*exp(-j*2*pi*t2'*w);%计算离散傅立叶变换Y1=Y1/fs;plot(w,abs(Y1),'k');title('离散傅立叶变换:\rmX_{s}(f)');xlabel('f');axis([-fs/2-1,fs/2+1,0,8*pi+0.5]);Y2=fft(y2,N);%使用FFT,计算离散傅立叶变换Y2=Y2/fs;f=[0:df:df*(N-1)]-fs/2;%调整频率坐标subplot(2,2,4);plot(f,fftshift(abs(Y2)),'k');axis([-fs/2-0.5,fs/2+0.5,0,8*pi+0.5]);title('快速傅立叶变换:\rmX_{s}(f)');xlabel('f');【P45】Matlab实现如下文件(psdcos.m):closeall;fs=800;ts=1/fs;t=0:ts:2;x=cos(2*pi*73*t)+cos(2*pi*21*t);nfft=64;power=(norm(x)^2)/length(x+1);spow=abs(fft(x,nfft).^2);f=(0:nfft-1)/ts/nfft;%设置频率范围f=f-fs/2;plot(f,fftshift(spow),'k');xlabel('频率');ylabel('功率谱');disp(['power=',num2str(power),'.']);【P47】Matlab中利用LCG算法产生区间均匀分布随机数的实现如下(文件lcgrand.m):functiony=lcgrand(seed,n)%使用sch计算Schrage算法%计算x=(a*x)modMM=2147483647;a=16807;r=2836;q=127773;mask=123459876;%seed=0时种子seed=bitxor(seed,mask);y=zeros(1,n);fori=1:nk=fix(seed/q);seed=a*(seed-k*q)-r*k;if(seed0)seed=seed+M;endy(i)=seed/M;end【P48】产生指数分布随机序列的Matlab实现如下:(函数uni2
本文标题:基于MATLAB的通信系统仿真++文中代码
链接地址:https://www.777doc.com/doc-1730439 .html