?? qpsk_demod_zibian.m
字號(hào):
% 這個(gè)函數(shù)對(duì)qpsk信號(hào)進(jìn)行解調(diào);
% y是解調(diào)出的比特信息;
% 對(duì)于調(diào)制和解調(diào)來(lái)說(shuō),其載波頻率,采樣頻率,時(shí)間點(diǎn)n都應(yīng)該是一致的
% 注意在將二進(jìn)制信號(hào)轉(zhuǎn)化為4進(jìn)制時(shí)有一個(gè)順序關(guān)系,比如0101序列
% 可以從左至右,也可以從右至左,
% 由于調(diào)制是按符號(hào)來(lái)調(diào)制的,解調(diào)時(shí)也要按相反的方向,先解調(diào)出符號(hào)
% 再轉(zhuǎn)化為比特流;
% 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之間的關(guān)系,是一個(gè)四進(jìn)制碼元內(nèi)的載波信號(hào)點(diǎn)
% 是整數(shù)個(gè)周期;
% x表示的是輸入的調(diào)制信號(hào),是列向量,
% fc是載波頻率,fs是采樣頻率,
% n是每一個(gè)四進(jìn)制碼元下?lián)碛械妮d波信號(hào)采樣點(diǎn)數(shù);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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變換成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 時(shí)間的設(shè)置要注意兩點(diǎn):采樣點(diǎn)數(shù)和采樣間隔;
n=ceil(symbol_t*fs);
t=(0:n-1)/fs;
% 一個(gè)二進(jìn)制碼元下的載波:
signal_q=sin(2*pi*fc*t);
signal_i=cos(2*pi*fc*t);
signal_mod=x;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面是解調(diào)部分:
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);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 注意進(jìn)行相關(guān)檢測(cè),
% 進(jìn)行相關(guān)檢測(cè),選出最大的;
% base_4=[0 1 2 3]';
% mod_4=pskmod(base_4, 4 , theta);
position=1; % 初始默認(rèn)值;
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;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 先解調(diào)出符號(hào);
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變換成列向量;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 再由符號(hào)恢復(fù)出比特流;
% symbol_demod是解調(diào)出的符號(hào)信息;
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是解調(diào)出的比特信息;
y_demod_bit=bit_demod;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -