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

📄 system_1.m

📁 通信数字传输系统各部分仿真程序
💻 M
字号:
function [sampl,re_sampl]=system_1(A,F,P,D,snr,N)
%输入变量A ,F,P分别为输入信号的幅度、频率和相位,D为量化电平数,snr
%为信道信噪比,N为D/A转换时的内插点数;输出变量sampl为抽样后的输入
%信号,re_sampl为恢复出的输入信号。
%数字基带传输系统的MATLAB仿真实现%
%以下列出你自己编写的代码%
[samp1,quant,pcm2]=a_d_1(A,F,P,D);
psk_sig=modulat_1(pcm2,fc,fd,fs);
psk_after_channel=channel_1(psk_sig,snr);
adjudge_psk=adjudg_1(psk_after_channel);
re_pcm=demodul_1(adjudge_psk,fc,fd,fs);
[re_voltag,re_sampl]=d_a_1(re_pcm,D,N);
% A/D**********************************
function[sampl,quant,pcm2]=a_d_1(A,F,P,D)
Fs=20*F;         %抽样信号sampl的波形
t=0:1/Fs:2/F;
sampl=A*sin(2*pi*F*t+P);
subplot(3,1,1);
c=sampl/max(sampl);
plot(t,sampl,'g*-');
partition=[-1:2/D:1];
codebook=[-1-1/D:2/D:1];
[indx,quant]=quantiz(c,partition,codebook);
indx=indx-1;
ind=zeros(length(indx),1);
i=1;
while i<=length(indx)
    if indx(i,1)==-1
        indx(i,1)=0
    end
    i=i+1;
end
a=min(quant);    %对信号消顶
i=1;
while i<=length(quant)
    if quant(1,i)==a
        quant(1,i)=quant(1,i)+2/D
    end
    i=i+1;
end
pcm=dec2bin(indx,ceil(log2(D)));    %对量化后信号编码
pcm1=reshape(pcm',1,length(pcm)*ceil(log2(D)));
for i=1:length(pcm1)
   pcm2(i)=str2num(pcm1(i))
    i=i+1;
end
%调制*****************************************
function psk_sig=modulat_1(pcm2,fc,fd,fs)
A_pcm=zeros(1,length(pcm2));
k=1;
for i=1:length(pcm2)
    if pcm2(i)=='1'
        A_pcm(k)=1
         k=k+1;
    elseif pcm2(i)=='0'
        A_pcm(k)=0
        k=k+1;
    else A_pcm(k)=pcm2(i)
        k=k+1;
    end
end
a=A_pcm;     %PCM2转换成数字型
psk_sig=dmod(a,fc,fd,fs,'psk'); 
%进入信道***************************************
function psk_after_channel=channel_1(psk_sig,snr);
n1=length(psk_sig);
psk_sig=psk_sig(:);
psk_sig_a=zeros(n1,1);
psk_sig_a=psk_sig_a(:);     %产生列向量
for i=1:n1
    if ischar(psk_sig(i))==1
       psk_sig_a(i)=str2num(psk_sig(i));
   else psk_sig(i)=psk_sig(i);
   end
end
psk_after_channel=awgn(psk_sig,snr);
%抽样判决******************************
function adjudge_psk=adjudg_1(psk_after_channel)
n2=length(psk_after_channel);
adjudge_psk=zeros(1,n2);
for i=1:n2
    if ischar(psk_after_channel)==1
    psk_after_channel(i)=str2num(psk_after_channel);
    end
end
for i=1:n2
    if round(psk_after_channel(i))==1
           adjudge_psk(i)=1;
     elseif round(psk_after_channel(i))==0
             adjudge_psk(i)=0;
     else  adjudge_psk(i)=-1;
       end
   end
%解调****************************************
function re_pcm=demodul_1(adjudge_psk,fc,fd,fs)
  for i=1:length(adjudge_psk)
     if  ischar(adjudge_psk(i))==1
        adjudge_psk=str2num(adjudge_psk(i));
      end
     end
re_pcm=ddemod(adjudge_psk,fc,fd,fs,'psk',2);
% d/a******************************************
function [re_voltag,re_sampl]=d_a_1(re_pcm,D,N)
for i=1:length(re_pcm)
    if ischar(re_pcm(i))==1;
        re_pcm(i)=str2num(re_pcm(i));
    end
end
n=ceil(log2(D)); 
for i=2:n
    if rem(length(re_pcm),n); 
        k=rem(length(re_pcm),n);
        B=zeros(1,(n-k));
        re_pcm1=[re_pcm,B];
    else re_pcm1=re_pcm;
    end
end
re_pcm1=re_pcm1(:);
m=ceil(length(re_pcm1)/n); 
for i=1:m
    A=re_pcm1((i-1)*n+1:(i-1)*n+n); 
    C=reshape(A,1,n);
    E=fliplr(C);
    sum=0;
    for j=1:n
        sum=sum+E(j)*2^(j-1);
       V(i)=sum;
    end
end
s=2/D;
for i=1:m
     re_voltag(i)=(V(i)*s+s/2-1);
 end
for i=1:length(re_voltag)
   re_sampl((i-1)*(N+1)+1)=re_voltag(i);
    for k=2:N
         re_sampl((i-1)*(N+1)+k)=0;
     end
end 
h1=zeros(1,N);
for j=1:N
    h1(j)=j/(N+1);
end
h=[0,h1,1,fliplr(h1),0]; 
h=h(:);
re_sampl=conv(h,re_sampl);
subplot(3,1,2);
plot( re_voltag,'m-*');
subplot(3,1,3)
plot(re_sampl,'k*');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -