16QAM信号生成以及16bit量化并生成COE文件

//注释仅供参考
% 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);



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值