时域脉冲通信采用高斯脉冲且使用PAM调制的Matlab简易演示仿真
环境
matlab 2016a
指标
1 将声音信号转为二进制码
2 PAM调制
3 采用高斯脉冲
流程
代码
[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的传输情况
原声音信号
部分调制信号
接收到的信号
信噪比在10dB信号的传输
信噪比在10dB信号的传输
可以看到当信噪比下降到5dB时,声音信号出现失真,但大部分信号仍能传输。
拓展
1 可以随着信噪比的下降对比误码率的趋势
2 增加更多的影响影响因素
说明
1 信道采用高斯白噪声
2 解调采用相关解调,模板相乘再求和,最后再判决
3 通过更改y0函数来改变调制方式
4 本仿真只是简单的演示仿真,工程还有更多复杂的结构,更多的影响因素,仅供参考