⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pam_transmit.m

📁 主要自己写的
💻 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 + -