//注释仅供参考
% QAM16
clc;clear;close all;
R = 40e6; %符号率
beta =0.15; %beta,升余弦滤波器
nsamples = 5; % samples/symbol每符号的采样数
Fs=R*nsamples; % 对信号的采样频率 200M
nsymbols = 1616; % total symbols
nduration = 32; %成型滤波器截断为16个符号周期
alpha16qam = [-3 -1 1 3]; % 16-QAM alphabets
u=randsrc(1,nsymbols,alpha16qam) + sqrt(-1)*randsrc(1,nsymbols,alpha16qam);
xin = zeros(1,nsymbols*nsamples);
for m=1:nsymbols
index = (m-1)*nsamples + 1; %index=(1,1+nsamples,1+m*nsamples....)
xin(1,index) = u(m); %nsamples 20倍插值
end
imp1 = sqrc2(1/R,nsamples,nduration/2,beta); %impulse response
txout = filter(imp1,1,xin); % 平方根升余弦滤波器
env_in = txout(nsamples*nduration/2+1:end);
env_in=awgn(env_in,46.5,'measured');
env_in = env_in/max(abs(env_in)); %归一化
% save QAM16_BW40MHz_FS200M env_in
figure(3);
w=hamming(4096/1);
pxx1 = pwelch(env_in,w,[],'twosided');
pxx1 = 10*log10(fftshift(pxx1));
f = Fs*((0:length(pxx1)-1)/length(pxx1) - 0.5); %以对信息的采样频率为参考点
plot(f,pxx1);
env_in=env_in.';
%产生信号I Q
env_inI = real(env_in);
env_inQ = imag(env_in);
T_total = length(env_in);
%%%串并转化 204b一次发送32bit,1条lane一共发送2个点(I1个,Q1个)
env_inI0 = env_inI(1:T_total,:);
env_inQ0 = env_inQ(1:T_total,:);
qpath = quantizer('fixed','round','saturate',[16,14]); %Signed fixed-point mode.
fixI0 = num2hex(qpath,env_inI0);
fixQ0 = num2hex(qpath,env_inQ0);
n = length(env_inI0);
fid = fopen('E:/vivado_P/0311/tx_data_m/QAM16_9009data/env_inI0.coe','wt');
for i=1:1:n+2
if(i==1)
fprintf(fid,'%s;\n','memory_initialization_radix=16');
elseif(i==2)
fprintf(fid,'%s\n','memory_initialization_vector=');
elseif(i==n+2)
fprintf(fid,'%s;\n',fixI0(i-2,1:4));
else
fprintf(fid,'%s,\n',fixI0(i-2,1:4));
end
end
fclose(fid);
fid = fopen('E:/vivado_P/0311/tx_data_m/QAM16_9009data/env_inQ0.coe','wt');
for i=1:1:n+2
if(i==1)
fprintf(fid,'%s;\n','memory_initialization_radix=16');
elseif(i==2)
fprintf(fid,'%s\n','memory_initialization_vector=');
elseif(i==n+2)
fprintf(fid,'%s;\n',fixQ0(i-2,1:4));
else
fprintf(fid,'%s,\n',fixQ0(i-2,1:4));
end
end
fclose(fid);
16QAM信号生成以及16bit量化并生成COE文件
最新推荐文章于 2023-11-21 12:17:31 发布