辣、详细设计与编码
1. 设计方案
(1)分组情况
在这次毕业设计中,我小组经过讨论决定由一人做格式化和信源译码,另两人做数字调制与解调传输,又将其中的4个载波调制技术(FSK、ASK、BPSK1、BPSK2)分为2部分,每人做一个部分,而我负责的就是数字调制与解调传输中的FSK与BPSK2的部分,另外再加上自己写的QAM,最后将三人做的部分综合起来。
(2)编程的流程图
图5 数字调制过程
(3)设计思路:
先利用一个均匀分布的随即信源产生大量的随即信号,然后信号通过信道,信号将受到噪声的影响。在接受端,将通过信道后的信号通过一个最佳接受机进行接收判决,就得到接收到的信号,将这个信号与圆心好相比,就可以得到通信误码率。
2. 编程工具的选择
本次仿真选择的是MATLAB软件。MATLAB软件是国际上公认的功能最强大的数值计算和仿真软件之一。其软件包的主要特点有:
1)它是一种解释性语言,采用了工程技术的计算语言,几乎与数学表达式相同,语言中的基本元素是矩阵,它提供了各种矩阵的运算和操作,并且具有符号计算、数学和文字统一处理、离线和在线计算等功能。
2)具有较强的绘图功能,计算结果和编程可视化。
3)具有很强的开放性,针对不同的应用学科,
3. 编码与测试
(1)FSK
figure(1);
N = 100;
noise_amp = 3;
signal_set = 'fsk';
bits = ['1', '0', '1', '0', '0', '1'];
signal1 = sqrt(2)*sin(2*pi*2*[0:N-1]/N);
signal0 = sqrt(2)*sin(2*pi*3*[0:N-1]/N);
color0='r';color1='g';
x = []; xcolor = [];
%disp(length(bits));
for n=1:length(bits)
x=[x eval(strcat('signal',bits(n)))]; % 0/1 二进制
xcolor = [xcolor eval(strcat('color',bits(n)))];
% disp(x);
% disp(xcolor)
end
% Send signal through white noise channel
r=x
%r = x + noise_amp*randn(1,length(x)); %信道噪声
% Run matched filters,利用匹配滤波器进行解调
y1=filter(signal1(N:-1:1),1,r);
%求通过滤波器的信号
y0=filter(signal0(N:-1:1),1,r);
% Graphics
subplot(211)
t=[0:length(r)-1];
plot(t,r,'k');hold on
a = 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));
end
%for n=N*[1:length(bits)],h=line([n n],a(3:4));set(h,'linestyle','--');end
h=title('Received signal');set(h,'fontsize',18);
hold off
subplot(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
end
end
for n=N*[1:length(bits)],h=line([n n],a(3:4));set(h,'linestyle','--');end
h=title('Matched Filter Output');set(h,'fontsize',18);www.751com.cn
snr = 10.^(snrdb/10);
p_bpsk = Qfunct(sqrt(2*snr));
%需要编写Q函数 Qfunct()
p_fsk = Qfunct(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');
(2)BPSK2
figure(1);
N = 100;
noise_amp = 3;
signal_set = 'bpsk2';
bits = ['1', '0', '1', '0', '0', '1'];
if strcmp(signal_set, 'bpsk2')
signal1 = sqrt(2)*sin(2*pi*2*[0:N-1]/N);
signal0 = -signal1;
else
perror(sprintf('Unknown signal set %s\n',signal_set));
end
color0='g';color1='b';
x = []; xcolor = [];
%disp(length(bits));