当前位置:文档之家› 通信原理实验Matlab程序(软件仿真)

通信原理实验Matlab程序(软件仿真)


num=0; % 计数器清零 yz(k)=1*yz(k-4); % 让0000的最后一个0改变为与前一个非零符号 相同极性的符号 V(k)=yz(k); % V 脉冲位置记录 if yz(k)==sign % 如果当前V符号与前一个V符号的极性相同 yz(k)=-1*yz(k); % 则让当前V符号极性反转,以满足V符号间相 互极性反转要求 yz(k-3)=yz(k); % 添加B符号,与V符号同极性 B(k-3)=yz(k); % B脉冲位置记录 V(k)=yz(k); % V 脉冲位置记录 yz(k+1:length(yw))=-1*yz(k+1:length(yw)); % 并让后面的非零符号从V符号开始再交替变化 end sign=yz(k); % 记录前一个V符号的极性 end else num=0; % 当前输入为“1”则连“0”计数器清零 end end % 编码完成 %re=[xn',yw',yz',V',B']; % 结果输出: xn AMI HDB3 V&B 符号 yn=yz;% 输出yn初始化 num=0;% 计数器初始化 for k=1:length(yz) if yz(k)==1 num=num+1; % "1" 计数器 if num/2 == fix(num/2) % 奇数个1时输出-1,进行极性交替 yn = [yn gt1]; else yn = [yn -1*gt1]; end else yn = [yn gt2]; end end yh=yn; fft_se1 = fftshift(fft(yh)); % 求序列的频谱 PE1 = 10 * log10(abs(fft_se1) .^ 2 / (N * Ts)); % 公式法求概率 谱密度 PEL1 = (-length(fft_se1) / 2 : length(fft_se1) / 2 - 1) / 10; % 求区间长度 subplot(2,1,1);stairs([0:length(yn)-1],yn);axis([0 length(yn) -2 2]);
function S=t2f(s,fs) % s代表输入信号,S代表s的频谱,fs是采样率 N=length(s); % 总采样数
T=1/fs*N; % 观察时间 f=[-N/2:(N/2-1)]/T; % 频域采样点 tmp1=fft(s)/fs; tmp2=N*ifft(s)/fs; S(1:N/2)=tmp2(N/2+1:-1:2); S(N/2+1:N)=tmp1(1:N/2); S=S.*exp(j*pi*f*T); End

y=[y,x(i)]; M=max(y); m=min(y); subplot(1,1,1) plot(t,y);grid on; axis([0,i,m-0.1,M+0.1]); title('guilingma');
Ts = 1; % 码元周期 N_sample = 128; % 单个码元抽样点数 dt = Ts / N_sample; % 抽样时间间隔 N = 100; % 码元数 t = 0 : dt : (N * N_sample - 1) * dt; % 序列传输时间 xn = round(rand(1, N));% 随机0 1 序列 gt1= ones(1, N_sample); gt2= zeros(1, N_sample); yw=xn;% 输出yn初始化 num=0;% 计数器初始化 for k=1:length(xn) if xn(k)==1 num=num+1; % "1" 计数器 if num/2 == fix(num/2) % 奇数个1时输出-1,进行极性交替 yw(k)=1; else yw(k)=-1; end end end% ami 编码 num=0; % 连零计数器初始化 yz=yw; % 输出初始化 sign=0; % 极性标志初始化为0 V=zeros(1,length(yw));% V 脉冲位置记录变量 B=zeros(1,length(yw));% B 脉冲位置记录变量 for k=1:length(yw) if yw(k)==0 num=num+1; % 连“0”个数计数 if num==4 % 如果4连“0”
clear all close all L=64; N=1024; M=N/L; Rs=2; Ts=1/Rs; fs=L/Ts; Bs=fs/2; T=N/fs; t=[-(T/2):1/fs:(T/2-1/fs)]; f=-Bs+[0:N-1]/T; EP=zeros(1,N); for loop=1:1000 a=sign(randn(1,M)); tmp=zeros(L,M); L1=L*0.5; tmp([1:L1],:)=ones(L1,1)*a; s=tmp(:)'; S=t2f(s,fs); P=abs(S).^2/T; EP=EP*(1-1/loop)+P/loop; end figure(1) plot(t,s) axis equal grid figure(2) plot(f,EP) axis([-20,20,0,max(EP)]) grid
Ts = 1; % 码元周期 N_sample = 128; % 单个码元抽样点数 dt = Ts / N_sample; % 抽样时间间隔 N = 100; % 码元数 t = 0 : dt : (N * N_sample - 1) * dt; % 序列传输时间 xn = round(rand(1, N));% 随机0 1 序列 gt1= ones(1, N_sample); gt2= zeros(1, N_sample);
function y=snrz(x) t0=300; t=0:1/t0:length(x); for i=1:length(x) if(x(i)==1) for j=1:3*t0/4 y((i-1)*t0+j)=1; for j=1+(3*t0/4):t0 y((i-1)*t0+j)=0; end end else for j=1:t0 y(t0*(i-1)+j)=0; end end end y=[y,x(i)]; M=max(y); m=min(y); subplot(1,1,1) plot(t,y);grid on; axis([0,i,m-0.1,M+0.1]); title('guilingma');
%% 绘制出结果 subplot(2, 1,2);plot(PEL1, PE1); grid on; axis([ -50 50 -50 50]); title('HDB3');
f1=2; f0=1; M=2; BER_1=zeros(1,50); BER_2=zeros(1,50); EbNo_1=zeros(1,50); EbNo=0; freqsep=1; nsamp=8; Fs=32; k=log2(M); s= randint(1000,1,M); N=Fs; t=0:2*pi/99:2*pi; cp=[];mod=[];bit=[]; for n=1:length(s); if s(n)==0; cp1=ones(1,100); c=sin(f0*t); bit1=zeros(1,100); else cp1=ones(1,100); c=sin(f1*t); bit1=ones(1,100); end cp=[cp cp1]; mod=[mod c]; bit=[bit bit1]; end fsk = cp.*mod; subplot(2,2,1); plot(bit,'LineWidth',1.5);grid on; ylabel('binary signal'); axis([0 1*length(s) -2.5 2.5]);
clear all close all L=64; % 每码元采样点数 N=1024;% 采样点数 M=N/L;% 码元数 Rs=2;% 码元速率 Ts=1/Rs;%比特间隔 fs=L/Ts;%采样速率 Bs=fs/2;%系统带宽 T=N/fs;% 截短时间 t=[-(T/2):1/fs:(T/2-1/fs)];% 时域采样点 f=-Bs+[0:N-1]/T;%频域采样点 EP=zeros(1,N); for loop=1:1000 a=(randn(1,M)>0);% 产生单极性数据 tmp=zeros(L,M); L1=L*0.5; %0.5 是占空比 tmp([1:L1],:)=ones(L1,1)*a; s=tmp(:)'; S=t2f(s,fs); P=abs(S).^2/T;% 样本信号的功率谱密度 %随机过程的功率谱是各个样本的功率谱的数学期望 EP=EP*(1-1/loop)+P/loop; end figure(1) plot(t,s) axis equal grid figure(2) plot(f,EP) axis([-20,20,0,max(EP)]) grid
subplot(2,2,2); plot(fsk,'LineWidth',1.5);grid on; ylabel('Fsk modulation'); axis([0 1*length(s) -2.5 2.5]); %fsk(s,1,2); y = fskmod(s,M,freqsep,nsamp,Fs); ly = length(y); freq = [-Fs/2 : Fs/ly : Fs/2 - Fs/ly]; Syy = 10 * log10(fftshift(abs(fft(y)))); subplot(2,2,3); plot(freq,Syy); for i=1:1:30 EbNo=EbNo+5; EbNo_1=[EbNo_1 EbNo]; msg_rx=awgn(y,EbNo+10*log10(k)10*log10(N),'measured','dB'); msg_rrx=fskdemod(msg_rx,M,freqsep,nsamp,Fs); [num,SER]=symerr(s,msg_rrx); BER=SER*(M/2)/(M-1); BER_theory=berawgn(EbNo,'fsk',M,'noncoherent'); BER_1=[BER_1 BER]; BER_2=[BER_2 BER_theory]; end subplot(2,2,4); plot(EbNo_1,BER_1,EbNo_1,BER_2); axis([5 30 0 0.5]);
相关主题