基于RAM的雷达线性调频信号产生
什么是DDS
????????DDS(Direct Digital Synthesis)是一種把一系列數(shù)字信號(hào)通過(guò)D/A轉(zhuǎn)換成模擬信號(hào)的數(shù)字合成技術(shù)。它有查表法和計(jì)算法兩種基本合成方法。由于ROM查詢法結(jié)構(gòu)簡(jiǎn)單,只需要在ROM中存放不同相位對(duì)應(yīng)的幅度序列,然后通過(guò)相位累加器的輸出對(duì)其尋址,經(jīng)過(guò)數(shù)/模轉(zhuǎn)換和低通濾波(LPF)輸出便可以得到所需要的模擬信號(hào)。這里,選用ROM查表法。DDS技術(shù)實(shí)質(zhì)上是實(shí)現(xiàn)了一個(gè)數(shù)字分頻器的功能。對(duì)于一個(gè)周期的正弦波連續(xù)信號(hào),可以沿其相位軸方向,以等量的相位間隔對(duì)其進(jìn)行相位/幅度采樣,得到一個(gè)周期性的正弦信號(hào)的離散相位的幅度序列,對(duì)模擬幅度進(jìn)行量化后的幅值采用二進(jìn)制量化保存,這樣就把一個(gè)周期的正弦波連續(xù)信號(hào)轉(zhuǎn)換成一系列離散的二進(jìn)制數(shù)字量,然后存到ROM中,每個(gè)存儲(chǔ)器單元的地址即是相位取樣地址,存儲(chǔ)單元的內(nèi)容是已經(jīng)量化了的正弦波幅值。一個(gè)這樣的Rom存儲(chǔ)器構(gòu)成了一個(gè)與2π周期相位取樣對(duì)應(yīng)的正弦波函數(shù)表。
????????換句話說(shuō),預(yù)先把波形數(shù)據(jù)存儲(chǔ)到ROM中,然后根據(jù)想要的輸出頻率進(jìn)行輸出,即可產(chǎn)生階梯波形,再通過(guò)低通濾波器進(jìn)行平滑處理即可得到任意波形
matlab產(chǎn)生ROM所需coe文件
clc,clear; %%參數(shù)設(shè)置 c=3e8; T=10e-6;%10e-6時(shí)間發(fā)送完畢10ns B=20e6;%%帶寬 K=B/T; Fs=200e6;%采樣率 Ts=1/Fs; f0=0;%頻點(diǎn)設(shè)置 可以修改 R=1000;%目標(biāo)距離 t=0:Ts:T; N=T/Ts+1;%采樣點(diǎn)數(shù) 對(duì)應(yīng)ROM深度 x0_cos=cos(2*pi*(f0+K/2.*t).*t);%得到的cos值在-1到1之前,需要量化,量化參數(shù)根據(jù)ROM位寬設(shè)置 %此處ROM位寬為16,由于MSB是符號(hào)位,所以cos數(shù)據(jù)*2^15 x0_cos=x0_cos*2^15; x0_sin=sin(2*pi*(f0+K/2.*t).*t); x0_sin=x0_sin*2^15; x0=x0_cos+1j*x0_sin;%發(fā)射 RCS可以設(shè)置,此處默認(rèn)為1fid=fopen('E:\work\matlab\coe\x0_cos.coe','wt'); fprintf(fid,'MEMORY_INITIALIZATION_RADIX = 10;\n'); fprintf(fid,'MEMORY_INITIALIZATION_VECTOR = \n'); for i=1:1:length(x0_cos)-1fprintf(fid,'%.0f,\n',x0_cos(1,i)); end fprintf(fid,'%.0f;\n',1e5*x0_cos(1,length(x0_cos))); fclose(fid);?vivado rom IP核使用
新建一個(gè)工程雙擊IP Catalog? 搜索ROM,選擇如圖所示ip
?rom的設(shè)置
?
?
點(diǎn)擊ok,即可生成rom IP核
Verilog 代碼?
先寫design source?
module dds(input clk,res,output[15:0] data );reg[10:0] addr;always@(posedge clk or negedge res)beginif(~res)begin;addr<=0;endelse if(addr==11'd2000)addr<=0;else addr<=addr+1;endtest_rom u1 (.clka(clk), // input wire clka.addra(addr), // input wire [10 : 0] addra.douta(data) // output wire [15 : 0] douta ); endmodule測(cè)試文件代碼如下
module test_dds_tb(); reg clk,res; wire[15:0] data; dds dds(.clk(clk),.res(res),.data(data) ); initial beginclk<=0;res<=0;#20 res<=1;#5000 $stop; end always #5 clk<=~clk;endmodule設(shè)為頂層文件之后運(yùn)行仿真,結(jié)果如下
?總結(jié)
數(shù)據(jù)會(huì)出現(xiàn)1000_0000_0000_0000,原本是32768,顯示-32768,因?yàn)轱@示的是有符號(hào)數(shù),具體的實(shí)現(xiàn)和設(shè)計(jì)根據(jù)項(xiàng)目要求設(shè)計(jì),或者自己設(shè)計(jì)一個(gè)rom,addr取址是有影響的,addr為0和1的時(shí)候取得值錯(cuò)誤,addr=2時(shí)取得值對(duì)應(yīng)線性調(diào)頻第一個(gè)數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的基于RAM的雷达线性调频信号产生的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 看拉扎维《模拟CMOS集成电路设计》的一
- 下一篇: linux下载jdk