1.软件版本

MATLAB2013b,Quartusii12.1

2.算法理论

2.1产生测试信号

首先设计一个FPGA正弦,线性调频,编码。然后将信号经过一个LVDS。再经过一个RF D/A。

通过如下MATLAB运行得到如下的波形:

clc;
clear;
close all


depth = 4096; %存储单元数;
widths = 16; %数据宽度为14位;
N = 2*pi/depth : 2*pi/depth : 2*pi; %保存1/4个周期
s = round(2^(widths-2) * sin(N));

figure;
plot(s,'r-*');
grid on;
title('1/4周期正弦波');

%以"wt"的形式打开,\n为换行
fidc=fopen('dds.mif','wt');
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'width=%d;\n',widths);
fprintf(fidc,'address_radix=dec;\n');
fprintf(fidc,'data_radix = dec;\n');
fprintf(fidc,'Content Begin\n');

for x=1:depth
fprintf(fidc,'%d:%d;\n',x-1,s(x));
end

fprintf(fidc,'end;');
fclose(fidc);

【DA9739】基于射频DAC9739的任意波形产生的性能研究_5e

 这个文件就是需要在Quartus中使用ROM进行调用的。并将这个mif文件的属性改为只读。

     在ROM中对该文件进行调用:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_5e_02

完成如下配置后,编写代码(代码这里不给出),进行仿真,仿真结果如下所示:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_03

使用类似的方法,我们可以依次得到线性调频信号以及编码信号。

      线性调频信号是指频率随时间而线性改变(增加或减少)的信号。线性调频的瞬时频率f(t)呈线性变化:f(t)=f0+kt,其中f0表示时间等于零时的频率,k表示频率改变的速率,当k>0时,频率递增,k<0则递减。

      运行该文件夹下的MATLAB,我们可以得到如下的仿真结果图:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_04

 利用和一相似的方法,我们可以得到如下的FPGA仿真结果:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_05

编码信号采用卷积编码:

      卷积码为(2,1,7)标准卷积码,约束长度为7比特,码生成矢量,(反相后输出),该码型共有64个状态。(2,1,7)卷积码的编码结构图如图1所示,该编码器中的寄存器的初值全为0,,输入1比特,根据生成多项式进行运算后,得到2比特的输出,输出后移位寄存器向右移位一次,并重复编码过程。

【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_06

    其仿真结果如下所示:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_5e_07

2.2 LVDS

LVDS接口又称RS-644总线接口,是20世纪90年代才出现的一种数据传输和接口技术。LVDS即低电压差分信号,这种技术的核心是采用极低的电压摆幅高速差动传输数据,可以实现点对点或一点对多点的连接,具有低功耗、低误码率、低串扰和低辐射等特点,其传输介质可以是铜质的PCB连线,也可以是平衡电缆。LVDS在对信号完整性、低抖动及共模特性要求较高的系统中得到了越来越广泛的应用。

目前,流行的LVDS技术规范有两个标准:一个是 TIA/EIA(电讯工业联盟/电子工业联盟)的ANSI/TIA/EIA-644标准,另一个是IEEE 1596.3标准。

    这里,LVDS主要是用于在实际硬件的时候,需要LVDS高速接口将数据发送到ADC中,但是这里,我们暂时使用MATLAB进行验证,故在进行MATLAB模拟ADC的时候,不需要LVDS,所以,这里LVDS单独给出进行仿真分析。

这里LVDS主要使用ALTERA的IP核进行实现。

其仿真结果如下所示:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_框图_08

其配置如下所示:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_09

【DA9739】基于射频DAC9739的任意波形产生的性能研究_射频DAC9739_10

【DA9739】基于射频DAC9739的任意波形产生的性能研究_射频DAC9739_11

2.3 经过一个RF D/A,RF D/A 用matlab模拟

整个方案的框图如下所示:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_框图_12

 

按上面的结构,将各个模块合并起来。得到如下的原理框图:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_框图_13

分别对选择三种模式的信号进行仿真得到如下的仿真结果:

Sin:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_14

线性调频:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_5e_15

编码:

【DA9739】基于射频DAC9739的任意波形产生的性能研究_数据_16

3.采样性能分析

clc;
clear;
close all;
warning off

sel = 0;%1:调用QII的仿真数据,0:调用完毕后开始调制
sel2 = 1;%1:使用内部测试信号, 0:使用QII仿真数据

%缩放比例因子,由于频率值非常大,数据量很大,我们需要将频率同时降低,达到显示的效果
KK = 1e5;
%采样频率
Fs = 2.5e9/KK;%2.5G
%中频频率
Fc = 2.5e9/2/KK;
%fsync符号时钟
fsync = 25e6/KK;%这里假设采集到的数据在FPGA内部的采样率为25M,具体值可以调整。



if sel == 1
figure;
%读取sin数据
Data_sin = tbls('sin_tbl\sin.tbl');
Data_sin = Data_sin(1:0.9*length(Data_sin));
subplot(311);
plot(Data_sin);

%读取线性调频数据
Data_fm = tbls('Linear_FM_tbl\fm.tbl');
Data_fm = Data_fm(1:0.9*length(Data_fm));
subplot(312);
plot(Data_fm);


%读取编码后的数据
Data_coder = tbls('Coder_tbl\coder.tbl');
Data_coder = Data_coder(1:0.9*length(Data_coder));
subplot(313);
plot(Data_coder);

save QuartusII_save_data.mat Data_sin Data_fm Data_coder
else
load QuartusII_save_data.mat
figure;
%读取sin数据
subplot(311);
plot(Data_sin);
%读取线性调频数据
subplot(312);
plot(Data_fm);
%读取编码后的数据
subplot(313);
plot(Data_coder);
end



%取其中的一部分数据进行处理,防止数据流太多报错out of memory
S = 20001;
E = 20400;
%任意取一段数据
Data_sin = Data_sin(S:E);
Data_fm = Data_fm(S:E);
Data_coder = Data_coder(S:E);

%为了模拟出三种模式即RZ MIX NRZ,选择其中一个信号作为测试信号
N = Fs/fsync;%采样率倍数
%为了产生资料中的效果,取N = 4;
N = 2;

if sel2 == 1
test_data = sin(2*pi*[2/Fs:2/Fs:1]);
else
test_data = Data_sin/max(Data_sin);
end


LL = length(test_data);
SData_coder = test_data;


%使用Fs进行不同模式的采样
%NRZ
SData_coder_NRZ = SData_coder;

%RZ
SData_coder_RZ = SData_coder;
SData_coder_RZ(2:N:end) = 0;

%MIX
SData_coder_MIX = SData_coder;
SData_coder_MIX(2:N:end) = -1*SData_coder(1:N:end);


figure;
subplot(311);stairs(SData_coder_NRZ);title('NRZ');
subplot(312);stairs(SData_coder_RZ);title('RZ');
subplot(313);stairs(SData_coder_MIX);title('MIX');


nfft = 512;
f=Fs*(0:nfft-1)/nfft;
%绘制三种不同模式下的幅频图
y_fft1 = -20*log10(fftshift(abs(fft(SData_coder_NRZ,nfft))));
y_fft2 = -20*log10(fftshift(abs(fft(SData_coder_RZ,nfft))));
y_fft3 = -20*log10(fftshift(abs(fft(SData_coder_MIX,nfft))));


figure;
plot(f(1:round(2*length(f)/3)),y_fft1(1:round(2*length(f)/3)),'b');hold on;
plot(f(1:round(2*length(f)/3)),y_fft2(1:round(2*length(f)/3)),'r');hold on;
plot(f(1:round(2*length(f)/3)),y_fft3(1:round(2*length(f)/3)),'k');hold off;
grid on
xlabel('FREQUENCY(Hz)');
ylabel('dBFS');
legend('NRZ','RZ','MIX');













【DA9739】基于射频DAC9739的任意波形产生的性能研究_fpga开发_17

 A28-39