msk调制解调程序代码.docx

上传人:b****7 文档编号:23797994 上传时间:2023-05-20 格式:DOCX 页数:21 大小:16.63KB
下载 相关 举报
msk调制解调程序代码.docx_第1页
第1页 / 共21页
msk调制解调程序代码.docx_第2页
第2页 / 共21页
msk调制解调程序代码.docx_第3页
第3页 / 共21页
msk调制解调程序代码.docx_第4页
第4页 / 共21页
msk调制解调程序代码.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

msk调制解调程序代码.docx

《msk调制解调程序代码.docx》由会员分享,可在线阅读,更多相关《msk调制解调程序代码.docx(21页珍藏版)》请在冰豆网上搜索。

msk调制解调程序代码.docx

msk调制解调程序代码

%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_outI路输出

%Q_outQ路输出

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

%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_outI路输出

%Q_outQ路输出

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

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

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

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

%中频搬移

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

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

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1