msk的调制解调MATLAB源代码讲课教案.docx

上传人:b****3 文档编号:10953900 上传时间:2023-05-28 格式:DOCX 页数:21 大小:16.78KB
下载 相关 举报
msk的调制解调MATLAB源代码讲课教案.docx_第1页
第1页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第2页
第2页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第3页
第3页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第4页
第4页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第5页
第5页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第6页
第6页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第7页
第7页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第8页
第8页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第9页
第9页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第10页
第10页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第11页
第11页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第12页
第12页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第13页
第13页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第14页
第14页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第15页
第15页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第16页
第16页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第17页
第17页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第18页
第18页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第19页
第19页 / 共21页
msk的调制解调MATLAB源代码讲课教案.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

msk的调制解调MATLAB源代码讲课教案.docx

《msk的调制解调MATLAB源代码讲课教案.docx》由会员分享,可在线阅读,更多相关《msk的调制解调MATLAB源代码讲课教案.docx(21页珍藏版)》请在冰点文库上搜索。

msk的调制解调MATLAB源代码讲课教案.docx

msk的调制解调MATLAB源代码讲课教案

 

msk的调制解调MATLAB源代码

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)=1

fori=1:

2:

data_len

   Q(i)=data_diff(i);

   Q(i+1)=data_diff(i);

end

fori=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/Q

I_out=cos(phase);

Q_out=sin(phase);

%**************************************************************************

 

%--------------------------------------------------------------------------

%调制信号产生

signal_out=I_out+j*Q_out;

%**************************************************************************

 

%MSK调制,差分解调方法一

clearall

closeall

 

%--------------------------------------------------------------------------

%参数设置

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:

8

signal_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);

end

holdon

semilogy([0:

.1:

8],pe);

%**************************************************************************

 

%MSK调制,差分解调方法二

clearall

closeall

 

%--------------------------------------------------------------------------

%参数设置

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);

%*****************************************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2