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

📄 digital.m

📁 一个很有用的MATLAB仿真源代码
💻 M
字号:
% Various routines that simulate or compute aspects of digital communication systems%% Simulate matched filter receiverfigure(1);N = 100;noise_amp = 3;signal_set = 'bpsk2'; % either 'bpsk1', 'bpsk2', 'ask', or 'fsk'bits = ['1', '0', '1', '0', '0', '1'];%if strcmp(signal_set, 'bpsk1')	signal1 = ones(1,N);   signal0 = -signal1;elseif strcmp(signal_set, 'bpsk2')   signal1 = sqrt(2)*sin(2*pi*2*[0:N-1]/N);   signal0 = -signal1;elseif strcmp(signal_set,'fsk')	signal1 = sqrt(2)*sin(2*pi*2*[0:N-1]/N);	signal0 = sqrt(2)*sin(2*pi*3*[0:N-1]/N);elseif strcmp(signal_set, 'ask');	signal1 = ones(1,N);	signal0 = zeros(1,N);else	perror(sprintf('Unknown signal set %s\n',signal_set));endcolor0='r';color1='b';x = []; xcolor = [];for n=1:length(bits)	x=[x eval(strcat('signal',bits(n)))];	xcolor = [xcolor eval(strcat('color',bits(n)))];end% Send signal through white noise channelr = x + noise_amp*randn(1,length(x));% Run matched filtersy1=filter(signal1(N:-1:1),1,r);y0=filter(signal0(N:-1:1),1,r);% Graphicssubplot(211)t=[0:length(r)-1];plot(t,r,'k');hold ona = axis;xp=x*(0.75*max(abs([a(3) a(4)])/max(x)));for n=1:length(bits)	plot(t((n-1)*N+1:n*N),xp((n-1)*N+1:n*N),[xcolor(n) '--']);	h = text((n-1)*N+N/2,max(xp),bits(n));	set(h,'fontsize',16);set(h,'color',xcolor(n));endfor n=N*[1:length(bits)],h=line([n n],a(3:4));set(h,'linestyle','--');endh=title('Received signal');set(h,'fontsize',18);hold offsubplot(212)plot(t,y0,color0,t,y1,color1)a = axis;for n=1:length(bits)	if y1(n*N)>= y0(n*N)		h = text(n*N-10,.75*a(4),'1');		set(h,'fontsize',16);set(h,'color',color1);		if bits(n) == '0'			set(h,'fontweight','bold');		end	else 		h = text(n*N-10,.75*a(4),'0');		set(h,'fontsize',16);set(h,'color',color0);		if bits(n) == '1'			set(h,'fontweight','bold');		end	endendfor n=N*[1:length(bits)],h=line([n n],a(3:4));set(h,'linestyle','--');endh=title('Matched Filter Output');set(h,'fontsize',18);%% Compute Pr[e] curves%figure(2)snrdb = [-10:.5:12];snr = 10.^(snrdb/10);p_bpsk = Q(sqrt(2*snr));p_fsk = Q(sqrt(snr));h=semilogy(snrdb,p_bpsk,snrdb,p_fsk,'r--');grid;axis([-10 12 10^(-8) 1])set(gca,'fontsize',18);h=xlabel('Signal-to-Noise Ratio (dB)');set(h,'fontsize',18);h=ylabel('Bit Error Probability');set(h,'fontsize',18);legend('BPSK','FSK');%% Error Correction (Repetition Code)%figure(3)snrdb = [-10:.5:12];snr = 10.^(snrdb/10);p_bpsk = Q(sqrt(2*snr));pb_bpsk = p_bpsk;pb_rep = 1-(1-p_bpsk).^3-3*p_bpsk.*(1-p_bpsk).^2;p_31 = Q(sqrt(2*3*snr)); % 3 times longer transmission timepb_31 = p_31;semilogy(snrdb,pb_bpsk,'b-',snrdb,pb_31,'r--',snrdb,pb_rep,'k-.');grid;axis([-10 12 10^(-15) 1])set(gca,'fontsize',18);h=xlabel('Signal-to-Noise Ratio (dB)');set(h,'fontsize',18);h=ylabel('Block Error Probability');set(h,'fontsize',18);legend('No ECC','3 Times Longer Bit Interval','Length 3 Repetition Code')title('Repetition Code (3,1)')%% (7,4) Hamming Code Performance Curves%figure(4)snrdb = [-10:.5:12];snr = 10.^(snrdb/10);p_bpsk = Q(sqrt(2*snr));pb_uc = 1-(1-p_bpsk).^4;p_74 = Q(sqrt(2*7/4*snr)); % 7/4 longer transmission timepb_74 = 1-(1-p_74).^4;pb_hamming = 1-(1-p_bpsk).^7-7*p_bpsk.*(1-p_bpsk).^6;semilogy(snrdb,pb_uc,'b-',snrdb,pb_74,'r--',snrdb,pb_hamming,'k-.');grid;axis([-10 12 10^(-15) 1]);set(gca,'fontsize',18);legend('Uncoded','7/4 Longer Bit Interval','Hamming Code');h=xlabel('Signal-to-Noise Ratio (dB)');set(h,'fontsize',18);h=ylabel('Block Error Probability');set(h,'fontsize',18);title('(7,4) Hamming Code Performance');%% Capacity Calculations%figure(5)p=[0:.01:.5];C=1+p.*log2(p)+(1-p).*log2(1-p);C(1) = 1;subplot(211)plot(p,C)set(gca,'fontsize',18);gridh = xlabel('Error Probability');set(h,'fontsize',18);h = ylabel('Capacity (bits)');set(h,'fontsize',18);subplot(212)C=1+p_bpsk.*log2(p_bpsk)+(1-p_bpsk).*log2(1-p_bpsk);plot(snrdb,C);set(gca,'fontsize',18);grid;legend('Capacity using BPSK')h = xlabel('Signal-to-Noise Ratio (dB)');set(h,'fontsize',18);h = ylabel('Capacity (bits)');set(h,'fontsize',18);

⌨️ 快捷键说明

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