?? qpsk_ber.m
字號(hào):
% 編一個(gè)統(tǒng)計(jì)qpsk調(diào)制的誤碼率程序;
% clc; clear all; close all;
ray_factor=0.25;
% 發(fā)送的二進(jìn)制點(diǎn)數(shù);
N=10000; m=20;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面的程序只設(shè)置五條多徑;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 初始是0101的代碼;
input_signal=ceil(rand(1,N)-0.5);
% 再轉(zhuǎn)化為+-1的雙極性碼;
input_signal=sign(input_signal-0.5);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 很關(guān)鍵的一點(diǎn)就是:
% 設(shè)置基帶信號(hào)的采樣點(diǎn)數(shù),用于將來的延遲設(shè)置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 模擬發(fā)送信號(hào);一路二進(jìn)制比特信號(hào)被分成兩路sin和cos正交的信號(hào),
% 這兩路信號(hào)是不會(huì)相互干擾的,兩路信號(hào)分別有延遲和噪聲;
for i=1:2:size(input_signal,2)-1
channel_i((i+1)/2)=input_signal(i);
end;
for i=2:2:size(input_signal,2)
channel_q((i)/2)=input_signal(i);
end;
% 轉(zhuǎn)化為發(fā)送信號(hào)的形式;
channel_i_i=symbol_sample(channel_i,m);
channel_q_q=symbol_sample(channel_q,m);
snr_plot=-20:20;
ber=[];
for snr=-20:20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 經(jīng)過瑞利多徑信道后的結(jié)果
% 加噪聲;
sigma=sqrt(1/10^(snr/10));
channel_i_ray=Rayleigh_DuoJing...
(channel_i_i,sigma,5,ray_factor,[0,1,2,3,4],[0,-1,-2,-3,-4]);
channel_q_ray=Rayleigh_DuoJing...
(channel_q_q,sigma,5,ray_factor,[0,1,2,3,4],[0,-1,-2,-3,-4]);
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % 加噪聲;
% sigma=sqrt(1/10^(snr/10));
% randn('state',0);
% channel_i_ray=channel_i_ray+sigma*randn(size(channel_i_i));
% channel_q_ray=channel_q_ray+sigma*randn(size(channel_q_q));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 以下是檢測(cè)部分;
matrix_4=[ones(m,1),ones(m,1),(-1)*ones(m,1),(-1)*ones(m,1);
ones(m,1),(-1)*ones(m,1),ones(m,1),(-1)*ones(m,1)];
output_signal=zeros(2,size(input_signal,2)/2);
for i=1:size(input_signal,2)/2
i_q=[channel_i_ray((i-1)*m+1:i*m),...
channel_q_ray((i-1)*m+1:i*m)];
temp_i_q=i_q*matrix_4;
max_i_q=max(i_q*matrix_4);
if temp_i_q(1)==max_i_q
output_signal(:,i)=[1;1];
elseif temp_i_q(2)==max_i_q
output_signal(:,i)=[1;-1];
elseif temp_i_q(3)==max_i_q
output_signal(:,i)=[-1;1];
elseif temp_i_q(4)==max_i_q
output_signal(:,i)=[-1;-1];
end;
end;
end_out=[];% 最后輸出的比特信息;
for i=1:size(input_signal,2)/2
temp_out=output_signal(:,i)';
end_out=[end_out,temp_out];
end;
xx=find(input_signal-end_out);
x_len=length(xx);
ber_temp=x_len/N;
ber=[ber,ber_temp];
end;
figure;
semilogy(snr_plot,ber,'b^-'); hold on;
% 設(shè)置了10條多徑;
N=10000;
% 初始是0101的代碼;
input_signal=ceil(rand(1,N)-0.5);
% 再轉(zhuǎn)化為+-1的雙極性碼;
input_signal=sign(input_signal-0.5);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 很關(guān)鍵的一點(diǎn)就是:
% 設(shè)置基帶信號(hào)的采樣點(diǎn)數(shù),用于將來的延遲設(shè)置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 模擬發(fā)送信號(hào);一路二進(jìn)制比特信號(hào)被分成兩路sin和cos正交的信號(hào),
% 這兩路信號(hào)是不會(huì)相互干擾的,兩路信號(hào)分別有延遲和噪聲;
for i=1:2:size(input_signal,2)-1
channel_i((i+1)/2)=input_signal(i);
end;
for i=2:2:size(input_signal,2)
channel_q((i)/2)=input_signal(i);
end;
% 轉(zhuǎn)化為發(fā)送信號(hào)的形式;
channel_i_i=symbol_sample(channel_i,m);
channel_q_q=symbol_sample(channel_q,m);
snr_plot=-20:20;
ber=[];
for snr=-20:20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 經(jīng)過瑞利多徑信道后的結(jié)果
% 加噪聲;
sigma=sqrt(1/10^(snr/10));
channel_i_ray=Rayleigh_DuoJing...
(channel_i_i,sigma,10,ray_factor,[0,1,2,3,4,5,6,7,8,9],[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]);
channel_q_ray=Rayleigh_DuoJing...
(channel_q_q,sigma,10,ray_factor,[0,1,2,3,4,5,6,7,8,9],[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % 加噪聲;
% randn('state',0);
% channel_i_ray=channel_i_ray+sigma*randn(size(channel_i_i));
% channel_q_ray=channel_q_ray+sigma*randn(size(channel_q_q));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 以下是檢測(cè)部分;
matrix_4=[ones(m,1),ones(m,1),(-1)*ones(m,1),(-1)*ones(m,1);
ones(m,1),(-1)*ones(m,1),ones(m,1),(-1)*ones(m,1)];
output_signal=zeros(2,size(input_signal,2)/2);
for i=1:size(input_signal,2)/2
i_q=[channel_i_ray((i-1)*m+1:i*m),...
channel_q_ray((i-1)*m+1:i*m)];
temp_i_q=i_q*matrix_4;
max_i_q=max(i_q*matrix_4);
if temp_i_q(1)==max_i_q
output_signal(:,i)=[1;1];
elseif temp_i_q(2)==max_i_q
output_signal(:,i)=[1;-1];
elseif temp_i_q(3)==max_i_q
output_signal(:,i)=[-1;1];
elseif temp_i_q(4)==max_i_q
output_signal(:,i)=[-1;-1];
end;
end;
end_out=[];% 最后輸出的比特信息;
for i=1:size(input_signal,2)/2
temp_out=output_signal(:,i)';
end_out=[end_out,temp_out];
end;
xx=find(input_signal-end_out);
x_len=length(xx);
ber_temp=x_len/N;
ber=[ber,ber_temp];
end;
semilogy(snr_plot,ber,'r*-'); grid on;
xlabel('Eb/No(dB)'); ylabel('誤比特率');
title('短波瑞利多徑信道下的誤比特率曲線');
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面的程序設(shè)置20條多徑;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 發(fā)送的二進(jìn)制點(diǎn)數(shù);
% 初始是0101的代碼;
input_signal=ceil(rand(1,N)-0.5);
% 再轉(zhuǎn)化為+-1的雙極性碼;
input_signal=sign(input_signal-0.5);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 很關(guān)鍵的一點(diǎn)就是:
% 設(shè)置基帶信號(hào)的采樣點(diǎn)數(shù),用于將來的延遲設(shè)置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 模擬發(fā)送信號(hào);一路二進(jìn)制比特信號(hào)被分成兩路sin和cos正交的信號(hào),
% 這兩路信號(hào)是不會(huì)相互干擾的,兩路信號(hào)分別有延遲和噪聲;
for i=1:2:size(input_signal,2)-1
channel_i((i+1)/2)=input_signal(i);
end;
for i=2:2:size(input_signal,2)
channel_q((i)/2)=input_signal(i);
end;
% 轉(zhuǎn)化為發(fā)送信號(hào)的形式;
channel_i_i=symbol_sample(channel_i,m);
channel_q_q=symbol_sample(channel_q,m);
snr_plot=-20:20;
ber=[];
for snr=-20:20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 經(jīng)過瑞利多徑信道后的結(jié)果
% 加噪聲;
sigma=sqrt(1/10^(snr/10));
channel_i_ray=Rayleigh_DuoJing...
(channel_i_i,sigma,20,ray_factor,[0:19],(-1)*[0:19]);
channel_q_ray=Rayleigh_DuoJing...
(channel_q_q,sigma,20,ray_factor,[0:19],(-1)*[0:19]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% randn('state',0);
% channel_i_ray=channel_i_ray+sigma*randn(size(channel_i_i));
% channel_q_ray=channel_q_ray+sigma*randn(size(channel_q_q));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 以下是檢測(cè)部分;
matrix_4=[ones(m,1),ones(m,1),(-1)*ones(m,1),(-1)*ones(m,1);
ones(m,1),(-1)*ones(m,1),ones(m,1),(-1)*ones(m,1)];
output_signal=zeros(2,size(input_signal,2)/2);
for i=1:size(input_signal,2)/2
i_q=[channel_i_ray((i-1)*m+1:i*m),...
channel_q_ray((i-1)*m+1:i*m)];
temp_i_q=i_q*matrix_4;
max_i_q=max(i_q*matrix_4);
if temp_i_q(1)==max_i_q
output_signal(:,i)=[1;1];
elseif temp_i_q(2)==max_i_q
output_signal(:,i)=[1;-1];
elseif temp_i_q(3)==max_i_q
output_signal(:,i)=[-1;1];
elseif temp_i_q(4)==max_i_q
output_signal(:,i)=[-1;-1];
end;
end;
end_out=[];% 最后輸出的比特信息;
for i=1:size(input_signal,2)/2
temp_out=output_signal(:,i)';
end_out=[end_out,temp_out];
end;
xx=find(input_signal-end_out);
x_len=length(xx);
ber_temp=x_len/N;
ber=[ber,ber_temp];
end;
semilogy(snr_plot,ber,'ks-'); grid on;
legend('5條多徑','10條多徑','20條多徑');
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -