fft輸入輸出解析。
輸入:fft要求輸入一個復數,但一般可以只輸入實數。
輸出:輸出一個復數,其模為信號強度。相位為波形相位。
設:
采樣頻率FS
轉換長度N
則:
分辨率為FS/N。
‘量程’為-FS/2~FS/2
提高采樣頻率則可提高量程,卻會(在轉換長度不變的情況下)降低分辨率。此時需要通過增加轉換長度的方式增加分辨率,但卻會增加處理時間。
相關ip核:
FFT V7.1:適用于Spartan3E系列,輸入輸出為wire或reg型。
FFT V8.0:使用AXI_STREAM總線協議。
FFT V9.0:使用AXI_STREAM總線協議,適用zyqn。
fftV7.1 ip核仿真實例:
開發環境:xilinx ISE+modelsim
選擇設備,添加ip核,編寫仿真文件
仿真文件如下
module test;
// Inputs
reg clk;
reg start;
reg fwd_inv;
reg fwd_inv_we;
reg scale_sch_we;
reg [15:0] xn_re;
reg [15:0] xn_im;
reg [11:0] scale_sch;
// Outputs
wire rfd,irfd;
wire busy,ibusy;
wire edone,iedone;
wire done,idone;
wire dv,idv;
wire [9:0] xn_index;
wire [9:0] xk_index;
wire [9:0] ixn_index;
wire [9:0] ixk_index;
wire [15:0] xk_im_t;
wire [15:0] xk_re_t;
wire [15:0] ixk_im_t;
wire [15:0] ixk_re_t;
wire [32:0] out;
wire signed [15:0] xk_re;
wire signed [15:0] xk_im;
wire signed [15:0] ixk_re;
wire signed [15:0] ixk_im;
wire [16:0] getifft;
// Instantiate the Unit Under Test (UUT)
fft uut (
.clk(clk),
.start(start),
.fwd_inv(fwd_inv),
.fwd_inv_we(fwd_inv_we),
.scale_sch_we(scale_sch_we),
.rfd(rfd),
.busy(busy),
.edone(edone),
.done(done),
.dv(dv),
.xn_re(xn_re),
.xn_im(xn_im),
.scale_sch(scale_sch),
.xn_index(xn_index),
.xk_index(xk_index),
.xk_re(xk_re),
.xk_im(xk_im)
);
complent inst1(ixk_re,ixk_re_t);
complent inst2(ixk_im,ixk_im_t);
assign out = ixk_re_t[14:0]*ixk_re_t[14:0]+ ixk_im_t[14:0]*ixk_im_t[14:0];
sqrt your_instance_name (
.x_in(out), // input [15 : 0] x_in
.x_out(getifft), // output [8 : 0] x_out
.clk(clk) // input clk
);
/*
fft iuut (
.clk(clk),
.start(dv),
.fwd_inv(~fwd_inv),
.fwd_inv_we(fwd_inv_we),
.scale_sch_we(0),
.rfd(irfd),
.busy(ibusy),
.edone(iedone),
.done(idone),
.dv(idv),
.xn_re(xk_re),
.xn_im(xk_im),
.scale_sch(0),
.xn_index(ixn_index),
.xk_index(ixk_index),
.xk_re(ixk_re),
.xk_im(ixk_im)
);
*/
ifft iuut (
.clk(clk),
.start(dv),
.fwd_inv(~fwd_inv),
.fwd_inv_we(fwd_inv_we),
.rfd(irfd),
.busy(ibusy),
.edone(iedone),
.done(idone),
.dv(idv),
.xn_re(xk_re),
.xn_im(xk_im),
.xn_index(ixn_index),
.xk_index(ixk_index),
.xk_re(ixk_re),
.xk_im(ixk_im)
);
initial begin
// Initialize Inputs
clk = 0;
start = 1;
fwd_inv = 1;
fwd_inv_we = 1;
scale_sch_we = 1;
xn_re = 0;
xn_im = 0;
scale_sch = 12'b101010101011;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always #50
begin
xn_re[14]=(~xn_re[14]);
end
always #1
clk=~clk;
endmodule
module complent(
input [15:0] complent,
output [15:0] truecode
);
wire [14:0]temp1;
wire [15:0]temp2;
assign temp1=complent[15]==0?complent[14:0]:~(complent[14:0]);
assign temp2={complent[15],temp1};
assign truecode= temp2 + 1;
endmodule
使用modelsim結果如下
輸入波形
fft輸出波形,包括實部和虛部
ifft輸出波形(實部和虛部),和經變換后的輸出波形
評論
查看更多