?? system_1.m
字號:
function [sampl,re_sampl]=system_1(A,F,P,D,snr,N)
%輸入變量A ,F,P分別為輸入信號的幅度、頻率和相位,D為量化電平數(shù),snr
%為信道信噪比,N為D/A轉換時的內插點數(shù);輸出變量sampl為抽樣后的輸入
%信號,re_sampl為恢復出的輸入信號。
%數(shù)字基帶傳輸系統(tǒng)的MATLAB仿真實現(xiàn)%
%以下列出你自己編寫的代碼%
[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轉換成數(shù)字型
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(:); %產(chǎn)生列向量
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 + -