时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真

时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真

环境

matlab 2016a

指标

1 将声音信号转为二进制码
2 PAM调制
3 采用高斯脉冲

流程

时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真_第1张图片

代码

[OriginVoice,fs]=audioread('voice.m4a') ; 
OriginVoice=OriginVoice(:,2);
N=length(OriginVoice); % 计算信号x的长度
t=0:1/fs:(N-1)/fs; % 计算时间范围,样本数除以采样频率
OriginVoice=OriginVoice';
% 
% % sound(y,fs);
figure(1);
plot(t,OriginVoice)
OriginVoice_max=max(OriginVoice);
OriginVoice1=OriginVoice+OriginVoice_max;
OriginVoice1=OriginVoice1*100000;
OriginVoiceBit= dec2bin(OriginVoice1);		%将十进制数据转为字符
AA1 = boolean(OriginVoiceBit-'0');	%将字符转成逻辑量
AA1 = double(AA1);			%强制转为double型
AA = AA1.';
AA = AA(:);
OriginVoiceBitSend = AA.';



t=-5:0.1:5;
Lenth_t=length(t);
tao=1;
t0=0;

Info=OriginVoiceBitSend;
InfoBitNum=length(OriginVoiceBitSend);
MSign=zeros(InfoBitNum,Lenth_t);
% y0=zeros(Lenth_t,1);
y0=(-0.5).*(t.^2-tao.^2).*exp(-1.*((t-t0)/tao).^2)./(((2*pi).^(1/2)).*(tao.^5));
%%%一阶高斯脉冲ppt
%y=(t-t0).*exp(-4*pi.*((t-t0).^2)/(tao.*tao))./tao; 
%%%二阶高斯脉冲book
%y=(-t).*exp(-1.*((t-t0)/tao).^2)./(((2*pi).^(1/2)).*(tao.^3));
%%%二阶高斯脉冲
y=(-1).*(t.^2-tao.^2).*exp(-1.*((t-t0)/tao).^2)./(((2*pi).^(1/2)).*(tao.^5));
% plot(t,y)
% grid on
% axis([-10,10,-0.5,0.5])
% xlabel('t')
% ylabel('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,20,'measured');

MSignDisplay=MSignDisplay(1:101*16*2);

MSignDisplay = awgn(MSignDisplay,20,'measured');

tDisplay=linspace(0,100*16*2,Lenth_t*16*2);
figure(2);
plot(tDisplay,MSignDisplay)
grid on
axis([-1,100*16*2,-0.5,0.5])
xlabel('t')
ylabel('MSign1')

%%解调
sumsign=zeros((length(SendSignal)/101),1);
verdict=zeros((length(SendSignal)/101),1);
for i=1:(length(SendSignal)/101-1)
    muli=(SendSignal((i-1)*101+1:(i-1)*101+101)).*y;
    sumsign(i,:)=trapz(muli,t);
    if sumsign(i)<=-0.1
        verdict(i)=1;
    else 
        verdict(i)=0;
    end
end

verdict=verdict';
RcvInfoBit=verdict;
RcvInfoBitNum=length(RcvInfoBit);
RcvVoice=zeros(RcvInfoBitNum/16,1);
for i=1:(RcvInfoBitNum/16-1)
    TempChar=mat2str(RcvInfoBit((i-1)*16+1:(i-1)*16+17));
    TempChar=TempChar(2:32);
    TempNum=bin2dec(TempChar);
    TempNum=double(TempNum);
    TempNum=TempNum/100000;
    TempNum=TempNum-0.3124;
    RcvVoice(i)=TempNum;
end
RcvVoice=RcvVoice';


RcvN=length(RcvVoice); % 计算信号x的长度
t=0:1/fs:(RcvN-1)/fs; % 计算时间范围,样本数除以采样频率
sound(RcvVoice,fs);
figure(3);
plot(t,RcvVoice);

结果

信道信噪20dB的传输情况

原声音信号

时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真_第2张图片

部分调制信号

时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真_第3张图片

接收到的信号

时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真_第4张图片

信噪比在10dB信号的传输

时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真_第5张图片

信噪比在10dB信号的传输时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真_第6张图片

可以看到当信噪比下降到5dB时,声音信号出现失真,但大部分信号仍能传输。

拓展

1 可以随着信噪比的下降对比误码率的趋势
2 增加更多的影响影响因素

说明

1 信道采用高斯白噪声
2 解调采用相关解调,模板相乘再求和,最后再判决
3 通过更改y0函数来改变调制方式
4 本仿真只是简单的演示仿真,工程还有更多复杂的结构,更多的影响因素,仅供参考

你可能感兴趣的:(通信,matlab,开发语言)