1、 1 洗手 洗手 2ASK、 b ef2FSK、 b ef2PSK 数字调制系统的Matlab 实现及性能分析与比较 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 洗手 引言 : b ef数字带通传输系统 为了进行长距离传输 , 吃饭 克服传输失真 , 吃饭 传输损耗 , 吃饭 同时保证带内特性 。 洗手 必须对数字信号进行载波调制 , 吃饭 将信号频谱搬移到高频段才能在信道中传输 , 吃饭 因而现代通信系统采取数字调制技术 。 洗手 通过数字基带信号对载波某些参量进行控制 , 吃饭 使之随 机带信号的变化而
2、变化 。 洗手 根据控制载波参量大的不同 ,吃饭 数字调 制 有调幅( ASK) , 吃饭 调频 (FSK), 吃饭 调相 (PSK) 三种基本形式 。 洗手 Matlab 用于仿真 , 吃饭 分析和修改 , 吃饭 还可以应用图形界面功能 GUI 能为仿真系统生成一个人机交互界面 , 吃饭 便于仿真系统的操作 , 吃饭 因此采用 matlab 对数字系统进行仿真 。 洗手 通过对系统的仿真 , 吃饭 我们可以更加直观的了解数字调制系统 的性能()及影响性能的因素 ,吃饭 从而便于改进系统 , 吃饭 获 得 更 佳 的 传 输 性 能 。 洗手 洗手 关键词 : b ef 数字 . 系统 . 性
3、能 . ASK. FSK. PSK. Matlab. 仿真 .洗手 洗手 洗手 洗手 2 一 .数字调制 与解调 原理 洗手 洗手 1.1 2ASK 洗手 ( 1) 2ASK 洗手 2ASK 就是把频率 、 beef相位作为常量 , 吃饭 而把振幅作为变量 , 吃饭 信息比特是通过载波的幅度来传递的 。 洗手 由于调制信号只有 0 或 1 两个电平 , 吃饭 相乘的结果相当于将载频或者关断 , 吃饭 或者接通 , 吃饭 它的实际意义是当调制的数字信号 “1 时 , 吃饭 传输载波 ; beef当调制的数字信号为 “0“时 , 吃饭 不传输载波 。 洗手洗手 公式为 : b eef洗手 洗手 洗
4、手 洗手 1.2 2FSK 洗手 2FSK 可以看做是 2 个不同频率的 2ASK 的叠加 , 吃饭 其调制与解调方法与 2ASK 差不多 , 吃饭 主要频率 F1 和 F2, 吃饭 不同的组合产生所要求的 2FSK 调制信号 。 洗手洗手 公式如下 : b eef洗手 洗手 001,cos)(2 kkcA S K aatAts当,当 0c o s 1,c o s)( 212 kkF S K atA atAts 当, 当3 洗手 洗手 1.3 2PSK 洗手 2PSK 以载波的相位变化为基准 , 吃饭 载波的相位随数字基带序列信号的 1 或者 0 而改变 , 吃饭 通常用已经调制完的载波的 0
5、 或者表示数据 1 或者 0, 吃饭 每种相位与之一一对应 。 洗手洗手 洗手 洗手 4 二 数字调制技术的仿真实现 洗手 本课程设计需要借助 MATLAB 的 M 文件编程功能 , 吃饭 对 2ASK.2PSK.2FSK 进行调制与解调的设计 , 吃饭 并绘制出调制与解调后的波形 , 吃饭 误码率的情况分析 , 吃饭 软件仿真可在已有平台上实现 。 洗手洗手 1.2ASK代码 主函数 洗手 洗手 close all 洗手 clear all 洗手 n=16;b eef洗手 fc=1000000;b eef bitRate=1000000;b eef洗手 N=50;b eef洗手 %noise
6、=ti;b eef洗手 noise=10;b eef洗手 signal=source(n,N);b eef %生成二进制代码 洗手 transmittedSignal=askModu(signal,bitRate,fc,N);b eef%调制后信号 洗手 signal1=gussian(transmittedSignal,noise);b eef%加噪声 洗手 configueSignal=demoASK(signal1,bitRate,fc,n,N);b eef洗手 洗手 source代码 洗手 function sendSignal=source(n,N)洗手 sendSignal=ran
7、dint(1,n)洗手 bit=;b eef洗手 for i=1:length(sendSignal) 洗手 if sendSignal(i)=0 洗手 bit1=zeros(1,N);b eef洗手 else 洗手 bit1=ones(1,N);b eef洗手 end 洗手 bit=bit,bit1;b eef洗手 end 洗手 figure(1)洗 手 plot(1:length(bit),bit),title(transmitting of binary),grid on;b eef洗手 axis(0,N*length(sendSignal),-2,2);b eef洗手 end 洗手 洗
8、手 洗手 askModu代码 洗手 function transmittedSignal=askModu(signal,bitRate,fc,N)%signal 为输入信号 , 吃饭 bitrate 为 bit 速率 , 吃饭 fc 调 制 信 号 频 率 , 吃饭 N 洗手 5 %signal=0 0 1 0 1 1 0 1;b eef洗手 % bitRate=1000000;b eef洗手 % fc=1000000;b eef洗手 % N=32;bef 洗手 t=linspace(0,1/bitRate,N);b eef洗手 c=sin(2*pi*t*fc);b eef洗手 transmi
9、ttedSignal=;b eef洗手 for i=1:length(signal)洗手 transmittedSignal=transmittedSignal,signal(i)*c;b eef洗手 end 洗手 figure(2) %画调制图 洗手 plot(1:length(transmittedSignal),transmittedSignal);beftitle(Modulation of ASK);b eefgrid on;b eef洗手 figure(3)%画频谱实部 洗手 m=0:length(transmittedSignal)-1;b eef洗手 F=fft(transmi
10、ttedSignal);b eef洗手 plot(m,abs(real(F),title(ASK_frequency-domain analysis real);b eef洗手 grid on;b eef洗手 %figure(4) 画频谱虚部 洗手 %plot(m,imag(F);b eeftitle(ASK_frequency-domain analysis imag);b eef洗手 %grid on;b eef洗手 end 洗手 CheckRatePe代码 洗手 洗手 function PeWrong=CheckRatePe(signal1,signal2,s)洗手 rights=0;b
11、 eef洗手 wrongs=0;b eef洗手 for ki=1:s-2 洗手 if(signal1(ki)=signal2(ki)洗手 rights=rights+1;b eef洗手 else 洗 手 wrongs=wrongs+1;b eef洗手 end 洗手 end 洗手 PeWrong=wrongs/(wrongs+rights);b eef洗手 end 洗手 洗手 demoASK代码 洗手 function bitstream=demoASK(receivedSignal,bitRate,fc,n,N) 洗手 load num 洗手 signal1=receivedSignal;b
12、eef洗手 6 signal2=abs(signal1);b eef %洗手 signal3=filter(num1,1,signal2);b eef %LPF,洗手 IN=fix(length(num1)/2);b eef % 洗手 bitstream=;b eef洗手 LL=fc/bitRate*N;b eef洗手 i=IN+LL/2;b eef洗手 while (i=0.5;b eef洗手 i=i+LL;b eef洗手 end 洗手 洗手 figure(6) 洗手 subplot(3,1,1);b eef %接收波形 洗手 plot(1:length(signal1),signal1);
13、beeftitle(Wave of receiving terminal(including noise);b eefgrid on;b eef洗手 subplot(3,1,2);b eef%接收整流后波形 洗手 plot(1:length(signal2),signal2);beeftitle(Wave of commutate);beefgrid on;beef洗手 subplot(3,1,3);b eef%包络检波波形 洗手 plot(1:length(signal3),signal3);b eeftitle(Wave of LPF);b eefgrid on;b eef洗手 洗手 bi
14、t=;b eef洗手 for i=1:length(bitstream)洗手 if bitstream(i)=0 洗手 bit1=zeros(1,N);b eef洗手 else 洗手 bit1=ones(1,N);b eef洗手 end 洗手 bit=bit,bit1;b eef洗手 end 洗手 figure(7)%解调后的二进制波形 洗手 plot(bit),title(binary of receiving terminal),grid on;b eef洗手 axis(0,N*length(bitstream),-2.5,2.5);b eef洗手 end 洗手 洗手 洗手 gussian
15、代码 %加高斯白噪声 洗手 function signal=gussian(transmittedSignal,noise)洗手 signal=sqrt(2)*transmittedSignal;b eef洗手 signal=awgn(signal,noise);b eef洗手 figure(5) 洗手 plot(1:length(signal),signal);b eef洗手 title(Wave including noise),grid on;b eef洗手 7 end 洗手 / fsk 主函数代码 洗手 close all 洗手 clear all 洗手 n=16;b eef%二 进制
16、代码长度 洗手 f1=18000000;b eef%频率 1 洗手 f2=6000000;b eef%频率 2 洗手 bitRate=1000000;b eef%bit速率 洗手 N=50;b eef%码元宽度 洗手 %noise=ti;b eef洗手 noise=10;b eef%家性噪声大小 洗手 signal=source(n,N);b eef%产生二进制代码 洗手 transmittedSignal=fskModu(signal,bitRate,f1,f2,N);b eef%调制 洗手 signal1=gussian(transmittedSignal,noise);b eef%加噪声
17、 洗手 configueSignal=demoFSK(signal1,bitRate,f1,f2,N);b eef%解调 洗手 洗手 source代码 %二进制信号产生函数 洗手 function sendSignal=source(n,N)洗手 sendSignal=randint(1,n)洗手 bit=;b eef洗手 for i=1:length(sendSignal)洗手 if sendSignal(i)=0 洗手 bit1=zeros(1,N);b eef洗手 else 洗手 bit1=ones(1,N);b eef洗手 end 洗手 bit=bit,bit1;b eef洗手 end
18、 洗手 figure(1)洗手 plot(bit),title(transmitting of binary),grid on;b eef洗手 axis(0,N*length(sendSignal),-2.5,2.5);b eef洗手 end 洗手 洗手 洗手 洗手 fskModu代码 %频率调制函数 洗手 function transmittedSignal=fskModu(signal,bitRate,f1,f2,N)洗手 t=linspace(0,1/bitRate,N);b eef洗手 c1=sin(2*pi*t*f1);b eef%调制信号 1 洗手 8 c2=sin(2*pi*t*
19、f2);b eef%调制信号 2 洗手 transmittedSignal=;b eef洗手 for i=1:length(signal)%调制 洗手 if signal(i)=1 洗手 transmittedSignal=transmittedSignal,c1;b eef洗手 else 洗手 transmittedSignal=transmittedSignal,c2;b eef洗手 end 洗手 end 洗手 figure(2) %画调制后波形图 洗手 洗手 plot(1:length(transmittedSignal),transmittedSignal);beftitle(Modu
20、lation of FSK);b eefgrid on;b eef洗手 figure(3) %画调制后频谱图 洗手 m=0:length(transmittedSignal)-1;b eef洗手 F=fft(transmittedSignal);b eef洗手 plot(m,abs(real(F),title(ASK_frequency-domain analysis real);b eef洗手 grid on;b eef洗手 end 洗手 洗 手 demoFSK代码 洗手 function bitstream=demoFSK(receivedSignal,bitRate,f1,f2,N) 洗
21、手 load num 洗手 signal1=receivedSignal;b eef洗手 signal2=filter(gaotong,1,signal1);b eef %通过 HPF, 吃饭 得到高通分量 洗手 signal3=abs(signal2);b eef %整流 洗手 signal3=filter(lowpass,1,signal3);b eef %通过低通 , 吃饭 形成包络 洗手 bitstream=;b eef洗手 IN1=fix(length(lowpass)/2)+fix(length(gaotong)/2);beef %延迟时间 洗手 bitstream1=;b eef
22、洗手 LL=N;b eef %每个 bit的抽样点数 洗手 i=IN1 +LL/2;b eef洗手 while (i=0.5;b eef洗手 i=i+LL;b eef洗手 end 洗手 bitstream1 洗手 figure(5)洗手 subplot(3,1,1);b eef洗手 plot(1:length(signal1),signal1);beeftitle(Wave of receiving terminal(including noise);b eefgrid on;b eef洗手 subplot(3,1,2);b eef洗手 9 plot(1:length(signal2),sig
23、nal2);beeftitle(After Passing HPF);beefgrid on;beef洗手 subplot(3,1,3);b eef洗手 plot(1:length(signal3),signal3);beeftitle(After Passing LPF);beefgrid on;beef洗手 洗手 signal4=filter(daitong,1,signal1);b eef %通过 BPF得到低频分量 洗手 signal5=abs(signal4);b eef %整流 洗手 signal5=filter(lowpass,1,signal5);b eef %通过 LPF,
24、吃饭 形成包络 洗手 IN2=fix(length(lowpass)/2)+fix(length(daitong)/2);b eef %延迟时间 洗手 bitstream2=;b eef洗手 LL=N;b eef %每个 bit的的抽样点数 洗手 i=IN2 +LL/2;b eef洗手 while (i=0.5;b eef洗手 i=i+LL;b eef洗手 end 洗手 bitstream2 洗手 figure(6)洗手 subplot(3,1,1);b eef洗手 plot(1:length(signal1),signal1);beeftitle(Wave of receiving term
25、inal(including noise);b eefgrid on;b eef洗手 subplot(3,1,2);b eef洗手 plot(1:length(signal4),signal4);beeftitle(After Passing BPF);beefgrid on;beef洗手 subplot(3,1,3);b eef洗手 plot(1:length(signal5),signal5);beeftitle(After Passing LPF);beefgrid on;beef洗手 洗手 for i=1:min(length(bitstream1),length(bitstream2
26、) %判决 洗手 if(bitstream1(i)bitstream2(i)洗手 bitstream(i)=1;b eef洗手 else 洗手 bitstream(i)=0;b eef洗手 end 洗手 end 洗手 bitstream 洗手 洗手 bit=;b eef %接收端波形 洗手 for i=1:length(bitstream)洗手 if bitstream(i)=0 洗手 bit1=zeros(1,N);b eef洗手 else 洗手 bit1=ones(1,N);b eef洗手 10 end 洗手 bit=bit,bit1;b eef洗手 end 洗手 figure(7)洗手
27、plot(bit),title(binary of receiving terminal),grid on;b eef洗手 axis(0,N*length(bitstream),-2.5,2.5);b eef 洗手 end 洗手 洗手 CheckRatePe代码 洗手 function PeWrong=CheckRatePe(signal1,signal2,s)洗手 rights=0;b eef洗手 wrongs=0;b eef洗手 for ki=1:s-2 洗手 if(signal1(ki)=signal2(ki)洗手 rights=rights+1;b eef洗手 else 洗手 wron
28、gs=wrongs+1;b eef洗手 end 洗手 end 洗手 PeWrong=wrongs/(wrongs+rights);b eef洗手 end 洗手 洗手 gussian代码 洗手 function signal=gussian(transmittedSignal,noise)洗手 signal=sqrt(2)*transmittedSignal;b eef洗手 signal=awgn(signal,noise);b eef洗手 figure(4)洗手 plot(1:length(signal),signal),title(Adding Noise);b eef洗手 grid on;b eef洗手 end 洗手 2psk 主函数 代码 洗手 close all 洗手 clear all 洗手 n=16;b eef%二进制码长 洗手 fc=1000000;b eef%载波频率 洗手 bitRate=1000000;b eef%信息频率 洗手 N=50;b eef%码宽 洗手 noise=10;b eef%信道加性噪声大小 洗手 signal=source(n,N);b eef%生成二进制代码 洗手 transmittedSignal=bpskModu(signal,bitRate,fc,N);b eef%对信号进行调制并进行频 洗手 %谱分析 洗手