% 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);
%figure2是接收端的误码率
% Compute Pr[e] curves 计算误码率
%
figure(2)
snrdb = [-10:.5:12];
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');
(3)需要的小函数
function [y]=Qfunct(x)
%Q函数,在接收端求误码率时使用
y=1/2 *erfc(x/sqrt(2));
%max_bound=1000;
%fun=inline('1/sqrt(2*pi)*exp(-x.^2/2)');
%Q__return_value=quad(fun,alpha,max_bound);
(4)QAM
clear;
Fd=10; %消息序列的采样速率
Fs=3*Fd; %已调纤毫的采样速率
M=16;
SNR_db=0:12; %仿真信噪比范围
SNR1_db=0:0.1:12; %理论计算信噪比范围
for n=1:length(SNR_db)
Eb_N0=10^(SNR_db(n)/10);
sgma=sqrt(5/(4*Eb_N0)); %nc、ns的均方差
x=randint(10000,1,M); %产生随即消息序列
y=dmodce(x,Fd,Fs,'qask',M); %QAM调制
ynoise=y+sqrt(Fs/Fd)*sgma*(randn(length(y),1)+j*randn(length(y),1)); %加入噪声
z=ddemodce(ynoise,Fd,Fs,'qask',M); %解调
[numbers,pe(n)]=symerr(x,z); %计算误符号率
end;
for m=1:length(SNR1_db) %计算理论误码率
Eb_N0=10^(SNR1_db(m)/10);
sq_M=sqrt(M);
temp=Qfunct(sqrt(Eb_N0*(3*(log2(M)))/(M-1)));
pe_theory(m)=1-(1-(2*(sq_M-1)*temp)/sq_M)^2;
end
semilogy(SNR_db,pe,'*',SNR1_db,pe_theory); %作出图象
xlabel('信噪比(dB)');
ylabel('误码率(Pe)');
legend('仿真得到的误符号率','理论符号误码曲线');
(5)编译过程中出现的问题
a. 对MATLAB的函数不熟悉,要想用某个函数的时候还要在书中查找函数,这样降低了整个编译过程的效率。
b. 在编译完成后的运行中,系统总是报错,然后才慢慢根据错误改正代码,这样也减慢了编译的效率,这些都是存在的问题,以后要仔细,避免一些低级的错误的出现。
4. 运行结果及分析(1)FSK