⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_pi4qpsk_030704.m

📁 2ask,4ask,2fsk,4fsk,2psk,4psk,16qam,gmsk,msk,pi/4qpsk,oqpsk.11种数字信号的生成。
💻 M
字号:
function y = mod_pi4qpsk_030704 (x,n,M)

global k Fc Fd Fs Fs_n;

% OQPSK Modulation Procedure
% M = 2
% x 为长度为1024*5=5120点的数字信号,每个码元里有Fs_n/Fd=120个数,共42+2/3个码元。
% 将 x 进行串并转换后分为两个正交信号 I 、Q。
% 分别对这两个正交信号进行2PSK调制,再将两列相加。


% 首先将基带数字信号 x 变成双极性信号(非零信号)

x=-1+2*x;   %  “0”——“-1”  “1”——“1”

% -------------------------------------------
% 将输入的数字信号x分成两路信号I0、Q0。

N1=length(x)-mod(length(x),Fs_n/Fd);      % N1值为5040,共42个码元,每个码元用120个相同的数字表示。

x0=x(1:N1);                                % 取x的前5040个值。
for i=1:fix(length(x)/(Fs_n/Fd)/2)         % 将42个码元分为21(=length(x)/(Fs_n/Fd)/2)组,每组第一个码元给同相分量,第二个码元给正交份量。
    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两个分量长度均为2520
    end
end

%---- 将x1、x2码元扩展一倍,得到 I0、Q0 的长度均为N1=5040,码元宽度变为240。
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均扩展为5120点
for i=N1+1:length(x)
    I0(i)=x(i);
    Q0(i)=x(i);
end

% -------------------------------------------
% 将I0、Q0进行信号变换得到两路正交信号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进行波形成形变换,经过一个升余弦滤波器。

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进行调制,生成pi/4QPSK调制信号。


% 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调制信号。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -