📄 modulator.m
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -