?? mod_pi4qpsk_030704.m
字號(hào):
function y = mod_pi4qpsk_030704 (x,n,M)
global k Fc Fd Fs Fs_n;
% OQPSK Modulation Procedure
% M = 2
% x 為長(zhǎng)度為1024*5=5120點(diǎn)的數(shù)字信號(hào),每個(gè)碼元里有Fs_n/Fd=120個(gè)數(shù),共42+2/3個(gè)碼元。
% 將 x 進(jìn)行串并轉(zhuǎn)換后分為兩個(gè)正交信號(hào) I 、Q。
% 分別對(duì)這兩個(gè)正交信號(hào)進(jìn)行2PSK調(diào)制,再將兩列相加。
% 首先將基帶數(shù)字信號(hào) x 變成雙極性信號(hào)(非零信號(hào))
x=-1+2*x; % “0”——“-1” “1”——“1”
% -------------------------------------------
% 將輸入的數(shù)字信號(hào)x分成兩路信號(hào)I0、Q0。
N1=length(x)-mod(length(x),Fs_n/Fd); % N1值為5040,共42個(gè)碼元,每個(gè)碼元用120個(gè)相同的數(shù)字表示。
x0=x(1:N1); % 取x的前5040個(gè)值。
for i=1:fix(length(x)/(Fs_n/Fd)/2) % 將42個(gè)碼元分為21(=length(x)/(Fs_n/Fd)/2)組,每組第一個(gè)碼元給同相分量,第二個(gè)碼元給正交份量。
for j=1:120
x1((i-1)*120+j)=x0(120*2*(i-1)+j);
x2((i-1)*120+j)=x0(120*2*(i-1)+j+120); % 得到x1、x2兩個(gè)分量長(zhǎng)度均為2520
end
end
%---- 將x1、x2碼元擴(kuò)展一倍,得到 I0、Q0 的長(zhǎng)度均為N1=5040,碼元寬度變?yōu)?40。
for i=1:N1/2
I0(2*i-1)=x1(i);
I0(2*i)=x1(i);
Q0(2*i-1)=x2(i);
Q0(2*i)=x2(i);
end
%---- I0、Q0均擴(kuò)展為5120點(diǎn)
for i=N1+1:length(x)
I0(i)=x(i);
Q0(i)=x(i);
end
% -------------------------------------------
% 將I0、Q0進(jìn)行信號(hào)變換得到兩路正交信號(hào)I、Q。
for i=1:240
if I0(i)==1&Q0(i)==1
I(i)=I0(i)*cos(pi/4)-Q0(i)*sin(pi/4);
Q(i)=Q0(i)*cos(pi/4)+I0(i)*sin(pi/4);
elseif I0(i)==-1&Q0(i)==1
I(i)=I0(i)*cos(3*pi/4)-Q0(i)*sin(3*pi/4);
Q(i)=Q0(i)*cos(3*pi/4)+I0(i)*sin(3*pi/4);
elseif I0(i)==-1&Q0(i)==-1
I(i)=I0(i)*cos(-3*pi/4)-Q0(i)*sin(-3*pi/4);
Q(i)=Q0(i)*cos(-3*pi/4)+I0(i)*sin(-3*pi/4);
elseif I0(i)==1&Q0(i)==-1
I(i)=I0(i)*cos(-pi/4)-Q0(i)*sin(-pi/4);
Q(i)=Q0(i)*cos(-pi/4)+I0(i)*sin(-pi/4);
end
end
for j=1:20
for i=1:240
if I0(j*240+i)==1&Q0(j*240+i)==1
I(j*240+i)=I((j-1)*240+i)*cos(pi/4)-Q((j-1)*240+i)*sin(pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(pi/4)+I((j-1)*240+i)*sin(pi/4);
elseif I0(j*240+i)==-1&Q0(j*240+i)==1
I(j*240+i)=I((j-1)*240+i)*cos(3*pi/4)-Q((j-1)*240+i)*sin(3*pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(3*pi/4)+I((j-1)*240+i)*sin(3*pi/4);
elseif I0(j*240+i)==-1&Q0(j*240+i)==-1
I(j*240+i)=I((j-1)*240+i)*cos(-3*pi/4)-Q((j-1)*240+i)*sin(-3*pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(-3*pi/4)+I((j-1)*240+i)*sin(-3*pi/4);
elseif I0(j*240+i)==1&Q0(j*240+i)==-1
I(j*240+i)=I((j-1)*240+i)*cos(-pi/4)-Q((j-1)*240+i)*sin(-pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(-pi/4)+I((j-1)*240+i)*sin(-pi/4);
end
end
end
for i=1:80
j=21;
if I0(j*240+i)==1&Q0(j*240+i)==1
I(j*240+i)=I((j-1)*240+i)*cos(pi/4)-Q((j-1)*240+i)*sin(pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(pi/4)+I((j-1)*240+i)*sin(pi/4);
elseif I0(j*240+i)==-1&Q0(j*240+i)==1
I(j*240+i)=I((j-1)*240+i)*cos(3*pi/4)-Q((j-1)*240+i)*sin(3*pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(3*pi/4)+I((j-1)*240+i)*sin(3*pi/4);
elseif I0(j*240+i)==-1&Q0(j*240+i)==-1
I(j*240+i)=I((j-1)*240+i)*cos(-3*pi/4)-Q((j-1)*240+i)*sin(-3*pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(-3*pi/4)+I((j-1)*240+i)*sin(-3*pi/4);
elseif I0(j*240+i)==1&Q0(j*240+i)==-1
I(j*240+i)=I((j-1)*240+i)*cos(-pi/4)-Q((j-1)*240+i)*sin(-pi/4);
Q(j*240+i)=Q((j-1)*240+i)*cos(-pi/4)+I((j-1)*240+i)*sin(-pi/4);
end
end
% -------------------------------------------
% 將I、Q進(jìn)行波形成形變換,經(jīng)過(guò)一個(gè)升余弦濾波器。
a=0.35;
f=linspace(-(1+a)/4*Fd,(1+a)/4*Fd,5120);
for i=1:5120
if abs(f(i))<=(1-a)/4*Fd
h(i)=1;
elseif abs(f(i))>(1-a)/4*Fd
h(i)=sqrt((1-sin((pi*4*abs(f(i))/Fd-1)/(2*a)))/2);
end
end
g=abs(ifft(h));
I1=fftfilt(g,I);
I1=I1/max(I1);
Q1=fftfilt(g,Q);
Q1=Q1/max(Q1);
% -------------------------------------------
% 將I1、Q1進(jìn)行調(diào)制,生成pi/4QPSK調(diào)制信號(hào)。
% M == 2
y_I =I1.* cos(2*pi*Fc*n );
y_Q =Q1.* sin(2*pi*Fc*n );
y = y_I - y_Q; % 得到pi/4QPSK調(diào)制信號(hào)。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -