module my_fft (
clk,
reset_n,
inverse,
sink_valid,
sink_sop,
sink_eop,
sink_real,
sink_imag,
sink_error,
source_ready,
sink_ready,
source_error,
source_sop,
source_eop,
source_valid,
source_exp,
source_real,
source_imag);
input clk;
input reset_n;
input inverse;
input sink_valid;
input sink_sop;
input sink_eop;
input [11:0] sink_real;
input [11:0] sink_imag;
input [1:0] sink_error;
input source_ready;
output sink_ready;
output [1:0] source_error;
output source_sop;
output source_eop;
output source_valid;
output [5:0] source_exp;
output [11:0] source_real;
output [11:0] source_imag;
asj_fft_sglstream_fft_110 asj_fft_sglstream_fft_110_inst(
.clk(clk),
.reset_n(reset_n),
.inverse(inverse),
.sink_valid(sink_valid),
.sink_sop(sink_sop),
.sink_eop(sink_eop),
.sink_real(sink_real),
.sink_imag(sink_imag),
.sink_error(sink_error),
.source_ready(source_ready),
.sink_ready(sink_ready),
.source_error(source_error),
.source_sop(source_sop),
.source_eop(source_eop),
.source_valid(source_valid),
.source_exp(source_exp),
.source_real(source_real),
.source_imag(source_imag));
defparam
asj_fft_sglstream_fft_110_inst.nps = 1024,
asj_fft_sglstream_fft_110_inst.bfp = 1,
asj_fft_sglstream_fft_110_inst.nume = 1,
asj_fft_sglstream_fft_110_inst.mpr = 12,
asj_fft_sglstream_fft_110_inst.twr = 12,
asj_fft_sglstream_fft_110_inst.bpr = 16,
asj_fft_sglstream_fft_110_inst.bpb = 4,
asj_fft_sglstream_fft_110_inst.fpr = 4,
asj_fft_sglstream_fft_110_inst.mram = 0,
asj_fft_sglstream_fft_110_inst.m512 = 0,
asj_fft_sglstream_fft_110_inst.mult_type = 1,
asj_fft_sglstream_fft_110_inst.mult_imp = 0,
asj_fft_sglstream_fft_110_inst.dsp_arch = 0,
asj_fft_sglstream_fft_110_inst.srr = "AUTO_SHIFT_REGISTER_RECOGNITION=OFF",
asj_fft_sglstream_fft_110_inst.rfs1 = "my_fft_1n1024sin.hex",
asj_fft_sglstream_fft_110_inst.rfs2 = "my_fft_2n1024sin.hex",
asj_fft_sglstream_fft_110_inst.rfs3 = "my_fft_3n1024sin.hex",
asj_fft_sglstream_fft_110_inst.rfc1 = "my_fft_1n1024cos.hex",
asj_fft_sglstream_fft_110_inst.rfc2 = "my_fft_2n1024cos.hex",
asj_fft_sglstream_fft_110_inst.rfc3 = "my_fft_3n1024cos.hex";
endmodule
上面为fftIP核生成的代码。
首先频谱的概念,
频谱是频率谱密度的简称,是频率的分布曲线。复杂振荡分解为振幅不同和频率不同的谐振荡,这些谐振荡的幅值按频率排列的图形叫做频谱。
任何一个信号都可以正弦信号的线性叠加。而频谱图中横轴为频率,纵轴表示幅度关系。
实现频谱图的方法,则先在fpga开发板中对信号进行快速傅里叶变换,然后将fft运算之后的结果经FIFO之后,通过spi协议与stm32单片机进行通信,从而实现在4.3寸液晶屏上面显示频谱图。
下面为fpga设计图。
下面则为stm32获取数据的函数。
最后用LCD_DrawLine函数进行画图,最后发现只有在一定频率上才能看出效果,可以通过改采样频率或者采样点数,实现分辨率变高。效果图,在220KHZ,ampl为3vpp时,相位与偏置均为0的方波。?
本人第一次写文章,希望各位大佬能指点一下我!!!?
|