qam.m

来自「在matlab下输入guide命令后打开main_main.gig 实现卷积编码」· M 代码 · 共 82 行

M
82
字号
function Signal=QAM(Rs,Fs,Fc)
% this file used to produce qam signal
% clear all;

% simulation time
Temulate = 3;
%roll factor
alfa = 1;
%carrier intial phase
Qi = pi/8;
%snr
nos = 21;

% % symbol rate
% Rs = 9600;
% % sample rate
% Fs= Rs*8;
% % carrier frequency
% Fc= 19200;
% % Fc=Rs*2;

string = 'signal_16qamdata.dat';
bit_number = floor(Temulate*Rs);

rawdata = rand(1,bit_number);
for i=1:bit_number
   if(rawdata(i)>=0.5)
      rawdata(i)=1;
   else
      rawdata(i)=0;
   end
end

h = rcosfir(alfa,[-3,3],8,1,1);%;%1rcosfir(alfa,1,12,1,'sqrt')

In = zeros(1,bit_number*8/4+8);
Qn = zeros(1,bit_number*8/4+8);

j = 1;
for i = 1:4:bit_number
    if((rawdata(i) == 0) & (rawdata(i+1) == 0))
        In(1+j*8) = 3;%*0.41;
    elseif((rawdata(i) == 0) & (rawdata(i+1) == 1))
        In(1+j*8) = 1;%0.41;
    elseif((rawdata(i) == 1) & (rawdata(i+1) == 0))
        In(1+j*8) = -1;%0.41;
    elseif((rawdata(i) == 1) & (rawdata(i+1) == 1))
        In(1+j*8) = -3;%*0.41;
    end
    if((rawdata(i+2) == 0) & (rawdata(i+3) == 0))
        Qn(1+j*8) = 3;%*0.41;
    elseif((rawdata(i+2) == 0) & (rawdata(i+3) == 1))
        Qn(1+j*8) = 1;%0.41;
    elseif((rawdata(i+2) == 1) & (rawdata(i+3) == 0))
        Qn(1+j*8) = -1;%0.41;
    elseif((rawdata(i+2) == 1) & (rawdata(i+3) == 1))
        Qn(1+j*8) = -3;%*0.41;
    end
    
    j = j + 1;
end

%%%%%%%%%% shape the pulse(raw data) %%%%%%%%%%%
Ishape_data = conv(In,h);
Qshape_data = conv(Qn,h);

Ishape_data = Ishape_data / 0.42;     %     signal  =  Inn * coswt  ;  abs(Inn) = 1;
Qshape_data = Qshape_data / 0.42;



%%%%%%%%%% modulate %%%%%%%%%%%%%%%%%%%%%%%%%%%
dot = length(Ishape_data);% dot = length(Qshape_data)
n = 1:dot;
Imod_data = Ishape_data.*cos(Fc*2*pi*n/Fs+Qi);
Qmod_data = Qshape_data.*sin(Fc*2*pi*n/Fs+Qi);

mod_data = Imod_data - Qmod_data;
data=(mod_data)*1;

Signal=data;

⌨️ 快捷键说明

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