如何基于DDS IP实现线性调频信号

描述

利用DDS IP实现线性调频信号

1 DDS技术简介随着电子技术的不断发展,传统的频率合成技术逐渐不能满足人们对于频率转换速度、频率分辨率等方面的追求,直接数字频率合成技术应运而生。

直接数字频率合成技术(DDS) 是把一系列数据量形式的信号通过D/A转换器转换成模拟量形式的信号合成技术。DDS具有很多优点,比如:频率转换快、频率分辨率高、相位连续、低功耗、低成本与控制方便。

DDS技术满足了人们对于速度稳定性的需求,但是在一些控制较为复杂的系统中,DDS专用芯片不能很好的贴合要求。利用现场可编程门阵列(FPGA)实现DDS具有很大的灵活性,基本能满足现在通信系统的使用要求。

2 DDS IP使用说明

DDS

基于FPGA的DDS设计方案

3 线性调频信号3.1 理论介绍

3.1.1 基本概念

线性调频(LFM)信号是瞬时频率随时间成线性变化的信号。线性调频信号也称为鸟声(Chirp)信号,因为其频谱带宽落于可听范围,听着像鸟声,所以又称Chirp扩展频谱(CSS)技术。

3.1.2 表达公式

本文重点研究Xlinx DDS IP实现线性调频信号,主要关心线性调频信号的相位变化情况,如若想要了解线性调频信号其他方面信息,请参考其他相关文章。

线性调频信号表达式:

DDS

线性调频信号数学公式

其中,t是时间,单位为秒(s);T是脉冲持续时间(周期);K是线性调频斜率,单位是Hz/s.

相位表达式:

φ(t)=πKt^2

相位变化率:

∆φ(t)=2πKt

3.1.3 应用范围

LFM技术在雷达、声纳技术中有广泛应用,例如,在雷达定位技术中,它可用来增大射频脉冲宽度、加大通信距离、提高平均发射功率,同时又保持足够的信号频谱宽度,不降低雷达的距离分辨率。

3.2 Matlab仿真

3.2.1 matlab代码

fs = 100e6; %采样率

T = 5e-6; %脉冲宽度

B = 10e6; %信号带宽

K = B/T;%调频斜率

N = round(T*fs);%采样点数

t = linspace(0,T,N);

y = exp(1j*pi*K*t.^2);%LFM信号

theta = pi*K*t.^2; %信号相位

dtheta = pi*K*t; %相位变化量figure;

plot(t,real(y));

title(‘LFM信号时域-实部’);

xlabel(‘t/s’);

ylabel(‘幅度’);

figure;

plot(t,imag(y));

title(‘LFM信号时域-虚部’);

xlabel(‘t/s’);

ylabel(‘幅度’);

figure;

plot(t,theta);

title(‘LFM信号相位’);

xlabel(‘t/s’);

ylabel(‘相位’);

figure;

plot(t,dtheta);

title(‘LFM相位变化率’);

xlabel(‘t/s’);

ylabel(‘相位变化率’);

3.2.2 仿真结果图像

3.3 FPGA实现

3.3.1 参数计算

For example:

参数与上述matlab参数一致,采样率fs:100MHz,脉冲宽度T:5us,信号带宽B:10MHz,采样点数N:500。Xlinx DDS IP设置如下,假定相位累加器设置为32位,输出信号宽度设置为12位,可以根据自己的需求进行设计:

需要注意的是相位增量不是一个定值,而是随时间呈线性变化的量。根据公式相位表达式φ(t)=πKt^2与相位变化率∆φ(t)=2πKt,端口S_AXIS_PHASE的CHAN_0_POFF 与CHAN_0_PINC设置如下: 当t = 0时φ(t) = πKt^2 = 0;∆φ(t) = 2πKt = 0相位变化率∆φ(t)每次增加的量为2πK∆t:2πK∆t = 2πBT/TNfs = 2πB/N由于DDS IP相位累加器位数Bθ(n)为32,且参数[0,2^32]对于相位弧度[0,1],那么相位增量∆θ公式如下:∆θ = 2πB/N*1/2π*2^Bθ(n)/fs = 858993.4592≈858993综上,CHAN_0_POFF设置为0,CHAN_0_PINC从0开始每次增加∆θ。

3.3.2 仿真结果

部分代码

//生成chirp信号

dds_compiler_0 suband_reference_waveform_inst (

.aclk (samp_clk),

.aclken (dds_aclken),

.aresetn (dds_aresetn),

.s_axis_phase_tvalid (s_axis_phase_tvalid),

.s_axis_phase_tdata (s_axis_phase_tdata),

.m_axis_data_tvalid (m_axis_data_tvalid),

.m_axis_data_tdata (m_axis_data_tdata),

.m_axis_phase_tvalid (m_axis_phase_tvalid),

.m_axis_phase_tdata (m_axis_phase_tdata)

);

wire signed [15:0] data_real = m_axis_data_tdata[15:0];

wire signed [15:0] data_imag = m_axis_data_tdata[31:16];

编辑:jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分