DA9739基于射频DAC9739的任意波形产生的性能研究
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DA9739基于射频DAC9739的任意波形产生的性能研究相关的知识,希望对你有一定的参考价值。
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);
这个文件就是需要在Quartus中使用ROM进行调用的。并将这个mif文件的属性改为只读。
在ROM中对该文件进行调用:
完成如下配置后,编写代码(代码这里不给出),进行仿真,仿真结果如下所示:
使用类似的方法,我们可以依次得到线性调频信号以及编码信号。
线性调频信号是指频率随时间而线性改变(增加或减少)的信号。线性调频的瞬时频率f(t)呈线性变化:f(t)=f0+kt,其中f0表示时间等于零时的频率,k表示频率改变的速率,当k>0时,频率递增,k<0则递减。
运行该文件夹下的MATLAB,我们可以得到如下的仿真结果图:
利用和一相似的方法,我们可以得到如下的FPGA仿真结果:
编码信号采用卷积编码:
卷积码为(2,1,7)标准卷积码,约束长度为7比特,码生成矢量,(反相后输出),该码型共有64个状态。(2,1,7)卷积码的编码结构图如图1所示,该编码器中的寄存器的初值全为0,,输入1比特,根据生成多项式进行运算后,得到2比特的输出,输出后移位寄存器向右移位一次,并重复编码过程。
其仿真结果如下所示:
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核进行实现。
其仿真结果如下所示:
其配置如下所示:
2.3 经过一个RF D/A,RF D/A 用matlab模拟
整个方案的框图如下所示:
按上面的结构,将各个模块合并起来。得到如下的原理框图:
分别对选择三种模式的信号进行仿真得到如下的仿真结果:
Sin:
线性调频:
编码:
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');
A28-39
以上是关于DA9739基于射频DAC9739的任意波形产生的性能研究的主要内容,如果未能解决你的问题,请参考以下文章