?? qpsk_demod_zibian.m
字號:
% 這個函數對qpsk信號進行解調;
% y是解調出的比特信息;
% 對于調制和解調來說,其載波頻率,采樣頻率,時間點n都應該是一致的
% 注意在將二進制信號轉化為4進制時有一個順序關系,比如0101序列
% 可以從左至右,也可以從右至左,
% 由于調制是按符號來調制的,解調時也要按相反的方向,先解調出符號
% 再轉化為比特流;
% function [y_demod_bit,y_demod_symbol]=...
% qpsk_demod_ZiBian(x,fc,fs,n)
function [y_demod_bit]=...
qpsk_demod_ZiBian(x,fc,fs,symbol_t,theta)
% 注意把握好fc,fs,n之間的關系,是一個四進制碼元內的載波信號點
% 是整數個周期;
% x表示的是輸入的調制信號,是列向量,
% fc是載波頻率,fs是采樣頻率,
% n是每一個四進制碼元下擁有的載波信號采樣點數;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<5
error('the input arguments are not complete');
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if size(x,1)<=size(x,2)
x=x';
else
x=x;
end; % 把x變換成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 時間的設置要注意兩點:采樣點數和采樣間隔;
n=ceil(symbol_t*fs);
t=(0:n-1)/fs;
% 一個二進制碼元下的載波:
signal_q=sin(2*pi*fc*t);
signal_i=cos(2*pi*fc*t);
signal_mod=x;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面是解調部分:
symbol_demod=[];
base_4=[0 1 2 3]';
mod_4=pskmod(base_4, 4 , theta);
for i=1:n:(size(signal_mod,1)-n+1)
demod_i=signal_i*signal_mod(i:i+n-1)/(n/2);
demod_q=signal_q*signal_mod(i:i+n-1)/(n/2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 注意進行相關檢測,
% 進行相關檢測,選出最大的;
% base_4=[0 1 2 3]';
% mod_4=pskmod(base_4, 4 , theta);
position=1; % 初始默認值;
aa=0;
for ii=1:size(mod_4,1)
ww=[demod_i,demod_q]*[real(mod_4(ii)),imag(mod_4(ii))]';
if ww>=aa
position=ii;
aa=ww;
end;
end;
symbol_demod_temp=base_4(position);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面的是硬判決,根本不能用;
% if (demod_i>=0) & (demod_q>=0)
% symbol_demod_temp=0;
% elseif (demod_i<0) & (demod_q>=0)
% symbol_demod_temp=1;
% elseif (demod_i<0) & (demod_q<0)
% symbol_demod_temp=2;
% elseif (demod_i>=0) & (demod_q<0)
% symbol_demod_temp=3;
% end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 先解調出符號;
symbol_demod=[symbol_demod,symbol_demod_temp];
end;
y_demod_symbol=symbol_demod;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if size(symbol_demod,1)<=size(symbol_demod,2)
symbol_demod=symbol_demod';
else
symbol_demod=symbol_demod;
end; % 把symbol_demod變換成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 再由符號恢復出比特流;
% symbol_demod是解調出的符號信息;
bit_demod=zeros(2*size(symbol_demod,1),1);
for ii=1:size(symbol_demod,1)
if (symbol_demod(ii)==0)
bit_demod(2*ii-1)=0;
bit_demod(2*ii)=0;
elseif (symbol_demod(ii)==1)
bit_demod(2*ii-1)=1;
bit_demod(2*ii)=0;
elseif (symbol_demod(ii)==2)
bit_demod(2*ii-1)=0;
bit_demod(2*ii)=1;
elseif (symbol_demod(ii)==3)
bit_demod(2*ii-1)=1;
bit_demod(2*ii)=1;
end;
end;
% y是解調出的比特信息;
y_demod_bit=bit_demod;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -