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

📄 qpsk.m

📁 QPSK调制解调
💻 M
字号:
clear
Fc=5e6;  %用于调制解调的载波频率
%---QPSK调制
data=100;  %输入5MHZ的二进制信号
% input=randint(1,data);
input=ones(1,data);
for i = 1:4:data
    input(i) = 1;
end
for i = 2:4:data
    input(i) = 1;
end
for i = 3:4:data
    input(i) = 0;
end
for i = 4:4:data
    input(i) = 0;
end

for i=1:data   %串转并
    if rem(i,2)==1
        if input(i)==1
            I(i)=1;
            I(i+1)=1;
        else
            I(i)=-1;
            I(i+1)=-1;
        end
    else
        if input(i)==1
            Q(i-1)=1;
            Q(i)=1;
        else
            Q(i-1)=-1;
            Q(i)=-1;
        end
    end
end
zero=5;    %插值0,提高采样率,4倍插值
for i=1:zero*data
    if rem(i,zero)==1
        Izero(i)=I(fix((i-1)/zero)+1);
        Qzero(i)=Q(fix((i-1)/zero)+1);
    else
        Izero(i)=0;
        Qzero(i)=0;
    end
end
NT=5;              %The default value for N_T is 3.  The default value of RATE is 5.
N=2*zero*NT;        % The default value of T is 1.
Fs=25e6;            % B = RCOSFIR(R, N_T, RATE, T, FILTER_TYPE) designs and returns a
rf=0.3;             % square root raised cosine filter if FILTER_TYPE == 'sqrt'. T
psf=rcosfir(rf,NT,zero,Fs,'sqrt');%脉冲成形滤波器
Ipulse=conv(Izero,psf);
Qpulse=conv(Qzero,psf);

% zero=5;    %插值0,提高采样率,4倍插值
% for i=1:zero*length(Ipulse)
%     if rem(i,zero)==1
%         IIpulse(i)=Ipulse(fix((i-1)/zero)+1);
%         QQpulse(i)=Qpulse(fix((i-1)/zero)+1);
%     else
%         IIpulse(i)=0;
%         QQpulse(i)=0;
%     end
% end
% IIIpulse=conv(IIpulse,psf);
% QQQpulse=conv(IIpulse,psf);
% 
% Imod = IIIpulse;
% Qmod = QQQpulse;
% for i=1:zero*data+N    %调制
%     t(i)=(i-1)/(Fc*zero);
%     Imod(i)=IIIpulse(i).*sqrt(2)*cos(2*pi*Fc*t(i));
%     Qmod(i)=QQQpulse(i).*(-sqrt(2)*sin(2*pi*Fc*t(i)));
% end

Idata=Ipulse;
 % I data is a cosine wave
%  
Qdata=Qpulse;
 % Q data is a sine wave
 
% iqData = Idata + j*Qdata;
iqData = Ipulse + j*Qpulse;
 % complex IQ waveform
 
iqData = int16(iqData*32767);
 % convert waveform to short integers
 
markers = zeros(4,100);
 % create 4 markers
 
markers(:,1:20) = 1;
 % turn on markers
 
markers = char(markers)
 % 1 byte per marker data
 

% Save the data to a .mat file
% Note Idata and Qdata are saved as double precision values
% iqData is saved as short integer values
% marker data is saved as a 4x1000 array of characters (1 byte per)
save('C:\temp\data.mat','Idata','Qdata','iqData','markers');

 

⌨️ 快捷键说明

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