数控振荡器(NCO,numerically controlled oscillator)软件无线接收机,直接频率合成器(DDS),快速傅里叶变换(FFT)的重要组成部分,NCO采用全数字技术实现,具有分辨率高,频率切换快,相位噪声低等优点。
一般实现NCO的方法是查表法,即实现计算好各个相位的正余弦值存储在查找表中,然后通过寻址输出相应的正余弦值。
下面利用查表法分两步实现一个基于FPGA以及VerilogHDL语言的NCO。
1.利用matlab软件将所需要的相位的正余弦值计算好待用
其中利用matlab产生正余弦值的程序如下:
clear,clc,close all
%%设置参数
sam_clk=20; %%采样频率
out_freq=1;%%输出频率
data_width=18;%%数据位宽, 量化位数
N=20;
%%计算正弦值
sin_1=-sin(([0:N])*2*pi*out_freq/sam_clk);
sin_1_out=round(sin_1*2^(data_width-1));
%%计算余弦值
cos_1=cos(([0:N])*2