📄 pam_transmit.m
字号:
%function [SRX,STX,msg_orig]=PAM_transmit
clear;
numSymb=3000;
msg_orig = randsrc(numSymb,1,[0:1]);
Ts=5e-9; % symbol time
Tw=1e-9; % wave time
fc=50e9; % frequence of samples
dt = 1 ./ fc; % sampling period
symbolsamples = floor(Ts ./ dt); % number of samples
% between pulses
wavesamples=floor(Tw./dt);
% ------------------------------------------------
% Step One - convolution encode
% ------------------------------------------------
%%%%%卷积编码%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
constlen = [7];
codegen = [171 133];
tblen = 32;
codeRate = 1/2;
trel = poly2trellis(constlen, codegen);
[msg_enc_bi] = convenc(msg_orig, trel);
% ------------------------------------------------
% Step Two - main loop for introducing 2PAM
% ------------------------------------------------
PAMwave1=csvread('impulse.dat');
PAMwave=PAMwave1';
msg_enc_bi_ref_bit=ones(length(msg_enc_bi),1);
%PAMseq=zeros(symbolsamples*length(msg_enc_bi),1);
PAMmsg=zeros(length(msg_enc_bi),1);
PAMsymbol=zeros(symbolsamples,1);
PAMsymbol_one=zeros(symbolsamples,1);
PAMseq=zeros(symbolsamples*length(msg_enc_bi),1);
PAMmsg_ref=zeros(length(msg_enc_bi),1);
PAMsymbol_ref=zeros(symbolsamples,1);
PAMsymbol_one_ref=zeros(symbolsamples,1);
PAMseq_ref=zeros(symbolsamples*length(msg_enc_bi),1);
for k = 1 : length(msg_enc_bi)
PAMmsg(k) = msg_enc_bi(k)*2-1;
PAMwave_one1=conv(PAMmsg(k),PAMwave);
PAMwave_one=PAMwave_one1';
PAMsymbol_one(1:wavesamples,1)=PAMwave_one(1:wavesamples,1);
PAMseq((k-1)*symbolsamples+1:symbolsamples+(k-1)*symbolsamples,1)=PAMsymbol_one(1:symbolsamples,1);
end % for k = 1 : length(msg_enc_bi)
for k = 1 : length(msg_enc_bi_ref_bit)
PAMmsg_ref(k) = msg_enc_bi_ref_bit(k)*2-1;
PAMwave_one1_ref=conv(PAMmsg_ref(k),PAMwave);
PAMwave_one_ref=PAMwave_one1_ref';
PAMsymbol_one_ref(1:wavesamples,1)=PAMwave_one_ref(1:wavesamples,1);
PAMseq_ref((k-1)*symbolsamples+1:symbolsamples+(k-1)*symbolsamples,1)=PAMsymbol_one_ref(1:symbolsamples,1);
end % for k = 1 : length(msg_enc_bi)
STX=zeros(symbolsamples*length(msg_enc_bi),1);
STX=PAMseq';
ref=PAMseq_ref';
%%%%test%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%subplot(3,1,1)
%plot(msg_orig);
%subplot(3,1,2)
%plot(PAMseq);
%subplot(3,1,3)
%plot(PAMmsg);
%%%%%经过SV-C信道%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tx=1;
c0=10^(-47/20);
d=2;
gamma=1.7;
[rx,ag]=cp0801_pathloss(tx,c0,d,gamma);
TMG=ag^2;
%[h0,hf,OT,ts,X] = cp0802_IEEEuwb(fc,TMG);
[h0,hf,OT,ts,X] = SV_C_channel(fc,0,0);
Srx=conv(STX,hf);
SRX=Srx(1:length(STX));
exno=[0 2 4 8];
SRX0=SRX;
input=SRX0;
N=wavesamples*length(msg_enc_bi);
numpulses=N;
[out,noise] = cp0801_Gnoise2(SRX0,exno,N);
Rx(1,:)=STX+noise(1,:);
Rx(2,:)=STX+noise(2,:);
Rx(3,:)=STX+noise(3,:);
Rx(4,:)=STX+noise(4,:);
%%%%%%%接收端%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%信号相关及判决%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ns=1;
mask=ref;
numbit=length(msg_enc_bi);
[RXbits] = cp0801_PAMreceiver(Rx,mask,fc,numbit,Ns,Ts);
%RXbits=(RXbits+1)/2;
for i=1:4
RXbits1=vitdec(RXbits(i,:), trel, 1, 'trunc', 'hard');
%%%%%%%%计算误码率%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
biterr(i)=sum(abs(RXbits1'-msg_orig));
end
Num=length(msg_orig);
ratio=biterr/Num;
m=msg_orig';
x=RXbits1'-msg_orig;
plot(exno,ratio,'*');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -