modulator.m

来自「stbc for flat rayleigh fading channel」· M 代码 · 共 45 行

M
45
字号
function [mod_vector,const,map_gray]=modulator(rand_data,bits,M,mod_scheme)

data=[];



for tt=1:bits:size(rand_data,1)-bits+1            % input data stream divided based on M-PSK and 
    t=bin2dec(int2str(rand_data(tt:tt+bits-1,:)')); % find its equivalent decimal value
    data=[data;t];
end

if(strcmp(mod_scheme,'psk')||strcmp(mod_scheme,'Psk')||strcmp(mod_scheme,'PSK'))
    initial_phase=input('Enter initial Phase of modulated signal= ');
    [data_gray,map_gray]=bin2gray(data,'psk',M);   % map_gray contains gray mapping for M,suppose M=8, map_gray having vector of gray code for 0 to 8
    map_gray=circshift(map_gray',[1 -2]);       % since map_gray vector start from 0, while our vector start from 3 so to make to start from 3 as for general constellation
    [t,index]=ismember(data,map_gray);     % index having index of elements of data in map_gray
    index=index-1;
    theta=-2*pi*index/M + initial_phase; 
    const_theta=-2*pi*[0:M-1]/M + initial_phase;
    mod_vector=cos(theta)+j*sin(theta); 
    const=cos(const_theta)+j*sin(const_theta);
    const=const(:);
%     plot(real(const),imag(const),'o','Markersize',6);
%     grid on;axis([-1 1 -1 1]);
else
    L=sqrt(M);
    r = 2*(0:L-1) - L + 1;
    [Ii,Qi] = meshgrid(r);
    Qi=flipud(Qi);
    % Ai=sqrt(Ii.^2+Qi.^2);
    % theta=atan(Qi./Ii);
    % const=Ai.*(cos(theta)+i*sin(theta));
    const=Ii+i*Qi;
    temp_const=transpose(const);
    [index,map_gray]=bin2gray(data,'qam',M);
    mod_vector=temp_const(index+1);
%     scatterplot(modulated);
    const=reshape(temp_const,[],1);
%     scatterplot(const1);
end




⌨️ 快捷键说明

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