通信原理基于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);第四步是加入信道特性和噪声。
- 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);。