首页 msk的调制解调MATLAB源代码

msk的调制解调MATLAB源代码

举报
开通vip

msk的调制解调MATLAB源代码HYPERLINK"http://blog.csdn.net/labixiaoxin99/article/details/6129323"msk的调制解调MATLAB源代码functionout=delay(data,n,sample_number)%data:延迟的数据%n:延迟码元个数%sample_number:码元采样个数out=zeros(1,length(data));out(n*sample_number+1:length(data))=data(1:length(data)-n*sample_...

msk的调制解调MATLAB源代码
HYPERLINK"http://blog.csdn.net/labixiaoxin99/article/details/6129323"msk的调制解调MATLAB源代码functionout=delay(data,n,sample_number)%data:延迟的数据%n:延迟码元个数%sample_number:码元采样个数out=zeros(1,length(data));out(n*sample_number+1:length(data))=data(1:length(data)-n*sample_number);function[data_diff]=difference(data)%差分编码%**************************************************************************%data          输入信号%data_diff     差分编码后信号%************************************************************************** %--------------------------------------------------------------------------data_diff=zeros(1,length(data));data_diff(1)=1*data(1);  %1为差分编码的初始参考值fori=2:length(data)   data_diff(i)=data_diff(i-1)*data(i);end%**************************************************************************function[signal_out,I_out,Q_out]=mod_msk(data,data_len,sample_number,Rb)%MSK基带调制%**************************************************************************%data             调制信号%data_len         码元个数%sample_number    每个码元采样点数%Rb               码元速率%signal_out       基带调制输出%I_out            I路输出%Q_out            Q路输出%************************************************************************** %data_len=10;               %码元个数%sample_number=8;           %采样点数%Rb=16000;                  %码元速率%data1=randint(1,data_len);%data=2*data1-1;            %传输的序列 Tb=1/Rb;                     %码元时间fs=Rb*sample_number;         %采样速率 %--------------------------------------------------------------------------%差分编码[data_diff]=difference(data);%************************************************************************** %--------------------------------------------------------------------------%并串转换,延时I(1)=1;            %fai0=0,cos(fai0)=1fori=1:2:data_len   Q(i)=data_diff(i);   Q(i+1)=data_diff(i);endfori=2:2:data_len   I(i+1)=data_diff(i);   I(i)=data_diff(i);end fori=1:sample_number   I1(i:sample_number:data_len*sample_number)=I(1:data_len);   Q1(i:sample_number:data_len*sample_number)=Q(1:data_len);end%************************************************************************** %--------------------------------------------------------------------------%乘加权函数t=1/fs:1/fs:data_len*Tb;I_out=I1.*cos(pi*t/2/Tb);Q_out=Q1.*sin(pi*t/2/Tb);%************************************************************************** %--------------------------------------------------------------------------%调制信号产生signal_out=I_out+j*Q_out;%************************************************************************** %%--------------------------------------------------------------------------%%画图%subplot(221)%plot(data,'.-');title('MSK传输的数据');xlabel('时间');ylabel('幅度')%subplot(222)%plot(data_diff,'.-');title('差分后的数据');xlabel('时间');ylabel('幅度')%subplot(223)%plot(I1,'.-');title('加权前I路');xlabel('时间');ylabel('幅度');%subplot(224)%plot(Q1,'.-');title('加权前Q路');xlabel('时间');ylabel('幅度');% %figure(2)%subplot(221)%plot(cos(pi*t/2/Tb),'.-');title('加权函数cos(πt/(2Tb))');xlabel('时间');ylabel('幅度')%subplot(222)%plot(sin(pi*t/2/Tb),'.-');title('加权函数sin(πt/(2Tb))');xlabel('时间');ylabel('幅度')%subplot(223)%plot(I_out,'.-');title('加权后I路');xlabel('时间');ylabel('幅度');%subplot(224)%plot(Q_out,'.-');title('加权后Q路');xlabel('时间');ylabel('幅度');%%**************************************************************************function[signal_out,I_out,Q_out,phase]=mod_msk2(data,data_len,sample_number,Rb)%MSK基带调制%**************************************************************************%data             调制信号%data_len         码元个数%sample_number    每个码元采样点数%Rb               码元速率%signal_out       基带调制输出%I_out            I路输出%Q_out            Q路输出%************************************************************************** %data_len=10;               %码元个数%sample_number=8;           %采样点数%Rb=16000;                  %码元速率%data1=randint(1,data_len);%data=2*data1-1;            %传输的序列 Tb=1/Rb;                     %码元时间fs=Rb*sample_number;         %采样速率 %--------------------------------------------------------------------------%采样fori=1:sample_number   data_sample(i:sample_number:data_len*sample_number)=data;end%************************************************************************** %--------------------------------------------------------------------------%计算相位phase=zeros(1,data_len*sample_number);phase(1)=data_sample(1)*pi/2/sample_number;fori=2:data_len*sample_number   phase(i)=phase(i-1)+data_sample(i-1)*pi/2/sample_number;end%************************************************************************** %--------------------------------------------------------------------------%I/QI_out=cos(phase);Q_out=sin(phase);%************************************************************************** %--------------------------------------------------------------------------%调制信号产生signal_out=I_out+j*Q_out;%**************************************************************************%MSK调制,差分解调方法一clearallcloseall %--------------------------------------------------------------------------%参数设置data_len=10000;          %码元个数sample_number=8;         %采样个数Rb=24000;                %码元速率fc=96000;                %载波频率%************************************************************************** %--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%************************************************************************** %--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out]=mod_msk(data,data_len,sample_number,Rb);%************************************************************************** %--------------------------------------------------------------------------%中频搬移multi=fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi); Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);%************************************************************************** %--------------------------------------------------------------------------%加噪声forSNR=0:8signal_mod1=awgn(signal_mod,SNR);    %--------------------------------------------------------------------------   %去载波   N=300;                                             %滤波器的阶数为(N+1)     F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;   A=[1,1,0,0];   lpf=firls(N,F,A);   [amp_lpf,w]=freqz(lpf);       I_dem=signal_mod1.*cos(2*pi*fc*t)*2;   I_dem=conv(I_dem,lpf);   I_dem=I_dem(N/2+1:N/2+length(I_temp));   Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;   Q_dem=conv(Q_dem,lpf);   Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));       I_dem_out=zeros(1,length(I_dem)/multi);        %抽取   Q_dem_out=zeros(1,length(Q_dem)/multi);   fori=1:length(I_dem_out)      I_dem_out(i)=I_dem(multi*(i-1)+1);      Q_dem_out(i)=Q_dem(multi*(i-1)+1);   end;   %**************************************************************************       %--------------------------------------------------------------------------   %差分解调   demod_data=zeros(1,data_len);   demod_data(1)=Q_dem_out(sample_number);   fori=2:data_len       demod_data(i)=Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number)-I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number);   end   %**************************************************************************       %--------------------------------------------------------------------------   %判决   demod_data=demod_data>0;   demod_data=2*demod_data-1;   %**************************************************************************    %--------------------------------------------------------------------------   %计算误码率   [num,ber(SNR+1)]=symerr(demod_data,data);   %**************************************************************************end%************************************************************************** %--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*-');%************************************************************************** %--------------------------------------------------------------------------%误码率理论值snr=0:0.1:8;fori=1:length(snr)   snr1(1,i)=10^(snr(1,i)/10);   ps(1,i)=1/2*erfc(sqrt(snr1(1,i)));   pe(1,i)=2*ps(1,i);endholdonsemilogy([0:.1:8],pe);%**************************************************************************%MSK调制,差分解调方法二clearallcloseall %--------------------------------------------------------------------------%参数设置data_len=10000;          %码元个数sample_number=8;         %采样个数Rb=24000;                %码元速率fc=96000;                %载波频率%************************************************************************** %--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%************************************************************************** %--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out]=mod_msk(data,data_len,sample_number,Rb);%************************************************************************** %--------------------------------------------------------------------------%中频搬移multi=fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi); Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);%************************************************************************** %--------------------------------------------------------------------------%加噪声forSNR=0:8signal_mod1=awgn(signal_mod,SNR);    %--------------------------------------------------------------------------   %去载波   N=300;                                             %滤波器的阶数为(N+1)     F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;   A=[1,1,0,0];   lpf=firls(N,F,A);   [amp_lpf,w]=freqz(lpf);       I_dem=signal_mod1.*cos(2*pi*fc*t)*2;   I_dem=conv(I_dem,lpf);   I_dem=I_dem(N/2+1:N/2+length(I_temp));   Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;   Q_dem=conv(Q_dem,lpf);   Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));       I_dem_out=zeros(1,length(I_dem)/multi);        %抽取   Q_dem_out=zeros(1,length(Q_dem)/multi);   fori=1:length(I_dem_out)      I_dem_out(i)=I_dem(multi*(i-1)+1);      Q_dem_out(i)=Q_dem(multi*(i-1)+1);   end;   %**************************************************************************       %--------------------------------------------------------------------------   %差分解调   demod_data=zeros(1,data_len);   demod_data(1)=Q_dem_out(sample_number);   fori=2:2:data_len       demod_data(i)=-I_dem_out(i*sample_number)*Q_dem_out((i-1)*sample_number);   end   fori=3:2:data_len       demod_data(i)=Q_dem_out(i*sample_number)*I_dem_out((i-1)*sample_number);   end   %**************************************************************************       %--------------------------------------------------------------------------   %判决   demod_data=demod_data>0;   demod_data=2*demod_data-1;   %**************************************************************************    %--------------------------------------------------------------------------   %计算误码率   [num,ber(SNR+1)]=symerr(demod_data,data);   %**************************************************************************end%************************************************************************** %--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*');%************************************************************************** %--------------------------------------------------------------------------%误码率理论值snr=0:0.1:8;fori=1:length(snr)   snr1(1,i)=10^(snr(1,i)/10);   ps(1,i)=1/2*erfc(sqrt(snr1(1,i)));   pe(1,i)=2*ps(1,i);endholdonsemilogy([0:.1:8],pe);%**************************************************************************%MSK调制,解调clearallcloseall %--------------------------------------------------------------------------%参数设置data_len=30000;          %码元个数sample_number=8;         %采样个数Rb=24000;                %码元速率fc=96000;                %载波频率%************************************************************************** %--------------------------------------------------------------------------%随机产生传输信号data=rand_binary(data_len);%************************************************************************** %--------------------------------------------------------------------------%MSK基带调制[signal_out,I_out,Q_out]=mod_msk(data,data_len,sample_number,Rb);%************************************************************************** %--------------------------------------------------------------------------%中频搬移multi=fc/Rb;I_temp=interp(I_out,multi);Q_temp=interp(Q_out,multi); Fs=fc*sample_number;t=1/Fs:1/Fs:length(I_temp)*1/Fs;signal_i=I_temp.*cos(2*pi*fc*t);signal_q=Q_temp.*sin(2*pi*fc*t);signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);%signal_mod1=real((I_temp+j*Q_temp).*exp(j*2*pi*fc*t));%************************************************************************** %--------------------------------------------------------------------------%加噪声forSNR=0:8signal_mod1=0.01*awgn(signal_mod,SNR);    %--------------------------------------------------------------------------   %去载波   N=300;                                             %滤波器的阶数为(N+1)     F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;   A=[1,1,0,0];   lpf=firls(N,F,A);   [amp_lpf,w]=freqz(lpf);       I_dem=signal_mod1.*cos(2*pi*fc*t)*2.*cos(pi*t*Rb/2);   I_dem=conv(I_dem,lpf);   I_dem=I_dem(N/2+1:N/2+length(I_temp));   Q_dem=signal_mod1.*sin(2*pi*fc*t)*2.*sin(pi*t*Rb/2);   Q_dem=conv(Q_dem,lpf);   Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));       I_dem_out=zeros(1,length(I_dem)/multi);        %抽取   Q_dem_out=zeros(1,length(Q_dem)/multi);   fori=1:length(I_dem_out)      I_dem_out(i)=I_dem(multi*(i-1)+1);      Q_dem_out(i)=Q_dem(multi*(i-1)+1);   end;       %**************************************************************************    %--------------------------------------------------------------------------   %解调,判决   demod_data=zeros(1,data_len);   fori=1:data_len       I_dem1(i)=I_dem_out(i*sample_number)>0;       Q_dem1(i)=Q_dem_out(i*sample_number)>0;   end   fori=1:2:data_len       m1(i)=Q_dem1(i);   end   fori=2:2:data_len       m1(i)=I_dem1(i);   end   m1=2*m1-1;   %**************************************************************************    %--------------------------------------------------------------------------   %差分解码   demod_data=zeros(1,data_len);   demod_data(1)=1*m1(1);   fori=2:data_len       demod_data(i)=m1(i-1)*m1(i);   end   %**************************************************************************       %--------------------------------------------------------------------------   %计算误码率   [num,ber(SNR+1)]=symerr(demod_data,data);   %**************************************************************************end             %/forsnr%************************************************************************** %--------------------------------------------------------------------------%误码率曲线semilogy([0:8],ber,'r*-');%************************************************************************** %--------------------------------------------------------------------------%误码率理论值snr=0:0.1:8;fori=1:length(snr)   snr1(1,i)=10^(snr(1,i)/10);   ps(1,i)=1/2*erfc(sqrt(snr1(1,i)));   pe(1,i)=2*ps(1,i);endholdonsemilogy([0:.1:8],pe);%**************************************************************************function[data_binary,data_binary1]=rand_binary(data_len);%随机产生一个二进制序列作为仿真用的消息序列%**************************************************************************%data          序列长度%data_binary   产生的二进制序列%************************************************************************** %--------------------------------------------------------------------------data1=randn(1,data_len);data_binary=zeros(1,data_len);data_binary1=zeros(1,data_len);fori=1:data_len   ifdata1(i)<0      data_binary(i)=-1;      data_binary1(i)=0;  else      data_binary(i)=1;      data_binary1(i)=1;   endend(资料素材和资料部分来自网络,供参考。可复制、编制,期待你的好评与关注)
本文档为【msk的调制解调MATLAB源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
夕夕资料
拥有专业强大的教研实力和完善的师资团队,专注为用户提供合同简历、论文写作、PPT设计、计划书、策划案、各类模板等,同时素材和资料部分来自网络,仅供参考.
格式:doc
大小:46KB
软件:Word
页数:0
分类:互联网
上传时间:2021-05-21
浏览量:12