通信原理基于matlab的计算机仿真_源代码
通信原理matlab课程设计
题 目: 2ASK、2FSK、2PSK、2DPSK调制 解调matlab仿真
姓 名: 专 业:
目
一、设计要求
二、基本原理 (1)2ASK (3)2PSK 三、源代码 (1)MENU
录
(2)2FSK (4)2DPSK (2)调制解调
四、MATLAB仿真现象 (1)2ASK (3)2FSK
跳过程序到仿真现象
• • • • • • • • • • • • • • • • • • • • • • • • • •
•
figure(1); subplot(K,1,1);plot(bita,'LineWidth',1.5),title('基带信号'),grid on;axis([0,N*length(a),-2.5,2.5]); tz=bita*6.*sl; subplot(K,1,2);plot(tz,'LineWidth',1.5);title('ASK调制后信号');grid on; signal=awgn(tz,80,'measured'); subplot(K,1,3);plot(signal,'LineWidth',1.5),grid on;title('信号+噪声') Fs=3e3; [b,a]=ellip(4,0.1,40,[999.9,1000.1]*2/Fs);%设计IIR带通滤波器,阶数为4,通带纹波0.1,阻带衰减40DB sf=filter(b,a,signal);%信号通过该滤波器 figure(2); K1=4; subplot(K1,1,1);plot(sf,'LineWidth',1.5),grid on;title('BPF') signal2=abs(sf); %乘同频同相sin subplot(K1,1,2);plot(signal2,'LineWidth',1.5),grid on;title('全波整流器'); Fs=3e3;%抽样频率400HZ [b,a]=ellip(4,0.1,40,[50]*2/Fs);%设计IIR低通滤波器 sf1=filter(b,a,signal2);%信号通过该滤波器,输出信号sf subplot(K1,1,3);plot(sf1,'LineWidth',1.5),grid on;title('LPF'); sf2=[]; LL=fc/bitRate*N; i=LL/2; bitb=[]; while (i<=length(sf1)) %判决 sf2=[sf2,sf1(i)>=0.001]; i=i+LL; end
通信原理基于matlab的计算机仿真
通信原理基于matlab的计算机仿真通信原理基于matlab的计算机仿真已经成为通信领域中一项重要的研究工具。
此类仿真软件通过模拟现实情形,能够极大地加快通信设备的开发进程,并且可以帮助工程师进行实验,发现并解决通讯中可能存在的问题。
同时,matlab的通信仿真功能也成为了相关教材和教学实验的首选,许多大学,尤其是通信工程专业的学生要通过matlab的仿真来更好地理解通信原理和通信设备的工作原理。
由于matlab的专业性,无论是对于传输介质的模型计算,还是信号的传输过程的计算仿真,都非常适合。
通信原理的matlab仿真可以有效地帮助工程师分析各种信号,包括模拟信号、数字信号及混合信号。
这种仿真可用于计算机网络、通信系统设计以及无线通信和移动通信等领域。
在matlab中,通信原理的仿真重点是信号的传输与接收。
目前,通信设备主要采用数字信号的传输方式,而matlab中也能够实现该方式的仿真。
通过模拟数字信号的传输过程,可以帮助工程师分析此类信号在不同媒介下的传输效果。
所以,在进行数字信号的仿真时,matlab会考虑到以下几个因素:1.噪声在数字通信中,噪声是一个常见的问题。
因此,在matlab 的仿真中也要考虑到噪声的影响因素。
matlab能够对噪声进行建模,模拟各种环境下的噪声对数字信号的影响程度。
2.数据传输速率数据传输速率也会影响数字信号的仿真结果。
matlab可以模拟数字信号传输的速率以及不同速率下的传输效果。
3.差错率差错率也是数字信号传输中的一个显著因素,matlab在通信原理仿真中也会进行模拟。
除数字信号外,模拟信号的仿真也是通信原理仿真领域的一项重要工作。
在matlab的仿真中,通常对模拟信号的传输和接收会更加复杂。
通信原理的matlab仿真的一个重要应用就是误码率和比特误差率测试。
误码率和比特误差率都是评估数字信号传输质量的指标。
通信系统的设计旨在在受到最小干扰时保持误差率的最小化。
通信原理实验Matlab程序(软件仿真)
num=0; % 计数器清零 yz(k)=1*yz(k-4); % 让0000的最后一个0改变为与前一个非零符号 相同极性的符号 V(k)=yz(k); % V 脉冲位置记录 if yz(k)==sign % 如果当前V符号与前一个V符号的极性相同 yz(k)=-1*yz(k); % 则让当前V符号极性反转,以满足V符号间相 互极性反转要求 yz(k-3)=yz(k); % 添加B符号,与V符号同极性 B(k-3)=yz(k); % B脉冲位置记录 V(k)=yz(k); % V 脉冲位置记录 yz(k+1:length(yw))=-1*yz(k+1:length(yw)); % 并让后面的非零符号从V符号开始再交替变化 end sign=yz(k); % 记录前一个V符号的极性 end else num=0; % 当前输入为“1”则连“0”计数器清零 end end % 编码完成 %re=[xn',yw',yz',V',B']; % 结果输出: xn AMI HDB3 V&B 符号 yn=yz;% 输出yn初始化 num=0;% 计数器初始化 for k=1:length(yz) if yz(k)==1 num=num+1; % "1" 计数器 if num/2 == fix(num/2) % 奇数个1时输出-1,进行极性交替 yn = [yn gt1]; else yn = [yn -1*gt1]; end else yn = [yn gt2]; end end yh=yn; fft_se1 = fftshift(fft(yh)); % 求序列的频谱 PE1 = 10 * log10(abs(fft_se1) .^ 2 / (N * Ts)); % 公式法求概率 谱密度 PEL1 = (-length(fft_se1) / 2 : length(fft_se1) / 2 - 1) / 10; % 求区间长度 subplot(2,1,1);stairs([0:length(yn)-1],yn);axis([0 length(yn) -2 2]);
通信系统仿真 基于MATLAB汉明码仿真课程设计
摘要在通信系统中,要提高信息传输的有效性,我们将信源的输出经过信源编码用较少的符号来表达信源消息,这些符号的冗余度很小,效率很高,但对噪声干扰的抵抗能力很弱。
汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。
为了提高信息传输的准确性,我们引进了差错控制技术。
而该技术采用可靠的,有效的信道编码方法来实现的。
纠错码是一种差错控制技术,目前已广泛应用于各种通信系统和计算机系统中,纠错编码主要用于数字系统的差错控制,对于保证通信、存储、媒体播放和信息转移等数字传递过程的质量有着重要意义,是通信、信息类科知识结构中不可缺少的一部分。
本文系统地介绍了纠错码在数字系统中的应用和发展,以及纠错码的基本原理和含义,常用纠错码的简介和分类,主要利用MATLAB中通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制时域波形曲线图。
在此基础上,对汉明码的性能进行分析,得出结论。
关键字:通信系统、MATLAB、线性分组码、Hamming码目录一、引言 (1)二、设计原理 (2)2、1 汉明码的构造原理 (2)2、2 汉明码的纠错原理 (3)2、3 监督矩阵H (4)2、4 生成矩阵G (6)2、5 校正子(伴随式)S (7)2、6 程序函数介绍 (9)三、(7,4)汉明码编码的设计 (9)3、1 (7,4)汉明码编码方法 (9)3、2 编码流程图 (10)3、3 (7,4)汉明码编码程序设计 (10)四、(7,4)汉明码的译码器的设计 (11)4、1 (7,4)汉明码译码方法 (11)4、2 译码流程图 (13)4、3 (7,4)汉明码译码程序的设计 (13)五、(7,4)汉明码编译码程序的编译及仿真波形 (14)六、总结 (17)七、参考文献 (18)附录 (19)一、引言MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。
通信原理课程设计【基于Matlab】
西南石油大学通信原理课程设计课程:通信原理题目:新型模拟调制和数字带通调制技术院系:电子信息工程学院专业年级:通信工程2007级姓名:张伟学号: 0707050133指导教师:郑勉2010年6月17日一、课程设计的目的通过自主设计,加深对PCM编码的了解,巩固课堂所学知识。
同时在熟悉MATLAB基础上应用simulink仿真PCM编码器,通过反复调试和理解,基本掌握该仿真软件的使用。
更重要的是,在设计中培养自主创新意识和动手能力,建立起良好的工作习惯和科学素养。
二、程设计的的内容利用MATLAB集成环境下的Simulink仿真平台,设计一个PCM编码器,用示波器观察输入波形和编码波形,最后结合理论对比波形得出结论。
三、课程设计要求1、熟悉matlab环境下的Simulink仿真平台,熟悉PCM编码原理,构建PCM编码电路图。
2、对模拟信号进行采样量化编码,建立仿真模型,分析编码仿真波形。
3、技术要求:模拟信号频率最高限制在4KHz内。
基于MATLAB的模拟调制和数字带通调制技术具体内容: 基于MATLAB的PCM编码器仿真作者:张伟(西南石油大学电信院通信工程2007级)指导教师:郑勉收稿日期:2010 年 6 月22 日【摘要】PCM脉冲编码调制是Pulse Code Modulation的缩写。
PCM编码广泛应用于数字音频信号的处理。
模拟信号数字化必须经过三个过程,即抽样、量化和编码,以实现话音数字化的脉冲编码调制。
在熟悉和掌握PCM编码过程及原理基础上,然后利用MATLAB 进行具体仿真,并观察分各主要波形。
【关键词】MATLAB仿真PCM 编码器的Simulink实现Title :On the basis of matlab and figures with mixed with modulation technology Contents:pcm encoder simulation based on MatlabAuthor :zhang wei(SWPU telecom institute communication engineering 2007)Instructor: zheng mianDate of handed up: 22/6/2010[Abstract]Pcm pulse code modulation, a pulse code modulation the pcm code widely used in the digital audio signal that the analog signals. after three processes must be digitized, sampling, quantizing and coding, to make digital pulse code modulation voice. the encoding process and the pcm and principles, and then using matlab a concrete simulation and observe a major wave.[Key words]Matlab sampling PCM Simulink implementation of the encoder【正文】1MATLAB仿真简介利用MATLAB 提供的可视化工具Simulink 可以建立了扩频通信系统仿真模型。
通信原理Matlab仿真实验报告
通信原理Matlab仿真实验报告学号:姓名:实验一1、利用Matlab实现矩形信号串信号分解与合成⑴ Matlab程序代码:①矩形信号串信号分解与合成函数rectexpd():function rectexpd(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 on; a=T1/T0;pause; %绘制离散幅度谱freq=[-20:1:20];mag=abs(a*sinc(a*freq)); stem(freq,mag);x=a*ones(size(t));for k=1:m %循环显示谐波叠加图形pause;x=x+2*a*sinc(a*k)*cos(2*pi*t*k/T0);y(k,:)=x;plot(t,y(m+1,:));hold on;plot(t,y(k,:));hold off;grid on;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 on;axis([-T0/2,T0/2,-0.5,1.5]);title('各次谐波叠加');xlabel('t');②在命令窗口调用rectexpd()函数:T1=5;T0=10;m=5;rectexpd(T1,T0,m)⑵Matlab仿真结果:1次谐波叠加t3次谐波叠加tt2次谐波叠加t4次谐波叠加tt2、利用Matlab实现连续信号卷积运算⑴ Matlab程序代码:①连续信号卷积运算的通用函数sconv():function [f,k]=sconv(f1,f2,k1,k2,p) f=conv(f1,f2);f=f*p;k0=k1(1)+k2(1);k3=length(f1)+length(f2)-2;k=k0:p:k3*p; subplot(2,2,1); plot(k1,f1); title('f1(t)'); xlabel('t'); ylabel('f1(t)');subplot(2,2,2);plot(k2,f2);title('f2(t)'); xlabel('t'); ylabel('f2(t)'); subplot(2,2,3); plot(k,f); title('f(t)=f1(t)*f2(t)'); xlabel('t'); ylabel('f(t)');h=get(gca,'position'); h(3)=2.5*h(3);set(gca,'position',h);②在命令窗口调用sconv ()函数: p=0.01; k1=0:p:2; f1=exp(-k1); k2=0:p:3;f2=ones(1,length(k2)); [f,k]=sconv(f1,f2,k1,k2,p)⑵Matlab 仿真结果:0.511.5200.51f1(t)tf 1(t )01230.511.52f2(t)tf 2(t )00.51 1.522.533.544.550.51f(t)=f1(t)*f2(t)tf (t )实验二1、用Matlab模拟图形A律解码⑴Matlab程序代码:①建立函数ADecode()function y=ADecode(code,n) codesize=size(code);cr_len=codesize(1);cl_len=codesize(2);ca=zeros(1,cl_len-1);for i=1:cr_lenca=code(i,2:n);s=0;for j=1:n-1s=s+ca(j)*2^(n-1-j);enda=code(i,1);y(i)=s*((-1)^(a+1)); endy=y/(2^(n-1));A=87.6;A1=1+log(A); for j=1:length(y)if(y(j)>=0)if(y(i)<=1/A1)y(j)=y(j)*A1/A;elsey(j)=exp(y(j)*A1-1/A);endelsetemp=-y(j);if(temp<=1/A1)y(j)=-temp*A1/A;elsey(j)=-exp(temp*A1-1)/A;endendend②建立函数APCM()function code=APCM(x,n)xmax=max(abs(x));x=x/xmax;xlen=length(x);y=zeros(1,xlen);A=87.6;A1=1+log(A);for i=1:xlenif x(i)>=0if x(i)<=1/Ay(i)=(A*x(i))/A1;elsey(i)=(1+log(A*x(i)))/A1;endelsex1=-x(i);if x1<=1/Ay(i)=-(A*x1)/A1;elsey(i)=-(1+log(A*x1))/A1;endendendy1=y*(2^(n-1)-1);y1=round(y1);code=zeros(length(y1),n); c2=zeros(1,n-1);for i=1:length(y1)if(y1(i)>0)c1=1;elsec1=0;y1(i)=-y1(i);endfor j=1:n-1r=rem(y1(i),2);y1(i)=(y1(i)-r)/2;c2(j)=r;endc2=fliplr(c2);code(i,:)=[c1 c2];end③在新函数中调用前两个函数 t=0:0.01:1; x=sin(2*pi*t); code=APCM(x,7); y=ADecode(code,7); subplot(2,1,1) plot(t,x);title('原函数的图形'); subplot(2,1,2) plot(t,y);title('解码后函数的图形');⑵Matlab 仿真结果:00.10.20.30.40.50.60.70.80.91-1-0.500.51原函数的图形00.10.20.30.40.50.60.70.80.91-1-0.50.5解码后函数的图形2、用Matlab 模拟DSB 调制及解调过程 ⑴Matlab 程序代码: close all; clear all;dt=0.001;%采样时间间隔 fm=1; %信源最高频率 fc=10; %载波中心频率 N=4096;T=N*dt; t=0:dt:T-dt;mt=sqrt(2)*cos(2*pi*fm*t);%信源s_dsb=mt.*cos(2*pi*fc*t); %DSB-SC 双边带抑制载波调幅B=2*fm;figure(1); subplot(311) plot(t,s_dsb,'b-');hold on; %画出DSB 信号波形plot(t,mt,'r--');%画出m(t)信号波形 title('DSB 调制信号'); xlabel('t'); grid on;%DSB demodulation rt=s_dsb.*cos(2*pi*fc*t); rt=rt-mean(rt); [f,rf]=T2F(t,rt); [t,rt]=lpf(f,rf,B); subplot(312) plot(t,rt,'k-'); hold on;plot(t,mt/2,'r--');title('相干解调后的信号波形与输入信号的比较'); xlabel('t'); grid on; subplot(313)[f,sf]=T2F(t,s_dsb); %求调制信号的频谱psf=(abs(sf).^2)/T; %求调制信号的功率谱密度 plot(f,psf);axis([-2*fc 2*fc 0 max(psf)]); title('DSB 信号功率谱'); xlabel('f'); grid on;⑵Matlab 仿真结果:00.51 1.52 2.53 3.54 4.5-22DSB 调制信号t0.511.522.533.544.5-101相干解调后的信号波形与输入信号的比较t-20-15-10-5051015200.5DSB 信号功率谱f实验三1、用Matlab模拟双极性归零码⑴ Matlab程序代码:function y=drz(x)t0=300;x=[1 0 0 1 1 0 0 0 0 1 0 1];t=0:1/t0:length(x);for i=1:length(x);if(x(i)==1)for j=1:t0/2y(t0/2*(2*i-2)+j)=1;y(t0/2*(2*i-1)+j)=0;endelsefor j=1:t0/2y(t0/2*(2*i-2)+j)=-1;y(t0/2*(2*i-1)+j)=0;endendendy=[y,x(i)];M=max(y);m=min(y); subplot(211)plot(t,y);grid on;axis([0,i,m-0.1,M+0.1]);title('1 0 0 1 1 0 0 0 0 1 0 1 ');⑵Matlab仿真结果:2、用Matlab产生2FSK信号⑴ Matlab程序代码:①建立函数fskdigital()function fskdigital(s,f1,f2) t=0:2*pi/99:2*pi;m1=[];c1=[];b1=[];for n=1:length(s)if s(n)==0;m=ones(1,100);c=sin(f2*t);b=zeros(1,100) else s(n)==1;m=ones(1,100);c=sin(f1*t);b=ones(1,100)endm1=[m1 m]; c1=[c1 c]; b1=[b1 b]; endfsk=c1.*m1;subplot(211);plot(b1,'r')title('原始信号');axis([0 100*length(s) -0.1 1.1]);grid on;subplot(212);plot(fsk)title('2FSK信号');grid on;②在命令窗口调用函数fskdigital() >> s=[1 0 1 1 0 0 1 0]; f1=200; f2=100;fskdigital(s,f1,f2)⑵Matlab 仿真结果:10020030040050060070080000.20.40.60.81原始信号100200300400500600700800-1-0.500.512FSK 信号3、用Matlab 的simulink 模块模拟三角波的分解与还原 ⑴模块图⑵仿真结果:①三角波原图②用矩形波近似的冲击函数③分解后的三角波④经低通还原的三角波。
基于MATLABSimulink的基带传输系统的仿真-通信工程专业《通信原理》课程设计.doc
通信工程专业《通信原理》课程设计题目基于MATLAB/Simulink的基带传输系统的仿真学生姓名学号所在院(系)专业班级通信工程专业xx 班指导教师xx 合作者 xx xx完成地点xx 理工学院物理与电信工程学院实验室2014年 3 月 12 日《通信原理》课程设计通信原理课程设计任务书院(系) 物电学院专业班级通信1104 学生姓名 xxx一、通信原理课程设计题目基于MATLAB/Simulink的基带传输系统的仿真二、通信原理课程设计工作自2014年2月24日起至2014年3月14日止三、通信原理课程设计进行地点: 物电学院实验室四、通信原理课程设计的内容要求:1建立一个基带传输系统模型,选用合适基带信号,发送滤波器为平方根升余弦滤波器,滚降系数为0.5,信道为加性高斯信道,接收滤波器与发送滤波器相匹配。
要求观察接收信号眼图,并设计接收机采样判决部分,对比发送数据与恢复数据波形,并统计误码率。
另外,对发送信号和接收信号的功率谱进行估计,假设接收定时恢复是理想的。
2.设计题目的详细建模仿真过程分析和说明,仿真的结果可以以时域波形,频谱图,星座图,误码率与信噪比曲线的形式给出。
课程设计说明书中应附仿真结果图及仿真所用到的程序代码(MATLAB)或仿真模型图(Simulink/SystemView)。
如提交仿真模型图,需提交相应模块的参数设置情况。
3.每人提交电子版和纸质的说明书及源程序代码或仿仿真文件。
参考文献:[1]邓华.MATLAB通信仿真及其应用实例详解[M].人民邮电出版社.2003年[2]郑智琴.Simulink电子通信仿真与应用[M].国防工业出版社.2002年[3]赵鸿图.通信原理MATLAB仿真教程[M].人民邮电出版社.2010年[4]刘学勇.详解MATLAB/Simulink通信系统建模与仿真[M].电子工业出版社.2011年[5]达新宇.通信原理实验与课程设计[M].北京邮电大学出版社.2005年[6]邵玉斌.MATLAB/Simulink通信系统建模与仿真实例分析[M].清华大学出版社.2008年指导教师xx 系(教研室)通信工程系接受论文 (设计)任务开始执行日期2014年2月24日学生签名基于MATLAB/Simulin的基带传输系统的仿真xxx(x理工学院物理与电信工程学院通信1104班,xx xx xxxx3)指导教师:xx[摘要]未经调制的数字信号所占据的频谱是从零频或者很低频率开始,称为数字基带信号,不经载波调制而直接传输数字基带信号的系统,称为数字基带传输系统。
通信原理 matlab代码
通信原理matlab代码以下为一篇关于通信原理的1500-2000字文章,主要讨论了使用MATLAB编写通信原理相关代码的步骤。
通信原理是现代通信系统的基础,通过使用各种信号处理技术和模型,使信息能够在发送和接收设备之间进行传输和解码。
在通信原理的研究中,MATLAB是一种常用的工具,它提供了一系列函数和工具箱,可用于模拟和分析各种通信系统。
在开始使用MATLAB编写通信原理相关代码之前,首先需要安装MATLAB软件。
安装完成后,可以打开MATLAB环境,通过编写和执行代码实现通信原理的模拟和分析。
第一步是导入需要用到的工具箱和相关函数。
MATLAB提供了多个通信系统工具箱,包括通信系统工具箱、数字信号处理工具箱和无线通信工具箱等。
使用`import`关键字可以导入特定的工具箱和函数。
matlabimport commsys.*;import dsp.*;import wireless.*;第二步是设置通信系统的参数。
通信系统的参数包括发送和接收设备的特性、信道特性和数据传输速率等。
通过定义这些参数,可以在整个通信系统中进行一致的模拟和分析。
matlabsampling_frequency = 10e6; 采样频率carrier_frequency = 2.4e9; 载波频率data_rate = 1e6; 数据传输速率snr = 10; 信噪比第三步是生成发送信号。
发送信号的生成主要是根据具体的通信系统规范和调制方案来确定。
比如,要生成一个使用QPSK调制方案的信号,可以使用`comm.QPSKModulator`工具箱生成调制器,并通过调用`step`函数传入待调制的数据。
matlabmodulator = comm.QPSKModulator();data = randi([0 3], 1000, 1); 生成随机的待调制数据modulated_signal = step(modulator, data);第四步是加入信道特性和噪声。
matlab无线通信仿真代码
matlab无线通信仿真代码
本文分享了一份基于MATLAB平台的无线通信仿真代码。
该代码包含了常用的调制解调算法、信道模型、编码解码等模块,通过调用这些模块可以实现多种无线通信系统的仿真。
具体来说,该代码可以用于仿真以下几种无线通信系统:
1. 传统的模拟调制系统,包括AM、FM、PM等模式的调制解调。
2. 数字调制系统,包括PSK、QAM、FSK等模式的调制解调。
3. 多径衰落信道模型,包括AWGN信道、瑞利衰落信道、莱斯衰落信道等。
4. 信道编码解码,包括卷积码、Turbo码、LDPC码等。
除此之外,该代码还包含了多个演示程序,可以直观地展示无线通信系统的仿真结果。
这些演示程序涉及到信道容量、误码率、信噪比等指标,可以帮助用户深入理解无线通信系统的性能。
总之,该MATLAB无线通信仿真代码简单易用,功能齐全,可用于学术研究、教学实验、工程应用等多个领域。
- 1 -。
基于Matlab(Simulink)《通信原理》实验仿真(模拟部分)
基于Matlab(Simulink)《通信原理》实验仿真(模拟部分)基于Matlab(Simulink)《通信原理》实验仿真(模拟部分)摘要模拟通信在通信系统中的使用非常广泛,而MATLAB(Simulink)是用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,它可以解决包括信号和图像处理、通讯等众多应用领域中的问题。
利用MATLAB集成环境下的M文件和Simulink工具箱可以完成通讯系统设计与仿真,本文主要是利用MATLAB集成环境下的M文件,编写程序来实现AM、FM、VSB调制与解调过程,并分别绘制出其信号波形。
再通过Simulink工具箱对模拟通信系统进行建模仿真。
Simulation of communication in a communication system is very extensive, and the use of MATLAB (Simulink) is used to algorithm development, data visualization, data analysis and numerical calculation of the senior technical calculation language and interactive environment, it can solve the including signal and image processing, communicationetc many applications in question. MATLAB integration environment Mfiles and Simulink tool box can complete communication system design and simulation, this paper is mainly use of MATLAB integration environment, programming of the M files to achieve AM, FM, VSB modulation and demodulation process, and separately plot its signal waveform. Again through Simulink communication system toolbox of simulation modeling simulation .关键词模拟信号;AM;FM;VSB;调制解调;MATLAB(Simulink)目录:第一章绪论第二章理论与方法2.1 matlab简介2.2 Simulink简介2.3 通信原理概述第三章设计方案3.1用 MATLAB的M文件进行模拟调制3.1.1 基于MATLAB的AM信号调制与解调3.1.2 基于MATLAB的FM信号调制与解调3.1.3 基于MATLAB的VSB信号调制与解调3.2用Simulink对模拟通信系统进行建模仿真3.2.1频分复用和超外差接收机的仿真模型3.2.2调频立体声接收机模型第四章小结参考文献致谢附录1:程序清单第一章绪论调制在通信系统中的作用至关重要。
通信原理实验的MATLAB仿真讲义(一、二)
数据通信原理实验的MATLAB仿真讲义MATLAB原意为“矩阵实验室—MA-TrixLABoratory”,它是目前控制界国际上最流行的软件,它除了传统的交互式编程之外,还提供了丰富可靠的矩阵运算、图形绘制、数据和图象处理、Windows编程等便利工具。
MATLAB还配备了大量工具箱,特别是还提供了仿真工具软件SIMULINK。
SIMULINK这一名字比较直观地表明了此软件的两个显著的功能:SIMU(仿真)与LINK(连接),亦即可以利用鼠标在模型窗口上“画”出所需的系统模型,然后利用SIMULINK提供的功能对控制系统进行仿真和线性化分析。
MATLAB在80年代一出现,首先是在控制界得到研究人员的瞩目。
随着MA T-LAB软件的不断完善,特别是仿真工具SIMULINK的出现,使MA TLAB的应用范围越来越广。
MATLAB的仿真环境(simulink)提供的系统模型库包括以下几个子模型库:Sources(输入源)、Sinks(输出源)、Discrete(离散时间系统)、Linear(线性环节)、Non-linear(非线性环节)、Connections(连接及接口)、Extras(其它环节)。
打开子模型库,你会发现每个模型库都包含许多个子模块,比如Sources模型库里含有阶跃函数、正弦函数、白噪声函数、MATLAB空间变量、信号发生器等子模块。
另外在Extras子模型库下还有一个BlockLibrary,集中了子模型库中最常用及其它常用的子模块,使用起来特别方便。
通信系统一般都可以建立数学模型,在数学模型中,主要包括乘法器、加法器、信号发生器、滤波器等,而这些在上述的simulink 系统模型库中一般都可找到,对于没有的模块(如伪随机信号发生器),可自己根据掌握的技术生成所需的子模块,随时调用。
这样就可根据数学模型,建立通信系统的仿真模型。
应用MA TLAB下的SIMULINK仿真工具可以很方便地进行通信系统仿真,利用SIMULINK仿真工具下的现有子模块进行仿真。
Matlab 通信系统建模与仿真例题源代码-第二章
% ch2example1prg1.mdt=1e-4; % 仿真采样间隔T=3*1e-3; % 仿真终止时间t=0:dt:T;input=2*cos(2*pi*1000*t); % 输入被调信号carrier=5*cos(2*pi*1e4*t); % 载波output=(2+0.5*input).*carrier; % 调制输出% 作图: 观察输入信号, 载波, 以及调制输出subplot(3,1,1); plot(t,input,'LineWidth',3);xlabel('时间 t');ylabel('被调信号');subplot(3,1,2); plot(t,carrier,'LineWidth',3);xlabel('时间t');ylabel('载波');subplot(3,1,3); plot(t,output,'LineWidth',3);xlabel('时间t');ylabel('调幅输出');% ch2example1prg2.mclear; % 清空内存变量,以避免以往运行的结果影响本程序dt=1e-5; % 仿真采样间隔T=3*1e-3; % 仿真终止时间t=0:dt:T;for k=1:length(t) % 基于时间流的仿真计算input(k)=2*cos(2*pi*1000*t(k)); % 第k个仿真步进时的输入被调信号carrier(k)=5*cos(2*pi*1e4*t(k)); % 第k个仿真步进时的载波output(k)=(2+0.5*input(k)).*carrier(k);% 第k个仿真步进时的调制输出end% 作图: 观察输入信号, 载波, 以及调制输出subplot(3,1,1); plot(t,input,'LineWidth',3);xlabel('时间 t');ylabel('被调信号');subplot(3,1,2); plot(t,carrier,'LineWidth',3);xlabel('时间t');ylabel('载波');subplot(3,1,3); plot(t,output,'LineWidth',3);xlabel('时间t');ylabel('调幅输出');% ch2example1prg3.mdt=1e-6; % 仿真采样间隔T=2*1e-3; % 仿真的帧周期for N=0:500 % 总共仿真的帧数t=N*T+(0:dt:T); % 帧中的取样时刻input=2*cos(2*pi*1005*t); % 输入被调信号carrier=5*cos(2*pi*(1e4)*t+0.1*randn); % 载波output=(2+0.5*input).*carrier; % 调制输出noise=randn(size(t)); % 噪声r=output+noise; % 调制信号通过加性噪声信道% 作图: 观察输入信号, 载波, 以及调制输出subplot(3,1,1); plot([0:dt:T],input,'LineWidth',3);xlabel('时间t');ylabel('被调信号');text(T*2/3,1.5,['当前帧数: N=',num2str(N)]); subplot(3,1,2); plot([0:dt:T],carrier,'LineWidth',3);xlabel('时间 t');ylabel('载波');subplot(3,1,3); plot([0:dt:T],r,'LineWidth',3);xlabel('时间 t');ylabel('调幅输出');set(gcf,'DoubleBuffer','on'); % 双缓冲避免作图闪烁drawnow;end% ch2example1prg25.m% 采用较低速率仿真,并用样条插值使得结果精细化simurate=3000; % 较低仿真速率mysimopts = simset('Solver','ode5'); % 设置仿真求解器为ode5的mysimopts = simset(mysimopts,'FixedStep',1./simurate); % 设置仿真步进timespan=[0, 0.01]; % 仿真时间段参数sim('ch2example25',timespan,mysimopts); % 设置仿真参数,仿真时间段并执行仿真plot(simout.time,simout.signals.values,'o-k');hold on;axis([0 0.005 -2 2]);t=timespan(1):1/30000:timespan(2); % 插值时间序列intp_y=interp1(simout.time,simout.signals.values,t,'spline');% 样条插值plot(t,intp_y,'xr'); % 画出插值结果% 采用较高速率仿真simurate=30000; % 较高仿真速率mysimopts = simset(mysimopts,'FixedStep',1./simurate); % 设置仿真步进sim('ch2example25',timespan,mysimopts); % 设置仿真参数,仿真时间段并执行仿真plot(simout.time,simout.signals.values,'b');% 画出仿真结果legend('较低速率仿真输出波形','样条插值精细化的结果','较高速率仿真输出波形');% ch2example2prg1.mdt=1e-5; % 仿真采样间隔R=1e3; % 电阻值C=1e-6; % 电容量T=5*1e-3; % 仿真区间从 -T 到 +Tt=-T:dt:T; % 计算的离散时刻序列y(1)=0; % 电容电压初始值, 在时间小于零区间将保持不变% 如果要仿真零输入响应, 可设置 y(1)=1 等非零值.% ----输入信号设定:可选择: 零输入,阶跃输入,正弦输入,方波输入等----x=zeros(size(t)); % 初始化输入信号存储矩阵x=1*(t>=0); % 在0时刻的输入信号跃变为1, 即输入为阶跃信号.% 如果要仿真零输入响应, 这里可设 x=0 即可% x=sin(2*pi*1000*t).*(t>=0); % 这是从0时刻开始的1000Hz的正弦信号% x=square(2*pi*500*t).*(t>=0); % 这是从0时刻开始的500Hz的方波信号% 仿真开始, 注意: 设零时刻之前电路不工作, 系统状态保持不变for k=1:length(t)time=-T+k*dt;if time>=0y(k+1)=y(k)+1./(R*C)*(x(k)-y(k))*dt; %递推求解下一个仿真时刻的状态值elsey(k+1)=y(k); % 在时间小于零时设电路断开,系统不工作endendsubplot(2,1,1);plot(t,x(1:length(t)),'LineWidth',3);axis([-T T -1.1 1.1]);xlabel('t');ylabel('input');subplot(2,1,2);plot(t,y(1:length(t)),'LineWidth',3);axis([-T T -1.1 1.1]);xlabel('t');ylabel('output');% ch2example3prg1.mdt=0.0001; % 仿真步进T=15; % 仿真时间长度t=0:dt:T; % 仿真计算时间序列g=9.8; % 重力加速度L=1; % 摆线长度m=10; % 摆锤质量k=5; % 空气阻力比例系数theta0=3.1; % 初始摆角设置v0=0; % 初始摆速设置v=zeros(size(t)); % 程序存储变量预先初始化,可提高执行速度theta=zeros(size(t));v(1)=v0; % 初始值赋值theta(1)=theta0;for n=1:length(t) % 仿真求解开始v(n+1)=v(n)+(g*sin(theta(n))-k./m.*v(n)).*dt;theta(n+1)=theta(n)-1./L.*v(n).*dt;end% 使用双坐标系统来作图, 注意作图和图形标注的技巧[AX,H1,H2] = plotyy(t,v(1:length(t)),t,theta(1:length(t)),'plot'); set(H1,'LineStyle','-'); % 设置作图线型set(H2,'LineStyle','-.');set(get(AX(1),'Ylabel'),'String','线速度 v(t) m/s');% 坐标标注set(get(AX(2),'Ylabel'),'String','角位移 \theta(t) rad ');xlabel('时间 t ');legend(H1,'线速度 v(t)',2);legend(H2,'角位移 \theta(t)',1);% ch2example5prg1.mdt=0.01; % 仿真步进T=15; % 仿真时间长度t=0:dt:T; % 仿真计算时间序列g=9.8; % 重力加速度L=1; % 摆线长度m=10; % 摆锤质量k=5; % 空气阻力比例系数theta0=3.1; % 初始摆角设置v0=0; % 初始摆速设置x0=[v0;theta0]; % 初始状态赋值par=[g;k;m;L]; % 系统参数赋值% 以欧拉算法计算并作图[t_out, x_out]=eulerode('pendulumstateeq',t', x0, [], par);plot(t_out, x_out(:,1),'-.b');hold on;% 以ode45算法计算并作图对比[t_out, x_out]=ode45('pendulumstateeq',t', x0, [], par);plot(t_out, x_out(:,1),'-k');xlabel('时间 t ');ylabel('线速度 m/s');legend('欧拉算法','ode45算法');% ch2example6main.mclear;v0=0; y0=1; % 球的初始状态x_state=[v0,y0];% 将初始状态赋值到状态变量中dt=0.01; % 仿真步进t=0:dt:5; % 仿真时间序列K=0.85; % 碰撞衰减系数for k=1:length(t) % 仿真开始,每次循环向前推进一个仿真步进dtx(k,:)=x_state; % 记录并保存当前状态的计算结果[t_out,x_out]=ode45('ch2example6statefun',[t(k),t(k)+dt],x_state);% 计算下一个时刻的新状态% 可换用ode23、ode113、ode23t、ode15s、ode23s以及ode23tb求解器 x_state=x_out(length(x_out),:); % 更新状态if (x_state(2)<=0) & (x_state(1)<0) % 当速度为负(球向下运动)且已经接触碰撞面x_state(1)=-K*x_state(1); % 处理碰撞瞬间情况:速度反向并衰减Kend% 动画作图:显示小球弹跳过程y=x_state(2); % 小球当前位置subplot(2,1,1);plot(0,y,'o');axis([-2 2 -0.1 1]); % 坐标范围固定set(gcf,'DoubleBuffer','on'); % 双缓冲避免作图闪烁drawnow; % 立即显示作图end% 仿真结束。
基于matlab通信系统仿真——信源编解码课程设计报告
一、设计题目◆基于MATLAB通信系统仿真——信源编解码。
二、实验内容及要求◆内容:完成对一模拟信号的抽样、量化、编码,然后利用Huffman信源编码对其进行数据压缩,再利用(15,11)的线性分组码进行信道编码,然后采用DPSK调制方式调制,接着通过信道;在接收端进行其逆过程,即先解调(可采用相干解调或差分相干解调),再依次为信道译码,Huffman信源译码,PCM译码。
◆要求:利用相关知识,建立系统模型,完成各个模块的代码设计。
三、实验过程(详细设计)◆通信系统模型:◆ 本实验主函数框图:◆ 分步设计:抽样部分([sg1,sg2]=Sampling(fs)):函数功能:对原始信号进行抽样;函数参数:fs 抽样频率(须大于等于两倍的信号最高频率); 函数返回值:sg1表示原始信号,sg2表示抽样信号; 实现:根据抽样频率fs 在一个周期里抽取fs 个值即可。
进制转换部分([h]=dextobin(n,n_no)):函数功能:将十进制数转换成二进制数;函数参数:n 表示待转换的十进制数,n_no 表示要将n 转换为二进制数的位数; 函数返回值:h 表示n 的n_no 位二进制数;实现:首先判定n 是否为整数,如果不是则将其先进行四舍五入处理,然后将处理后的n ’转换成位数与n_no 相同的二进制数,前面多余的位用零表示。
PCM 编码部分([pc]=PCM_code(sg2)):函数功能:对抽样值sg2进行PCM 编码;函数参数:sg2表示通过抽样函数Sampling 抽样后的离散值;函数返回值:pc 表示sg2中的每一个值通过PCM 编码后的8位二进制码组的十进制数形式(说明:之所以转换成十进制数,是为了在Huffman 编码时的方便)。
实现:以一个实际的数为例,首先确定这个数拥有多少个量化单位(1/2048),然后编码,如果为负则第一位为0,否则为1;接着根据刚才计算得到的量化单位判断其段落,得到段落码;最后确定段内码,方法:先计算每一端的量化间隔22i i D -=(注意:此处的i D 是一量化单位为基础的,而不是最小量化间隔)i 为段落值,然后再利用计算式(2)((2)/)i i G fix x D +=-,得到段内段落数G ,再将G 转换成二进制数,完成编码。
Matlab通信系统建模与仿真例题源代码-第五章
% ch5example2prg1.mSNR_in_dB=-10:2:30;SNR_in=10.^(SNR_in_dB./10); % 信道信噪比m_a=0.3; % 调制度P=0.5+(m_a^2)/4; % 信号功率for k=1:length(SNR_in)sigma2=P/SNR_in(k); % 计算信道噪声方差并送入仿真模型sim('ch5example2.mdl');% 执行仿真SNRdemod(k,:)=SNR_out; % 记录仿真结果endplot(SNR_in_dB, SNRdemod);xlabel('输入信噪比dB');ylabel('解调输出信噪比dB');legend('包络检波','相干解调');% ch5example7prog1.mclear;Fs=10000; % 仿真的采样率t=1/Fs:1/Fs:1; % 仿真时间点m_t(Fs*1)=0; % 基带信号变量初始化for F=150:400 % 基带信号发生:频率150Hz~400Hzm_t=m_t+0.003*sin(2*pi*F*t)*(400-F); % 幅度随线性递减endm_t90shift=imag(hilbert(m_t)); % 基带信号的希尔伯特变换carriercos=cos(2*pi*1000*t); % 1000Hz载波coscarriersin=sin(2*pi*1000*t); % 1000Hz正交载波sins_SSB1=m_t.*carriercos-m_t90shift.*carriersin; % 上边带SSBs_SSB2=m_t.*carriercos+m_t90shift.*carriersin; % 下边带SSB% 下面作出各波形以及频谱figure(1);subplot(4,2,1); plot(t(1:100),carriercos(1:100),...t(1:100),carriersin(1:100),'--r'); % 载波subplot(4,2,2); plot([0:9999],abs(fft(carriercos))); % 载波频谱axis([0 2000 -500 6000]);subplot(4,2,3); plot(t(1:100),m_t(1:100)); % 基带信号subplot(4,2,4); plot([0:9999],abs(fft(m_t))); % 信号频谱axis([0 2000 -500 6000]);subplot(4,2,5); plot(t(1:100),s_SSB1(1:100)); % SSB波形上边带subplot(4,2,6); plot([0:9999],abs(fft(s_SSB1))); % SSB频谱上边带axis([0 2000 -500 6000]);subplot(4,2,7); plot(t(1:100),s_SSB2(1:100)); % SSB波形下边带subplot(4,2,8); plot([0:9999],abs(fft(s_SSB2))); % SSB频谱下边带axis([0 2000 -500 6000]);% ch5example8prog1.mclear;Fs=10000; % 仿真的采样率t=1/Fs:1/Fs:1; % 仿真时间点m_t(Fs*1)=0; % 基带信号变量初始化for F=150:400 % 基带信号发生:频率150Hz~400Hzm_t=m_t+0.003*sin(2*pi*F*t)*(400-F); % 幅度随线性递减endm_t90shift=imag(hilbert(m_t)); % 基带信号的希尔伯特变换carriercos=cos(2*pi*1000*t); % 1000Hz载波coscarriersin=sin(2*pi*1000*t); % 1000Hz正交载波sins_SSB1=m_t.*carriercos-m_t90shift.*carriersin; % 上边带SSBout=s_SSB1.*carriercos; % 相干解调[a,b]=butter(4, 500/(Fs/2)); % 低通滤波器设计4阶,截止频率为500Hz demodsig=filter(a,b,out); % 解调输出% 下面作出各波形以及频谱figure(1);subplot(3,2,1); plot(t(1:100),s_SSB1(1:100)); % SSB波形subplot(3,2,2); plot([0:9999],abs(fft(s_SSB1))); % SSB频谱axis([0 5000 -500 6000]);subplot(3,2,3); plot(t(1:100),out(1:100)); % 相干解调波形subplot(3,2,4); plot([0:9999],abs(fft(out))); % 相干解调频谱axis([0 3000 -500 6000]);subplot(3,2,5); plot(t(1:100),demodsig(1:100)); % 低通输出信号subplot(3,2,6); plot([0:9999],abs(fft(demodsig)));% 低通输出信号的频谱axis([0 3000 -500 6000]);% ch5example8prog2.mclear;Fs=10000; % 仿真的采样率t=1/Fs:1/Fs:1; % 仿真时间点m_t(Fs*1)=0; % 基带信号变量初始化for F=150:400 % 基带信号发生:频率150Hz~400Hzm_t=m_t+0.003*sin(2*pi*F*t)*(400-F); % 幅度随线性递减endm_t90shift=imag(hilbert(m_t)); % 基带信号的希尔伯特变换carriercos=cos(2*pi*1000*t); % 1000Hz载波coscarriersin=sin(2*pi*1000*t); % 1000Hz正交载波sins_SSB1=m_t.*carriercos-m_t90shift.*carriersin; % 上边带SSBout=s_SSB1.*cos(2*pi*1018*t+1);% 存在频率误差的相位误差时的相干解调[a,b]=butter(4, 500/(Fs/2)); % 低通滤波器设计4阶,截止频率为500Hz demodsig=filter(a,b,out); % 解调输出% 下面作出各波形以及频谱figure(1);subplot(3,2,1); plot(t(1:100),s_SSB1(1:100)); % SSB波形subplot(3,2,2); plot([0:9999],abs(fft(s_SSB1))); % SSB频谱axis([0 5000 -500 6000]);subplot(3,2,3); plot(t(1:100),out(1:100)); % 相干解调波形subplot(3,2,4); plot([0:9999],abs(fft(out))); % 相干解调频谱axis([0 3000 -500 6000]);subplot(3,2,5); plot(t(1:100),demodsig(1:100)); % 低通输出信号subplot(3,2,6); plot([0:9999],abs(fft(demodsig)));% 低通输出信号的频谱axis([0 3000 -500 6000]);% ch5example9prog1.m[wav,fs]=wavread('GDGvoice8000.wav');t_end=1/fs *length(wav); % 计算声音的时间长度Fs=50000; % 仿真系统采样率t=1/Fs:1/Fs:t_end; % 仿真系统采样时间点% 设计300Hz~3400Hz的带通预滤波器H(z)[fenzi,fenmu]=butter(3,[300 3400]/(fs/2));% 对音频信号进行预滤波wav=filter(fenzi,fenmu,wav);% 利用插值函数将音频信号的采样率提升为Fs=50KHzwav=interp1([1/fs:1/fs:t_end],wav,t,'spline');wav_hilbert=imag(hilbert(wav)); % 音频信号的希尔伯特变换fc=10000; % 载波频率HzSSB_OUT=wav.*cos(2*pi*fc*t)-wav_hilbert.*sin(2*pi*fc*t); % 单边带调制figure(1); % 观察调制前后频谱subplot(2,2,1); plot(wav(53550:53750)); axis([0 200 -0.3 0.3]);subplot(2,2,2); psd(wav, 10000, Fs); axis([0 25000 -20 10]);subplot(2,2,3); plot(SSB_OUT(53550:53750)); axis([0 200 -0.3 0.3]);subplot(2,2,4); psd(SSB_OUT, 10000, Fs); axis([0 25000 -20 10]); wavwrite(0.5*SSB_OUT,Fs,'SSB_OUT.wav'); % 将SSB调制输出存盘备用% ch5example9prog2.mfunction out=ch5example9prog2(in, SNRdB)% SNR_dB设定信噪比% in 输入信号序列% out 信道输出序列Fs=50000; %系统采样率Power_of_in=var(in);Power_of_noise=Power_of_in/(10.^(SNRdB/10));bandwidth=13500-10000; % 信道带宽N0=Power_of_noise/bandwidth; % 噪声功率谱密度值W/HzGauss_noise=sqrt(N0*Fs/2).*randn(size(in));[num, den]=butter(4, [10000 13500]/(Fs/2)); % 带通信道10KHz到13.5KHz signal_of_filter_out=filter(num, den, in);noise_of_filter_out=filter(num, den, Gauss_noise);SNR_dB=10*log10(var(signal_of_filter_out)/var(noise_of_filter_out))% 测量得出的信噪比out=signal_of_filter_out+noise_of_filter_out; % 信道输出% ch5example9prog3.mclear;[recvsignal, Fs]=wavread('Channel_OUT.wav');% 读入信道输出信号数据t=(1/Fs:1/Fs: length(recvsignal)/Fs)';fc_local=10000-200; % 本地载波频率9.8KHzlocal_carrier=cos(2*pi*fc_local.*t); % 本地载波xianggan_out=recvsignal.*local_carrier; % 相干解调[fenzi,fenmu]=butter(3,[300 3400]/(Fs/2)); % 设计300Hz~3400Hz的带通滤波器demod_out=filter(fenzi,fenmu,xianggan_out); % 对相干输出信号进行滤波sound(demod_out/max(demod_out), Fs); % 播放解调音频wavwrite(demod_out,Fs,'SSBDemod_OUT.wav'); % 保存输出信号% ch5example10prog1.mclear;Y=[1:-1/7:0].*255; % 8级灰度N=8; % 8*N 列数S=ones(N,1);Y=S*Y;Y=reshape(Y,1,N*8);% 将矩阵扩大指定列数的一行M=40; % M 行数S=ones(M,1);Y=S*Y; % 重复M次矩阵行,得出图像矩阵I=uint8(Y); % 转换为uint8格式imshow(I); % 显示imwrite(I,'graybar.tif','tif'); % 并保存为图像文件% ch5example11prog1.mclear;I=imread('graybar.tif');% 读入图像(由上例生成)img=double(I')/255; % 转换为双精度数以便计算[M,N]=size(img);for K=1:2for column=K:2:N % K=1扫描奇数行for row=1:Mdot=img(row,column); % 取当前扫描点的灰度值greydot=[dot,dot,dot]; % R,G,B均设置为相同值,即显示灰度plot(row,N-column,'s','MarkerFaceColor',greydot,...'MarkerEdgeColor',greydot,'MarkerSize',6);hold on; % 保持扫描点axis([1,M, 1, N]); % 作图范围set(gcf,'DoubleBuffer','on');% 双缓冲避免作图闪烁drawnow; % 立即作图endendend% ch5example12prg1.mclear;R=zeros(100,100);G=zeros(100,100);B=zeros(100,100);R(1:50,30:100)=255;G(30:100,50:100)=255;B(1:70,1:70)=255; % 三基色产生I(:,:,1)=R;I(:,:,2)=G;I(:,:,3)=B; % 合成为100*100图像矩阵imshow(uint8(I));% 显示% ch5example13prg1.m% 生成400*480彩条图像clear;R=[1 1 0 0 1 1 0 0];G=[1 1 1 1 0 0 0 0];B=[1 0 1 0 1 0 1 0];N=60; % N*8列S=ones(N,1);R=S*R; R=reshape(R,1,N*8);G=S*G; G=reshape(G,1,N*8);B=S*B; B=reshape(B,1,N*8);M=400; % 行数S=ones(M,1);R=S*R; G=S*G; B=S*B; % 得出三基色矩阵I(:,:,1)=R; I(:,:,2)=G; I(:,:,3)=B; % 组合I=uint8(I*255); % 类型转换imshow(I); % 显示并保存imwrite(I,'colorbar.tif','tif');% ch5example14prg1.mclear;I=imread('colorbar.tif');% 或用autumn.tif,sydney.JPG等图像文件figure(1);imshow(I);I=double(I);[m,n,p]=size(I);I=-(0.75-0.125)./(255).*I+0.75; % 换算为0.125到0.75电平R=I(:,:,1);G=I(:,:,2);B=I(:,:,3);% 三基色分离R=reshape(R',1,m*n); % 转换为1维(红)G=reshape(G',1,m*n); % 转换为1维(绿)B=reshape(B',1,m*n); % 转换为1维(蓝)Y=0.30*R+0.59*G+0.11*B;% 亮度R_Y=R-Y; % 色差R0B_Y=B-Y; % 色差B0V=0.877*R_Y; % 色差电平压缩U=0.493*B_Y; % 色差电平压缩f_c=283.5*15625; % 副载波频率tvY=[interp1(Y,(1:n/980:m*n),'nearest')];% 插值:行采样980点tvV=[interp1(V,(1:n/980:m*n),'nearest')];% 插值tvU=[interp1(U,(1:n/980:m*n),'nearest')];% 插值% 全电视信号产生for h=1:(m-2)s(1280*h+(1:102))=0.75; % 消隐脉冲s(1280*h+(103:197))=1; % 行同步头s(1280*h+(198:300))=0.75;% 消隐脉冲s(1280*h+(301:1280))=tvY(h*980+(-1:978));% 图像一行像素-亮度% 色差VsV(1280*h+(1:300))=0; % 消隐部分sV(1280*h+(220:265))=0.12;% 色同步选通sV(1280*h+(301:1280))=tvV(h*980+(-1:978));% 图像信号部分% 色差UsU(1280*h+(1:300))=0;sU(1280*h+(301:1280))=tvU(h*980+(-1:978));endt=0:0.5e-7:0.5e-7*(length(s)-1);% 计算时间点序列,采样率20MHzF_v=sV.*cos(2*pi*f_c.*t); % 色差信号正交调制F_u=sU.*sin(2*pi*f_c.*t);c=F_v+F_u; % 调制输出的色差信号TVsignal=s+c; % 合成彩色电视信号figure(2); plot(t,TVsignal); xlabel('时间');% 彩色电视信号figure(3); plot(t,s); xlabel('时间'); % 亮度信号% 功率谱计算[Pxxcc,F]=psd(c,1e5,2e7);figure(4); plot(F,10*log10(Pxxcc),'g');hold on;% 调制后的色差信号频谱[Pxx,F]=psd(s,1e5,2e7); % FFT长度为1e5点,故频率分辨率100Hz figure(4); plot(F,10*log10(Pxx),'k'); % 亮度信号频谱xlabel('频率Hz');ylabel('功率谱密度dB');% ch5example15prg1.mclear;ch5example14prg1; % 用实例5.14程序产生彩色全电视信号%---带限高斯信道---TVsignal=TVsignal+0.1*randn(size(TVsignal)); % 加入噪声[b,a]=butter(2,5e6/(20e6/2)); % 传输信道带宽5MHzTVsignal=filter(b,a,TVsignal); % 通过带限信道%---接收部分---[b,a]=butter(2,0.5e6/(20e6/2)); % 行同步滤波h_pulse=filter(b,a,TVsignal);h_pulse=h_pulse>0.87; % 行同步脉冲选出。
用MatLab仿真通信原理系列实验
用MatLab仿真通信原理系列实验一、引言通信原理是现代通信领域的基础理论,通过对通信原理的研究和仿真实验可以更好地理解通信系统的工作原理和性能特点。
MatLab作为一种强大的数学计算软件,被广泛应用于通信原理的仿真实验中。
本文将以MatLab为工具,介绍通信原理系列实验的仿真步骤和结果。
二、实验一:调制与解调1. 实验目的通过MatLab仿真,了解调制与解调的基本原理,并观察不同调制方式下的信号特征。
2. 实验步骤(1)生成基带信号:使用MatLab生成一个基带信号,可以是正弦波、方波或任意复杂的波形。
(2)调制:选择一种调制方式,如调幅(AM)、调频(FM)或相移键控(PSK),将基带信号调制到载波上。
(3)观察调制后的信号:绘制调制后的信号波形和频谱图,观察信号的频谱特性。
(4)解调:对调制后的信号进行解调,还原出原始的基带信号。
(5)观察解调后的信号:绘制解调后的信号波形和频谱图,与原始基带信号进行对比。
3. 实验结果通过MatLab仿真,可以得到不同调制方式下的信号波形和频谱图,观察到调制后信号的频谱特性和解调后信号的还原效果。
可以进一步分析不同调制方式的优缺点,为通信系统设计提供参考。
三、实验二:信道编码与解码1. 实验目的通过MatLab仿真,了解信道编码和解码的基本原理,并观察不同编码方式下的误码率性能。
2. 实验步骤(1)选择一种信道编码方式,如卷积码、纠错码等。
(2)生成随机比特序列:使用MatLab生成一组随机的比特序列作为输入。
(3)编码:将输入比特序列进行编码,生成编码后的比特序列。
(4)引入信道:模拟信道传输过程,引入噪声和干扰。
(5)解码:对接收到的信号进行解码,还原出原始的比特序列。
(6)计算误码率:比较解码后的比特序列与原始比特序列的差异,计算误码率。
3. 实验结果通过MatLab仿真,可以得到不同编码方式下的误码率曲线,观察不同信道编码方式对信号传输性能的影响。
通信原理Matlab仿真实验报告
实验二1、用Matlab模拟图形A律解码⑴Matlab程序代码:①建立函数ADecode()function y=ADecode(code,n) codesize=size(code);cr_len=codesize(1);cl_len=codesize(2);ca=zeros(1,cl_len-1);for i=1:cr_lenca=code(i,2:n);s=0;for j=1:n-1s=s+ca(j)*2^(n-1-j);enda=code(i,1);y(i)=s*((-1)^(a+1)); endy=y/(2^(n-1));A=87.6;A1=1+log(A);for j=1:length(y)if(y(j)>=0)if(y(i)<=1/A1)y(j)=y(j)*A1/A;elsey(j)=exp(y(j)*A1-1/A);endelsetemp=-y(j);if(temp<=1/A1)y(j)=-temp*A1/A;elsey(j)=-exp(temp*A1-1)/A;endendend②建立函数APCM()function code=APCM(x,n)xmax=max(abs(x));x=x/xmax;xlen=length(x);y=zeros(1,xlen);A=87.6;A1=1+log(A);for i=1:xlenif x(i)>=0if x(i)<=1/Ay(i)=(A*x(i))/A1;elsey(i)=(1+log(A*x(i)))/A1;endelsex1=-x(i);if x1<=1/Ay(i)=-(A*x1)/A1;elsey(i)=-(1+log(A*x1))/A1;endendendy1=y*(2^(n-1)-1);y1=round(y1);code=zeros(length(y1),n); c2=zeros(1,n-1);for i=1:length(y1)if(y1(i)>0)c1=1;elsec1=0;y1(i)=-y1(i);endfor j=1:n-1r=rem(y1(i),2);y1(i)=(y1(i)-r)/2;c2(j)=r;endc2=fliplr(c2);code(i,:)=[c1 c2];实验三1、用Matlab模拟双极性归零码⑴ Matlab程序代码:function y=drz(x)t0=300;x=[1 0 0 1 1 0 0 0 0 1 0 1];t=0:1/t0:length(x);for i=1:length(x);if(x(i)==1)for j=1:t0/2y(t0/2*(2*i-2)+j)=1;y(t0/2*(2*i-1)+j)=0;endelsefor j=1:t0/2y(t0/2*(2*i-2)+j)=-1;y(t0/2*(2*i-1)+j)=0;endendendy=[y,x(i)];M=max(y);m=min(y); subplot(211)plot(t,y);grid on;axis([0,i,m-0.1,M+0.1]);title('1 0 0 1 1 0 0 0 0 1 0 1 ');⑵Matlab仿真结果:2、用Matlab产生2FSK信号⑴ Matlab程序代码:①建立函数fskdigital()function fskdigital(s,f1,f2) t=0:2*pi/99:2*pi;m1=[];c1=[];b1=[];for n=1:length(s)if s(n)==0;m=ones(1,100);c=sin(f2*t);b=zeros(1,100) else s(n)==1;m=ones(1,100);c=sin(f1*t);b=ones(1,100)endm1=[m1 m]; c1=[c1 c]; b1=[b1 b]; endfsk=c1.*m1;subplot(211);plot(b1,'r')title('原始信号');axis([0 100*length(s) -0.1 1.1]);grid on;subplot(212);plot(fsk)title('2FSK信号');⑵仿真结果:①三角波原图②用矩形波近似的冲击函数③分解后的三角波④经低通还原的三角波。
MATLAB仿真实例(通信原理)
一、实验目的 (1)二、实验题目 (1)三、实验内容 (1)3.1傅里叶变换与傅里叶反变换 (1)3.2题目一:正弦信号波形及频谱 (2)3.2.1仿真原理及思路 (2)3.2.2程序流程图 (3)3.2.3仿真程序及运行结果 (3)3.2.4实验结果分析 (5)3.3题目二:单极性归零(RZ)波形及其功率谱 (5)3.3.1仿真原理及思路 (5)3.3.2程序流程图 (6)3.3.3仿真程序及运行结果 (6)3.3.4实验结果分析 (8)3.4题目三:升余弦滚降波形的眼图及其功率谱 (8)3.4.1仿真原理及思路 (8)3.4.2程序流程图 (8)3.4.3仿真程序及运行结果 (8)3.4.4实验结果分析: (10)3.5题目四:完成PCM编码及解码的仿真 (11)3.5.1仿真原理及思路 (11)3.5.2程序流程图 (12)3.5.3仿真程序及运行结果 (12)3.5.4实验结果分析 (15)3.6附加题一:最佳基带系统的Pe~Eb\No曲线,升余弦滚降系数a=0.5,取样值的偏差是Ts/4 (16)3.6.1仿真原理及思路 (16)3.6.2程序流程图 (16)3.6.3仿真程序及运行结果 (16)3.6.4实验结果分析 (18)3.7附加题二:试作出Pe~Eb/No曲线。
升余弦滚降系数a=0.5,取样时间无偏差,但信道是多径信道,C(f)=|1-0.5-j2 ft|,t=T s/2 (18)3.7.1仿真原理及思路 (18)3.7.2程序流程图 (19)3.7.3仿真程序及运行结果 (19)3.7.4实验结果分析 (21)四、实验心得 (21)一、 实验目的⏹ 学会MATLAB 软件的最基本运用。
MATLAB 是一种很实用的数学软件,它易学易用。
MATLAB 对于许多的通信仿真类问题来说是很合适的。
⏹ 了解计算机仿真的基本原理及方法,知道怎样通过仿真的方法去研究通信问题。
⏹ 加深对通信原理课程有关内容的理解。
MATLAB通信仿真在《通信原理》课程教学中的应用
MATLAB通信仿真在《通信原理》课程教学中的应用[摘要]本文介绍了matlab软件中通信工具箱的两种仿真方法,并重点阐述了在matlab/simulink环境下对通信系统进行可视化动态仿真的一般步骤和实现方法。
最后通过教学范例和实验结果说明,matlab通信系统仿真模型能够反映通信系统的动态工作情况,具有较强的演示性、可视性和实用性,是《通信原理》课程教学中强有力的辅助工具。
[关键词]matlab simulink 仿真通信系统一、引言《通信原理》是通信及相关专业的专业基础课,是许多后续专业课程的基础。
其中很多基本概念、重要原理将贯穿整个通信专业的各门课程之中。
然而,对于刚刚接触通信专业的学生来说,类似于调制、解调、抽样、量化、复用等概念及原理往往过于抽象,传统的教学方法很难高效的使学生从根本上理解这些概念、原理及过程。
将matlab通信系统的计算机仿真演示应用到《通信原理》的教学中,能够较好的解决这个问题。
采用matlab对基本原理和方法进行计算机仿真演示,能够使复杂的计算简单化,抽象的理论具体化、直观化,从而提高学习效率,增强学习兴趣,在一定程度还上培养学生进行通信系统工程设计的能力。
matlab最初是mathworks公司推出的一种数学应用软件,经过多年的发展,开发了包括通信系统在内的多个工具箱,从而成为目前科学研究和工程应用最流行的软件包之一。
matlab的动态仿真软件simlink提供了可视化的系统仿真环境和多个模型库,在模型库中提供了丰富的功能模块,采用模块化设计,可以方便、灵活地建立通用性较强的通信仿真模型。
matlab通信工具箱是一套用于通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包,主要由两部分组成:通信系统功能函数库和simulink通信系统仿真模型库。
下面分别从两个方面介绍matlab通信系统仿真方法。
二、使用通信系统函数库实现通信系统仿真matlab通信系统功能函数库[1]由70多个函数组成,每个函数又有多种选择参数,函数功能覆盖了现代通信系统的各个方面。
通信原理基于matlab的计算机仿真源代码
例错误!文档中没有指定样式的文字。
-1%周期信号(方波)的展开,fb_jinshi.mclose all;clear all;N=100; %取展开式的项数为2N+1项T=1;fs=1/T;N_sample=128; %为了画出波形,设置每个周期的采样点数dt = T/N_sample;t=0:dt:10*T-dt;n=-N:N;Fn = sinc(n/2).*exp(-j*n*pi/2);Fn(N+1)=0;ft = zeros(1,length(t));for m=-N:Nft = ft + Fn(m+N+1)*exp(j*2*pi*m*fs*t);endplot(t,ft)例错误!文档中没有指定样式的文字。
-4利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。
脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。
function [f,sf]= T2F(t,st)%This is a function using the FFT function to calculate a signal's Fourier %Translation%Input is the time and the signal vectors,the length of time must greater %than 2%Output is the frequency and the signal spectrumdt = t(2)-t(1);T=t(end);df = 1/T;N = length(st);f=-N/2*df:df:N/2*df-df;sf = fft(st);sf = T/N*fftshift(sf);脚本文件F2T.m定义了函数F2T,计算信号的反傅立叶变换。
function [t st]=F2T(f,sf)%This function calculate the time signal using ifft function for the input %signal's spectrumdf = f(2)-f(1);Fmx = ( f(end)-f(1) +df);dt = 1/Fmx;N = length(sf);T = dt*N;%t=-T/2:dt:T/2-dt;t = 0:dt:T-dt;sff = fftshift(sf);st = Fmx*ifft(sff);另写脚本文件fb_spec.m如下:%方波的傅氏变换, fb_spec.mclear all;close all;T=1;N_sample = 128;dt=T/N_sample;t=0:dt:T-dt;st=[ones(1,N_sample/2), -ones(1,N_sample/2)]; %方波一个周期subplot(211);plot(t,st);axis([0 1 -2 2]);xlabel('t'); ylabel('s(t)');subplot(212);[f sf]=T2F(t,st); %方波频谱plot(f,abs(sf)); hold on;axis([-10 10 0 1]);xlabel('f');ylabel('|S(f)|');%根据傅氏变换计算得到的信号频谱相应位置的抽样值sff= T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);plot(f,abs(sff),'r-')例错误!文档中没有指定样式的文字。
Matlab通信系统建模与仿真例题源代码-第三章
% ch3example1A.mclear;f_p=2400; f_s=5000; R_p=3; R_s=25; % 设计要求指标[n, fn]=buttord(f_p,f_s,R_p,R_s, 's'); % 计算阶数和截止频率Wn=2*pi*fn; % 转换为角频率[b,a]=butter(n, Wn, 's'); % 计算H(s)f=0:100:10000; % 计算频率点和频率范围s=j*2*pi*f; % s=jw=j*2*pi*fH_s=polyval(b,s)./polyval(a,s); % 计算相应频率点处H(s)的值figure(1);subplot(2,1,1); plot(f, 20*log10(abs(H_s))); % 幅频特性axis([0 10000 -40 1]);xlabel('频率Hz');ylabel('幅度dB');subplot(2,1,2); plot(f, angle(H_s)); % 相频特性xlabel('频率Hz');ylabel('相角rad');figure(2); freqs(b,a); % 也可用指令freqs直接画出H(s)的频率响应曲线。
% ch3example1B.mclear;f_p=2400; f_s=5000; R_p=3; R_s=25; % 设计要求指标[n, fn]=ellipord(f_p,f_s,R_p,R_s,'s'); % 计算阶数和截止频率Wn=2*pi*fn; % 转换为角频率[b,a]=ellip(n,R_p,R_s,Wn,'s'); % 计算H(s)f=0:100:10000; % 计算频率点和频率范围s=j*2*pi*f; % s=jw=j*2*pi*fH_s=polyval(b,s)./polyval(a,s); % 计算相应频率点处H(s)的值figure(1);subplot(2,1,1); plot(f, 20*log10(abs(H_s))); % 幅频特性axis([0 10000 -40 1]);xlabel('频率Hz');ylabel('幅度dB');subplot(2,1,2); plot(f, angle(H_s)); % 相频特性xlabel('频率Hz');ylabel('相角rad');figure(2); freqs(b,a); % 也可用指令freqs直接画出H(s)的频率响应曲线。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例错误!文档中没有指定样式的文字。
-1%周期信号(方波)的展开,fb_jinshi.mclose all;clear all;N=100; %取展开式的项数为2N+1项T=1;fs=1/T;N_sample=128; %为了画出波形,设置每个周期的采样点数dt = T/N_sample;t=0:dt:10*T-dt;n=-N:N;Fn = sinc(n/2).*exp(-j*n*pi/2);Fn(N+1)=0;ft = zeros(1,length(t));for m=-N:Nft = ft + Fn(m+N+1)*exp(j*2*pi*m*fs*t);endplot(t,ft)例错误!文档中没有指定样式的文字。
-4利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。
脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。
function [f,sf]= T2F(t,st)%This is a function using the FFT function to calculate a signal's Fourier %Translation%Input is the time and the signal vectors,the length of time must greater %than 2%Output is the frequency and the signal spectrumdt = t(2)-t(1);T=t(end);df = 1/T;N = length(st);f=-N/2*df:df:N/2*df-df;sf = fft(st);sf = T/N*fftshift(sf);脚本文件F2T.m定义了函数F2T,计算信号的反傅立叶变换。
function [t st]=F2T(f,sf)%This function calculate the time signal using ifft function for the input %signal's spectrumdf = f(2)-f(1);Fmx = ( f(end)-f(1) +df);dt = 1/Fmx;N = length(sf);T = dt*N;%t=-T/2:dt:T/2-dt;t = 0:dt:T-dt;sff = fftshift(sf);st = Fmx*ifft(sff);另写脚本文件fb_spec.m如下:%方波的傅氏变换, fb_spec.mclear all;close all;T=1;N_sample = 128;dt=T/N_sample;t=0:dt:T-dt;st=[ones(1,N_sample/2), -ones(1,N_sample/2)]; %方波一个周期subplot(211);plot(t,st);axis([0 1 -2 2]);xlabel('t'); ylabel('s(t)');subplot(212);[f sf]=T2F(t,st); %方波频谱plot(f,abs(sf)); hold on;axis([-10 10 0 1]);xlabel('f');ylabel('|S(f)|');%根据傅氏变换计算得到的信号频谱相应位置的抽样值sff= T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);plot(f,abs(sff),'r-')例错误!文档中没有指定样式的文字。
-5%信号的能量计算或功率计算,sig_pow.mclear all;close all;dt = 0.01;t = 0:dt:5;s1 = exp(-5*t).*cos(20*pi*t);s2 = cos(20*pi*t);E1 = sum(s1.*s1)*dt; %s1(t)的信号能量P2 = sum(s2.*s2)*dt/(length(t)*dt); %s2(t)的信号功率s[f1 s1f]= T2F(t,s1);[f2 s2f]= T2F(t,s2);df = f1(2)-f1(1);E1_f = sum(abs(s1f).^2)*df; %s1(t)的能量,用频域方式计算df = f2(2)-f2(1);T = t(end);P2_f = sum(abs(s2f).^2)*df/T; %s2(t)的功率,用频域方式计算figure(1)subplot(211)plot(t,s1);xlabel('t'); ylabel('s1(t)');subplot(212)plot(t,s2)xlabel('t'); ylabel('s2(t)');例错误!文档中没有指定样式的文字。
-6%方波的傅氏变换,sig_band.mclear all;close all;T=1;N_sample = 128;dt=1/N_sample;t=0:dt:T-dt;st=[ones(1,N_sample/2) -ones(1,N_sample/2)];df=0.1/T;Fx = 1/dt;f=-Fx:df:Fx-df;%根据傅氏变换计算得到的信号频谱sff= T^2*j*pi*f*0.5.*exp(-j*2*pi*f*T).*sinc(f*T*0.5).*sinc(f*T*0.5);plot(f,abs(sff),'r-')axis([-10 10 0 1]);hold on;sf_max = max(abs(sff));line([f(1) f(end)],[sf_max sf_max]);line([f(1) f(end)],[sf_max/sqrt(2) sf_max/sqrt(2)]); %交点处为信号功率下降3dB处Bw_eq = sum(abs(sff).^2)*df/T/sf_max.^2; %信号的等效带宽例错误!文档中没有指定样式的文字。
-7%带通信号经过带通系统的等效基带表示,sig_bandpass.mclear all;close all;dt = 0.01;t = 0:dt:5;s1 = exp(-t).*cos(20*pi*t); %输入信号[f1 s1f]= T2F(t,s1); %输入信号的频谱s1_lowpass = hilbert(s1).*exp(-j*2*pi*10*t); %输入信号的等效基带信号[f2 s2f]=T2F(t,s1_lowpass); %输入等效基带信号的频谱h2f = zeros(1,length(s2f));[a b]=find( abs(s1f)==max(abs(s1f)) ); %找到带通信号的中心频率h2f( 201-25:201+25 )= 1;h2f( 301-25:301+25) = 1;h2f = h2f.*exp(-j*2*pi*f2); %加入线性相位,[t1 h1] = F2T(f2,h2f); %带通系统的冲激响应h1_lowpass = hilbert(h1).*exp(-j*2*pi*10*t1); %等效基带系统的冲激响应figure(1)subplot(521);plot(t,s1);xlabel('t'); ylabel('s1(t)'); title('带通信号');subplot(523);plot(f1,abs(s1f));xlabel('f'); ylabel('|S1(f)|'); title('带通信号幅度谱');subplot(522)plot(t,real(s1_lowpass));xlabel('t');ylabel('Re[s_l(t)]');title('等效基带信号的实部');subplot(524)plot(f2,abs(s2f));xlabel('f');ylabel('|S_l(f)|');title('等效基带信号的幅度谱');%画带通系统及其等效基带的图subplot(525)plot(f2,abs(h2f));xlabel('f');ylabel('|H(f)|');title('带通系统的传输响应幅度谱'); subplot(527)plot(t1,h1);xlabel('t');ylabel('h(t)');title('带通系统的冲激响应');subplot(526)[f3 hlf]=T2F(t1,h1_lowpass);plot(f3,abs(hlf));xlabel('f');ylabel('|H_l(f)|');title('带通系统的等效基带幅度谱');subplot(528)plot(t1,h1_lowpass);xlabel('t');ylabel('h_l(t)');title('带通系统的等效基带冲激响应');%画出带通信号经过带通系统的响应及等效基带信号经过等效基带系统的响应tt = 0:dt:t1(end)+t(end);yt = conv(s1,h1);subplot(529)plot(tt,yt);xlabel('t');ylabel('y(t)');title('带通信号与带通系统响应的卷积')ytl = conv(s1_lowpass,h1_lowpass).*exp(j*2*pi*10*tt);subplot(5,2,10)plot(tt,real(yt));xlabel('t');ylabel('y_l(t)cos(20*pi*t');title('等效基带与等效基带系统响应的卷积×中心频率载波')例3-6%例:窄带高斯过程,文件 zdpw.mclear all; close all;N0=1; %双边功率谱密度fc=10; %中心频率B=1; %带宽dt=0.01;T=100;t=0:dt:T-dt;%产生功率为N0*B的高斯白噪声P = N0*B;st = sqrt(P)*randn(1,length(t));%将上述白噪声经过窄带带通系统,[f,sf] = T2F(t,st); %高斯信号频谱figure(1)plot(f,abs(sf)); %高斯信号的幅频特性[tt gt]=bpf(f,sf,fc-B/2,fc+B/2); %高斯信号经过带通系统glt = hilbert(real(gt)); %窄带信号的解析信号,调用hilbert函数得到解析信号glt = glt.*exp(-j*2*pi*fc*tt);[ff,glf]=T2F( tt, glt );figure(2)plot(ff,abs(glf));xlabel('频率(Hz)'); ylabel('窄带高斯过程样本的幅频特性')figure(3)subplot(411);plot(tt,real(gt));title('窄带高斯过程样本')subplot(412)plot(tt,real(glt).*cos(2*pi*fc*tt)-imag(glt).*sin(2*pi*fc*tt))title('由等效基带重构的窄带高斯过程样本')subplot(413)plot(tt,real(glt));title('窄带高斯过程样本的同相分量')subplot(414)plot(tt,imag(glt));xlabel('时间t(秒)'); title('窄带高斯过程样本的正交分量')%求窄带高斯信号功率;注:由于样本的功率近似等于随机过程的功率,因此可能出现一些偏差P_gt=sum(real(gt).^2)/T;P_glt_real = sum(real(glt).^2)/T;P_glt_imag = sum(imag(glt).^2)/T;%验证窄带高斯过程的同相分量、正交分量的正交性a = real(glt)*(imag(glt))'/T;用到的子函数function [t,st]=bpf(f,sf,B1,B2)%This function filter an input at frequency domain by an ideal bandpass filter %Inputs:% f: frequency samples% sf: input data spectrum samples% B1: bandpass's lower frequency% B2: bandpass's higher frequency%Outputs:% t: frequency samples% st: output data's time samplesdf = f(2)-f(1);T = 1/df;hf = zeros(1,length(f));bf = [floor( B1/df ): floor( B2/df )] ;bf1 = floor( length(f)/2 ) + bf;bf2 = floor( length(f)/2 ) - bf;hf(bf1)=1/sqrt(2*(B2-B1));hf(bf2)=1/sqrt(2*(B2-B1));yf=hf.*sf.*exp(-j*2*pi*f*0.1*T);[t,st]=F2T(f,yf);例4-1%显示模拟调制的波形及解调方法DSB,文件mdsb.m %信源close all;clear all;dt = 0.001; %时间采样间隔fm=1; %信源最高频率fc=10; %载波中心频率T=5; %信号时长t = 0:dt:T;mt = sqrt(2)*cos(2*pi*fm*t); %信源%N0 = 0.01; %白噪单边功率谱密度%DSB modulations_dsb = mt.*cos(2*pi*fc*t);B=2*fm;%noise = noise_nb(fc,B,N0,t);%s_dsb=s_dsb+noise;figure(1)subplot(311)plot(t,s_dsb);hold on; %画出DSB信号波形plot(t,mt,'r--'); %标示mt的波形title('DSB调制信号');xlabel('t');%DSB demodulationrt = s_dsb.*cos(2*pi*fc*t);rt = rt-mean(rt);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm);subplot(312)plot(t,rt); hold on;plot(t,mt/2,'r--');title('相干解调后的信号波形与输入信号的比较'); xlabel('t')subplot(313)[f,sf]=T2F(t,s_dsb);psf = (abs(sf).^2)/T;plot(f,psf);axis([-2*fc 2*fc 0 max(psf)]);title('DSB信号功率谱');xlabel('f');function [t st]=lpf(f,sf,B)%This function filter an input data using a lowpass filter %Inputs: f: frequency samples% sf: input data spectrum samples% B: lowpass's bandwidth with a rectangle lowpass%Outputs: t: time samples% st: output data's time samplesdf = f(2)-f(1);T = 1/df;hf = zeros(1,length(f));bf = [-floor( B/df ): floor( B/df )] + floor( length(f)/2 ); hf(bf)=1;yf=hf.*sf;[t,st]=F2T(f,yf);st = real(st);例4-2%显示模拟调制的波形及解调方法AM,文件mam.m%信源close all;clear all;dt = 0.001; %时间采样间隔fm=1; %信源最高频率fc=10; %载波中心频率T=5; %信号时长t = 0:dt:T;mt = sqrt(2)*cos(2*pi*fm*t); %信源%N0 = 0.01; %白噪单边功率谱密度%AM modulationA=2;s_am = (A+mt).*cos(2*pi*fc*t);B = 2*fm; %带通滤波器带宽%noise = noise_nb(fc,B,N0,t); %窄带高斯噪声产生%s_am = s_am + noise;figure(1)subplot(311)plot(t,s_am);hold on; %画出AM信号波形plot(t,A+mt,'r--'); %标示AM的包络title('AM调制信号及其包络');xlabel('t');%AM demodulationrt = s_am.*cos(2*pi*fc*t); %相干解调rt = rt-mean(rt);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm); %低通滤波subplot(312)plot(t,rt); hold on;plot(t,mt/2,'r--');title('相干解调后的信号波形与输入信号的比较'); xlabel('t')subplot(313)[f,sf]=T2F(t,s_am);psf = (abs(sf).^2)/T;plot(f,psf);axis([-2*fc 2*fc 0 max(psf)]);title('AM信号功率谱');xlabel('f');例4-3%显示模拟调制的波形及解调方法SSB,文件mssb.m%信源close all;clear all;dt = 0.001; %时间采样间隔fm=1; %信源最高频率fc=10; %载波中心频率T=5; %信号时长t = 0:dt:T;mt = sqrt(2)*cos(2*pi*fm*t); %信源%N0 = 0.01; %白噪单边功率谱密度%SSB modulations_ssb = real( hilbert(mt).*exp(j*2*pi*fc*t) ); B=fm;%noise = noise_nb(fc,B,N0,t);%s_ssb=s_ssb+noise;figure(1)subplot(311)plot(t,s_ssb);hold on; %画出SSB信号波形plot(t,mt,'r--'); %标示mt的波形title('SSB调制信号');xlabel('t');%SSB demodulationrt = s_ssb.*cos(2*pi*fc*t);rt = rt-mean(rt);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm);subplot(312)plot(t,rt); hold on;plot(t,mt/2,'r--');title('相干解调后的信号波形与输入信号的比较');xlabel('t')subplot(313)[f,sf]=T2F(t,s_ssb);psf = (abs(sf).^2)/T;plot(f,psf);axis([-2*fc 2*fc 0 max(psf)]);title('SSB信号功率谱');xlabel('f');例4-4%显示模拟调制的波形及解调方法VSB,文件mvsb.m%信源close all;clear all;dt = 0.001; %时间采样间隔fm=5; %信源最高频率fc=20; %载波中心频率T=5; %信号时长t = 0:dt:T;mt = sqrt(2)*( cos(2*pi*fm*t)+sin(2*pi*0.5*fm*t) ); %信源%VSB modulations_vsb = mt.*cos(2*pi*fc*t);B=1.2*fm;[f,sf] = T2F(t,s_vsb);[t,s_vsb] = vsbpf(f,sf,0.2*fm,1.2*fm,fc);figure(1)subplot(311)plot(t,s_vsb);hold on; %画出VSB信号波形plot(t,mt,'r--'); %标示mt的波形title('VSB调制信号');xlabel('t');%VSB demodulationrt = s_vsb.*cos(2*pi*fc*t);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm);subplot(312)plot(t,rt); hold on;plot(t,mt/2,'r--');title('相干解调后的信号波形与输入信号的比较');xlabel('t')subplot(313)[f,sf]=T2F(t,s_vsb);psf = (abs(sf).^2)/T;plot(f,psf);axis([-2*fc 2*fc 0 max(psf)]);title('VSB信号功率谱');xlabel('f');function [t,st]=vsbpf(f,sf,B1,B2,fc)%This function filter an input by an residual bandpass filter %Inputs: f: frequency samples% sf: input data spectrum samples% B1: residual bandwidth% B2: highest freq of the basedband signal%Outputs: t: frequency samples% st: output data's time samplesdf = f(2)-f(1);T = 1/df;hf = zeros(1,length(f));bf1 = [floor( (fc-B1)/df ): floor( (fc+B1)/df )] ;bf2 = [floor( (fc+B1)/df )+1: floor( (fc+B2)/df )];f1 = bf1 + floor( length(f)/2 ) ;f2 = bf2 + floor( length(f)/2 ) ;stepf = 1/length(f1);hf(f1)=0:stepf:1-stepf;hf(f2)=1;f3 = -bf1 + floor( length(f)/2 ) ;f4 = -bf2 + floor( length(f)/2) ;hf(f3)=0:stepf:(1-stepf);hf(f4)=1;yf=hf.*sf;[t,st]=F2T(f,yf);st = real(st);例4-5%显示模拟调制的波形及解调方法AM、DSB、SSB, %信源close all;clear all;dt = 0.001;fm=1;fc=10;t = 0:dt:5;mt = sqrt(2)*cos(2*pi*fm*t);N0 = 0.1;%AM modulationA=2;s_am = (A+mt).*cos(2*pi*fc*t);B = 2*fm;noise = noise_nb(fc,B,N0,t);s_am = s_am + noise;figure(1)subplot(321)plot(t,s_am);hold on;plot(t,A+mt,'r--');%AM demodulationrt = s_am.*cos(2*pi*fc*t);rt = rt-mean(rt);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm);title('AM信号');xlabel('t');subplot(322)plot(t,rt); hold on;plot(t,mt/2,'r--');title('AM解调信号');xlabel('t');%DSB modulations_dsb = mt.*cos(2*pi*fc*t);B=2*fm;noise = noise_nb(fc,B,N0,t);s_dsb=s_dsb+noise;subplot(323)plot(t,s_dsb);hold on;plot(t,mt,'r--');title('DSB信号');xlabel('t');%DSB demodulationrt = s_dsb.*cos(2*pi*fc*t);rt = rt-mean(rt);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm);subplot(324)plot(t,rt); hold on;plot(t,mt/2,'r--');title('DSB解调信号');xlabel('t');%SSB modulations_ssb = real( hilbert(mt).*exp(j*2*pi*fc*t) );B=fm;noise = noise_nb(fc,B,N0,t);s_ssb=s_ssb+noise;subplot(325)plot(t,s_ssb);title('SSB信号');xlabel('t');%SSB demodulationrt = s_ssb.*cos(2*pi*fc*t);rt = rt-mean(rt);[f,rf] = T2F(t,rt);[t,rt] = lpf(f,rf,2*fm);subplot(326)plot(t,rt); hold on;plot(t,mt/2,'r--');title('SSB解调信号');xlabel('t');function [out] = noise_nb(fc,B,N0,t)%output the narrow band gaussian noise sample with single-sided power spectrum N0 %at carrier frequency equals fc and bandwidth euqals Bdt = t(2)-t(1);Fmx = 1/dt;n_len = length(t);p = N0*Fmx;rn = sqrt(p)*randn(1,n_len);[f,rf] = T2F(t,rn);[t,out] = bpf(f,rf,fc-B/2,fc+B/2);%FM modulation and demodulation,mfm.mclear all;close all;Kf = 5;fc = 10;T=5;dt=0.001;t = 0:dt:T;%信源fm= 1;%mt = cos(2*pi*fm*t) + 1.5*sin(2*pi*0.3*fm*t); %信源信号mt = cos(2*pi*fm*t); %信源信号%FM 调制A = sqrt(2);%mti = 1/2/pi/fm*sin(2*pi*fm*t) -3/4/pi/0.3/fm*cos(2*pi*0.3*fm*t); %mt的积分函数mti = 1/2/pi/fm*sin(2*pi*fm*t) ; %mt的积分函数st = A*cos(2*pi*fc*t + 2*pi*Kf*mti);figure(1)subplot(311);plot(t,st); hold on;plot(t,mt,'r--');xlabel('t');ylabel('调频信号')subplot(312)[f sf] = T2F(t,st);plot(f, abs(sf));axis([-25 25 0 3])xlabel('f');ylabel('调频信号幅度谱')%FM 解调for k=1:length(st)-1rt(k) = (st(k+1)-st(k))/dt;endrt(length(st))=0;subplot(313)plot(t,rt); hold on;plot(t,A*2*pi*Kf*mt+A*2*pi*fc,'r--');xlabel('t');ylabel('调频信号微分后包络')%数字基带信号的功率谱密度 digit_baseband.mclear all; close all;Ts=1;N_sample = 8; %每个码元的抽样点数dt = Ts/N_sample; %抽样时间间隔N = 1000; %码元数t = 0:dt:(N*N_sample-1)*dt;gt1 = ones(1,N_sample); %NRZ非归零波形gt2 = ones(1,N_sample/2); %RZ归零波形gt2 = [gt2 zeros(1,N_sample/2)];mt3 = sinc((t-5)/Ts); % sin(pi*t/Ts)/(pi*t/Ts)波形,截段取10个码元gt3 = mt3(1:10*N_sample);d = ( sign( randn(1,N) ) +1 )/2;data = sigexpand(d,N_sample); %对序列间隔插入N_sample-1个0st1 = conv(data,gt1); %Matlab自带卷积函数st2 = conv(data,gt2);d = 2*d-1; %变成双极性序列data= sigexpand(d,N_sample);st3 = conv(data,gt3);[f,st1f] = T2F(t,[st1(1:length(t))]);[f,st2f] = T2F(t,[st2(1:length(t))]);[f,st3f] = T2F(t,[st3(1:length(t))]);figure(1)subplot(321)plot(t,[st1(1:length(t))] );gridaxis([0 20 -1.5 1.5]);ylabel('单极性NRZ波形');subplot(322);plot(f,10*log10(abs(st1f).^2/T) );gridaxis([-5 5 -40 10]); ylabel('单极性NRZ功率谱密度(dB/Hz)');subplot(323)plot(t,[st2(1:length(t))] );axis([0 20 -1.5 1.5]);gridylabel('单极性RZ波形');subplot(324)plot(f,10*log10(abs(st2f).^2/T));axis([-5 5 -40 10]);gridylabel('单极性RZ功率谱密度(dB/Hz)');subplot(325)plot(t-5,[st3(1:length(t))] );axis([0 20 -2 2]);gridylabel('双极性sinc波形');xlabel('t/Ts');subplot(326)plot(f,10*log10(abs(st3f).^2/T));axis([-5 5 -40 10]);gridylabel('sinc波形功率谱密度(dB/Hz)');xlabel('f*Ts');function [out]=sigexpand(d,M)%将输入的序列扩展成间隔为N-1个0的序列N = length(d);out = zeros(M,N);out(1,:) = d;out = reshape(out,1,M*N);例5-2%数字基带信号接收示意 digit_receive.mclear all;close all;N =100;N_sample=8; %每码元抽样点数Ts=1;dt = Ts/N_sample;t=0:dt:(N*N_sample-1)*dt;gt = ones(1,N_sample); %数字基带波形d = sign(randn(1,N)); %输入数字序列a = sigexpand(d,N_sample);st = conv(a,gt); %数字基带信号ht1 = gt;rt1 = conv(st,ht1);ht2 = 5*sinc(5*(t-5)/Ts);rt2 = conv(st,ht2);figure(1)subplot(321)plot( t,st(1:length(t)) );axis([0 20 -1.5 1.5]); ylabel('输入双极性NRZ数字基带波形'); subplot(322)stem( t,a);axis([0 20 -1.5 1.5]); ylabel('输入数字序列')subplot(323)plot( t,[0 rt1(1:length(t)-1)]/8 );axis([0 20 -1.5 1.5]);ylabel('方波滤波后输出');subplot(324)dd = rt1(N_sample:N_sample:end);ddd= sigexpand(dd,N_sample);stem( t,ddd(1:length(t))/8 );axis([0 20 -1.5 1.5]);ylabel('方波滤波后抽样输出');subplot(325)plot(t-5, [0 rt2(1:length(t)-1)]/8 );axis([0 20 -1.5 1.5]);xlabel('t/Ts'); ylabel('理想低通滤波后输出');subplot(326)dd = rt2(N_sample-1:N_sample:end);ddd=sigexpand(dd,N_sample);stem( t-5,ddd(1:length(t))/8 );axis([0 20 -1.5 1.5]);xlabel('t/Ts'); ylabel('理想低通滤波后抽样输出');例5-7%部分响应信号眼图示意,pres.mclear all; close all;Ts=1;N_sample=16;eye_num = 11;N_data=1000;dt = Ts/N_sample;t = -5*Ts:dt:5*Ts;%产生双极性数字信号d = sign(randn(1,N_data));dd= sigexpand(d,N_sample);%部分响应系统冲击响应ht = sinc((t+eps)/Ts)./(1- (t+eps)./Ts);ht( 6*N_sample+1 ) = 1;st = conv(dd,ht);tt = -5*Ts:dt:(N_data+5)*N_sample*dt-dt;figure(1)subplot(211);plot(tt,st);axis([0 20 -3 3]);xlabel('t/Ts');ylabel('部分响应基带信号'); subplot(212)%画眼图ss=zeros(1,eye_num*N_sample);ttt = 0:dt:eye_num*N_sample*dt-dt;for k=5:50ss = st(k*N_sample+1:(k+eye_num)*N_sample);drawnow;plot(ttt,ss); hold on;end%plot(ttt,ss);xlabel('t/Ts');ylabel('部分响应信号眼图');例6-1%2ASK,2PSK,文件名binarymod.mclear all;close all;A=1;fc = 2; %2Hz;N_sample = 8;N = 500; %码元数Ts = 1; %1 baud/sdt = Ts/fc/N_sample; %波形采样间隔t = 0:dt:N*Ts-dt;Lt = length(t);%产生二进制信源d = sign(randn(1,N));dd = sigexpand((d+1)/2,fc*N_sample);gt = ones(1,fc*N_sample); %NRZ波形figure(1)subplot(221); %输入NRZ信号波形(单极性)d_NRZ = conv(dd,gt);plot(t,d_NRZ(1:length(t)));axis([0 10 0 1.2]); ylabel('输入信号');subplot(222); %输入NRZ频谱[f,d_NRZf]=T2F( t,d_NRZ(1:length(t)) );plot(f,10*log10(abs(d_NRZf).^2/T));axis([-2 2 -50 10]);ylabel('输入信号功率谱密度(dB/Hz)');%2ASK信号ht = A*cos(2*pi*fc*t);s_2ask = d_NRZ(1:Lt).*ht;subplot(223)plot(t,s_2ask);axis([0 10 -1.2 1.2]); ylabel('2ASK');[f,s_2askf]=T2F(t,s_2ask );subplot(224)plot(f,10*log10(abs(s_2askf).^2/T));axis([-fc-4 fc+4 -50 10]);ylabel('2ASK功率谱密度(dB/Hz)');figure(2)%2PSK信号d_2psk = 2*d_NRZ-1;s_2psk = d_2psk(1:Lt).*ht;subplot(221)plot(t,s_2psk);axis([0 10 -1.2 1.2]); ylabel('2PSK');subplot(222)[f,s_2pskf] = T2F(t,s_2psk);plot( f,10*log10(abs(s_2pskf).^2/T) );axis([-fc-4 fc+4 -50 10]);ylabel('2PSK功率谱密度(dB/Hz)');% 2FSK% s_2fsk = Acos(2*pi*fc*t + int(2*d_NRZ-1) );sd_2fsk = 2*d_NRZ-1;s_2fsk = A*cos(2*pi*fc*t + 2*pi*sd_2fsk(1:length(t)).*t );subplot(223)plot(t,s_2fsk);axis([0 10 -1.2 1.2]);xlabel('t'); ylabel('2FSK')subplot(224)[f,s_2fskf] = T2F(t,s_2fsk);plot(f,10*log10(abs(s_2fskf).^2/T));axis([-fc-4 fc+4 -50 10]);xlabel('f');ylabel('2FSK功率谱密度(dB/Hz)');例6-3%QPSK & OQPSKclear all;close all;M = 4;Ts= 1;fc= 10;N_sample = 16;N_num = 100;dt = 1/fc/N_sample;t = 0:dt:N_num*Ts-dt;T = dt*length(t);py1f = zeros(1,length(t)); %功率谱密度1py2f = zeros(1,length(t)); %功率谱密度2for PL=1:100 %输入100段N_num个码字的波形,为了使功率谱密度看起来更加平滑,%可以取这100段信号功率谱密度的平均d1 = sign(randn(1,N_num));d2 = sign(randn(1,N_num));gt = ones(1,fc*N_sample);%QPSK调制s1 = sigexpand(d1,fc*N_sample);s2 = sigexpand(d2,fc*N_sample);b1 = conv(s1,gt);b2 = conv(s2,gt);s1 = b1(1:length(s1));s2 = b2(1:length(s2));st_qpsk = s1.*cos(2*pi*fc*t) - s2.*sin(2*pi*fc*t);s2_delay= [-ones(1,N_sample*fc/2) s2(1:end-N_sample*fc/2)];st_oqpsk= s1.*cos(2*pi*fc*t) - s2_delay.*sin(2*pi*fc*t);%经过带通后,再经过非线性电路[f y1f] = T2F(t,st_qpsk);[f y2f] = T2F(t,st_oqpsk);[t y1] = bpf(f,y1f,fc-1/Ts,fc+1/Ts);[t y2] = bpf(f,y2f,fc-1/Ts,fc+1/Ts);subplot(221);plot(t,y1); xlabel('t'); ylabel('QPSK波形');axis([5 15 -1.6 1.6]);title('经过带通后的波形');subplot(222)plot(t,y2); xlabel('t'); ylabel('OQPSK波形');axis([5 15 -1.6 1.6]);title('经过带通后的波形');%经过非线性电路y1 = 1.5*tanh(2*y1);y2 = 1.5*tanh(2*y2);[f y1f] = T2F(t,y1);[f y2f] = T2F(t,y2);py1f = py1f + abs(y1f).^2/T; %QPSK不同段信号功率谱密度相加py2f = py2f + abs(y2f).^2/T; %OQPSK不同段信号功率谱密度相加endpy1f = py1f/100; %QPSK 100段功率谱密度平均py2f=py2f/100; %OQPSK 100段功率谱密度平均subplot(223);plot(f,10*log10(py1f)); xlabel('f');ylabel('QPSK功率谱密度(dB/Hz)'); title('经过非线性电路后的功率谱密度');axis([ -15 15 -30 10]);subplot(224)plot(f,10*log10(py2f));xlabel('f');ylabel('OQPSK功率谱密度(dB/Hz)'); title('经过非线性电路后的功率谱密度');axis([ -15 15 -30 10]);figure(2)x = -2:0.1:2;y=1.5*tanh(2*x);plot(x,y); title('非线性电路的输入输出函数');例7-2%demo for u and A law for quantize,filename: a_u_law.m%u=255 y=ln(1+ux)/ln(1+u)%A=87.6 y=Ax/(1+lnA) (0<x<1/A) y=(1+lnAx)/(1+lnA)clear allclose alldx=0.01;x=-1:dx:1;u=255;A=87.6;%u Lawyu=sign(x).*log(1+u*abs(x))/log(1+u);%A Lawfor i=1:length(x)if abs(x(i))<1/Aya(i)=A*x(i)/(1+log(A));elseya(i)=sign(x(i))*(1+log(A*abs(x(i))))/(1+log(A));endendfigure(1)plot(x,yu,'k.:');title('u Law')xlabel('x');ylabel('y');grid onhold onxx=[-1,-127/255,-63/255,-31/255,-15/255,-7/255,-3/255,-1/255,1/255,3/255,7/255 ,15/255,31/255,63/255,...127/255,1];yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1];plot(xx,yy,'r');stem(xx,yy,'b-.');legend('u律压缩特性','折线近似u律');figure(2)plot(x,ya,'k.:');title('A Law')xlabel('x');ylabel('y');grid onhold onxx=[-1,-1/2,-1/4,-1/8,-1/16,-1/32,-1/64,-1/128,1/128,1/64,1/32,1/16,1/8,1/4,1/ 2,1];yy=[-1,-7/8,-6/8,-5/8,-4/8,-3/8,-2/8,-1/8,1/8,2/8,3/8,4/8,5/8,6/8,7/8,1];plot(xx,yy,'r');stem(xx,yy,'b-.');legend('A律压缩特性','折线近似A律');例7-3%show the pcm encode and decodeclear allclose allt=0:0.01:10;vm1=-70:1:0; %输入的正弦信号幅度不同vm = 10.^(vm1/20);figure(1)for k=1:length(vm)for m=1:2x=vm(k)*sin(2*pi*t+2*pi*rand(1));v=1;xx=x/v; %normalizesxx = floor(xx*4096);y = pcm_encode(sxx);yy = pcm_decode(y,v);nq(m)=sum((x-yy).*(x-yy))/length(x); sq(m)=mean(yy.^2);snr(m)=(sq(m)/nq(m));drawnowsubplot(211)plot(t,x);title('sample sequence');subplot(212)plot(t,yy)title('pcm decode sequence');endsnrq(k)=10*log10( mean(snr) );endfigure(2)plot(vm1,snrq);axis([-60 0 0 60]);grid;function [out]=pcm_encode(x)%x encode to pcm coden=length(x);%-4096<x<4096for i=1:nif x(i)>0out(i,1)=1;elseout(i,1)=0;endif abs(x(i))>=0 & abs(x(i))<32out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0;elseif 32<=abs(x(i)) & abs(x(i))<64out(i,2)=0;out(i,3)=0;out(i,4)=1;step=2;st=32;elseif 64<=abs(x(i)) & abs(x(i))<128out(i,2)=0;out(i,3)=1;out(i,4)=0;step=4;st=64;elseif 128<=abs(x(i)) & abs(x(i)) <256out(i,2)=0;out(i,3)=1;out(i,4)=1;step=8;st=128;elseif 256<=abs(x(i)) & abs(x(i))<512out(i,2)=1;out(i,3)=0;out(i,4)=0;step=16;st=256;elseif 512<=abs(x(i)) & abs(x(i))<1024out(i,2)=1;out(i,3)=0;out(i,4)=1;step=32;st=512;elseif 1024<=abs(x(i)) & abs(x(i))<2048out(i,2)=1;out(i,3)=1;out(i,4)=0;step=64;st=1024;elseif 2048<=abs(x(i)) & abs(x(i))<4096out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;elseout(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;endif(abs(x(i))>=4096)out(i,2:8) = [1 1 1 1 1 1 1];elsetmp = floor( (abs(x(i))-st)/step );t = dec2bin(tmp,4) - 48; %函数dec2bin输出的是ASCII字符串,48对应0 out(i,5:8) =t(1:4);endendout=reshape(out',1,8*n);function [out]= pcm_decode(in,v)%decode the input pcm code%in : input the pcm code 8bit/sample%v: quantized leveln=length(in);in = reshape(in',8,n/8)';slot(1) = 0;slot(2) = 32;slot(3) = 64;slot(4) = 128;slot(5) = 256;slot(6) = 512;slot(7) = 1024;slot(8) = 2048;step(1) = 2;step(2) = 2;step(3) = 4;step(4) = 8;step(5) = 16;step(6) = 32;step(7) = 64;step(8) = 128;for i=1:n/8ss = 2*in(i,1)-1;tmp= in(i,2)*4+in(i,3)*2+in(i,4)+1;st = slot(tmp);dt = (in(i,5)*8+in(i,6)*4+in(i,7)*2+in(i,8))*step(tmp) + 0.5*step(tmp); out(i)=ss*(st+dt)/4096*v;end例8-1%信道失真示意,clear all;close all;Ts=1;N_sample = 8; %每个码元的抽样点数dt = Ts/N_sample; %抽样时间间隔N = 1000; %码元数t = 0:dt:(N*N_sample-1)*dt;gt1 = ones(1,N_sample); %NRZ非归零波形gt2 = ones(1,N_sample/2); %RZ归零波形gt2 = [gt2 zeros(1,N_sample/2)];mt3 = sinc((t-5)/Ts); % sin(pi*t/Ts)/(pi*t/Ts)波形,截段取10个码元gt3 = mt3(1:10*N_sample);d = ( sign( randn(1,N) ) +1 )/2;data = sigexpand(d,N_sample); %对序列间隔插入N_sample-1个0st1 = conv(data,gt1);st2 = conv(data,gt2);d = 2*d-1; %变成双极性序列data= sigexpand(d,N_sample);st3 = conv(data,gt3);xt = st1;%无失真信道[f,xf] = T2F(t,xt);hf1 = exp(-j*pi*f);yf1 = xf.*hf1;[t1,yt1] = F2T(f,yf1);%幅频失真信道hf2 = sinc(f).*exp(-j*pi*f);yf2 = xf.*hf2;[t2,yt2] = F2T(f,yf2);%相频失真、群时延无失真信道%hf3 = exp(j*pi*f+j*0.1*pi);f1 = find(f<0);hf3 = exp( -j*pi*f+j*pi );hf3(f1) = exp( -j*pi*f(f1)-j*pi );yf3 = xf.*hf3;[t3,yt3]=F2T(f,yf3);%相频、群时延失真信道hf4 = exp(-j*pi*f.*f-j*pi*f+j*pi);yf4 = xf.*hf4;[t4,yt4]=F2T(f,yf4);sfigure(1)subplot(221)plotyy(f,abs(hf1),f,angle(hf1)/pi);ylabel('幅频、相频特性'); title('线性无失真信道');grid on;subplot(222)plot(t1,real(yt1) );title('经过信道后的输出信号');axis([0,20,-1.2 1.2]);grid on;subplot(223)plotyy(f,abs(hf2),f,angle(hf2)/pi);ylabel('幅频、相频特性'); title('幅频失真信道');grid on; xlabel('f')subplot(224)plot(t2,real(yt2));axis([0,20,-1.2 1.2]);grid on;xlabel('t');figure(2)subplot(221);plotyy(f,abs(hf3),f,angle(hf3)/pi);ylabel('幅频、相频特性');title('相频失真、群时延无失真信道');grid on;subplot(222);plot(t3,real(yt3));title('经过信道后的输出信号');axis([0,20,-1.2 1.2]);grid on;subplot(223)plotyy(f,abs(hf4),f,angle(hf4)/pi);ylabel('幅频、相频特性');title('相频失真、群时延失真信道');grid on;xlabel('f');subplot(224);plot(t4,real(yt4));axis([0,20,-1.2 1.2]);grid on;xlabel('t');例8-3clear all;close all;Ts=1;N_sample = 8; %每个码元的抽样点数dt = Ts/N_sample; %抽样时间间隔N = 1000; %码元数t = 0:dt:(N*N_sample-1)*dt;dLen = length(t);gt1 = ones(1,N_sample); %NRZ非归零波形d = ( sign( randn(1,N) ) +1 )/2;data = sigexpand(d,N_sample); %对序列间隔插入N_sample-1个0st1 = conv(data,gt1);[f sf1] = T2F(t,st1(1:dLen));%3径信道m=[0.5 0.707 0.5];tao =[ 0 1 2];hf = m(1)*exp(-j*2*pi*f*tao(1)) +m(2)* exp(-j*2*pi*f*tao(2))+...m(3)* exp(-j*2*pi*f*tao(3));%信号经过3径信道yt1 = m(1)*st1(1:dLen)+m(2)*[zeros(1,N_sample), st1(1:dLen-N_sample)]+... m(3)*[zeros(1,2*N_sample), st1(1:dLen-2*N_sample)];[f yf1] = T2F(t,yt1);figure(1)subplot(221)plot(t,st1(1:dLen),'LineWidth',2);。