matlab高斯脉冲PAM调制文字通信简易仿真演示

环境

matlab2016a

摘要

matlab高斯脉冲PAM调制文字通信简易仿真演示,文字转化成二进制数组,在使用PAM调制输出,通过信道传输后,PAM解调,输出结果。

code

%PAM文字通信程序

%要传输的文字使用记事本的utf-8格式保存到同一个目录,文件名为text.txt
fileID = fopen('text.txt','r','n','utf-8'); %%https://ask.zol.com.cn/x/5444926.html
formatSpec = '%s';
OriginStr=fscanf(fileID,formatSpec);
%对文字的编码
WordNum=double(OriginStr);   %文字字符转化成对应的编码
Wordbit=16;  %一个文字字符对应16位bit的数据
WordBin=dec2bin(WordNum,Wordbit); %十进制转化成2进制
WordBin = boolean(WordBin-'0');
WordBin = WordBin.';
WordBin = WordBin(:);
WordBinSend = WordBin.';%该矩阵输出为01

Fs=16e9;  %任意波形发生器的采样率16G Sa/s
Ts=1/Fs;
Num1Period=100;  %在任意波形发生器一个脉冲周期的点数
ContinueTime=Ts*Num1Period;%一个脉冲的周期,总共2400个点,有24个周期的脉冲,100点一个周期,6.25e-9 s= 6.25ns一个周期 
Freq=1/ContinueTime;%脉冲频率160MHz



t=linspace(-ContinueTime/2,ContinueTime/2,Num1Period);
Lenth_t=length(t);
tao=ContinueTime/10;
t0=0;


Info=WordBinSend;
InfoBitNum=length(WordBinSend);
MSign=zeros(InfoBitNum,Lenth_t);
% y0=zeros(Lenth_t,1); %%OOK脉冲调制0编码对应波形
%PAM脉冲调制0编码对应二阶高斯波形
y0=(-0.5).*(t.^2-tao.^2).*exp(-1.*((t-t0)/tao).^2)./(((2*pi).^(1/2)).*(tao.^5));
y0=y0./max(y0)/2;  %缩小到1
%PAM脉冲调制1编码对应二阶高斯波形
y=(-1).*(t.^2-tao.^2).*exp(-1.*((t-t0)/tao).^2)./(((2*pi).^(1/2)).*(tao.^5));
y=y./max(y);


%
for i=1:InfoBitNum
    if Info(i)==1
        MSign(i,:)=repmat(y,1);
    else 
        MSign(i,:)=repmat(y0,1);
    end
end

MSignDisplay=MSign.';
MSignDisplay=MSignDisplay(:);
MSignDisplay=MSignDisplay.';
SendSignal=MSignDisplay;

SendSignal=awgn(SendSignal,10,'measured');  %给信道加高斯白噪声,信噪比10dB

MSignDisplay=SendSignal(1:Num1Period*Wordbit*2);%取出前十六位显示出来

%PAM编码的前十六位波形,也就是前16个字符的波形
tDisplay=linspace(0,ContinueTime*Wordbit*2,Num1Period*Wordbit*2);
figure(1);
plot(tDisplay,MSignDisplay)
grid on
axis([0,ContinueTime*Wordbit*2,-0.2,1])
xlabel('t')
ylabel('PAM编码的前十六位波形')

%%解调
sumsign=zeros((length(SendSignal)/Num1Period),1);%对信号求积分矩阵
verdict=zeros((length(SendSignal)/Num1Period),1);%判决结果矩阵
for i=1:(length(SendSignal)/Num1Period)
    muli=(SendSignal((i-1)*Num1Period+1:(i-1)*Num1Period+Num1Period)).*y;
    sumsign(i,:)=trapz(muli,t);
    if sumsign(i)<=-4.8e-10   %判决的门限
        verdict(i)=1;
    else 
        verdict(i)=0;
    end
end

verdict=verdict';
RcvInfoBit=verdict;
RcvInfoBitNum=length(RcvInfoBit);
RcvWord=zeros(RcvInfoBitNum/Wordbit,1);

%将对应的bit数据转化成文字
for i=1:(RcvInfoBitNum/Wordbit)
    TempChar=mat2str(RcvInfoBit((i-1)*Wordbit+1:(i-1)*Wordbit+Wordbit));
    TempChar=TempChar(2:32);
    TempNum=bin2dec(TempChar);
    TempNum=double(TempNum);
    RcvWord(i)=TempNum;
end
RcvWord=RcvWord';
char(RcvWord)



结果在这里插入图片描述

图为PAM编码的前十六位波形

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值