关于FFT的问题请教高手!!!急!!!请教高手一个问题,非常着急,希望明白的给个回答,先谢谢大家了!!!
我最近下载了一个FFT算法的Verilog程序,在看到旋转因子这个地方怎么也不明白,程序如下:
always @ (posedge clock_c)
if (i4 == 1'b1)
case (i3)
1'b0 : n11 <= 16'b0111111100000000;
1'b1 : n11 <= 16'b0000000010000000;
default : n11 <= 16'bxxxxxxxxxxxxxxxx;
endcase
assign n12 = {n11[15],
n11[14],
n11[13],
n11[12],
n11[11],
n11[10],
n11[9],
n11[8]};
assign n13 = {n11[7],
n11[6],
n11[5],
n11[4],
n11[3],
n11[2],
n11[1],
n11[0]};
assign n14 = {{8{n5[7]}}, n5} * {{8{n12[7]}}, n12};
assign n15 = {n14[14],
n14[13],
n14[12],
n14[11],
n14[10],
n14[9],
n14[8],
n14[7]};
我的理解是:n5是采集的一个数据的实部,n12是旋转因子的实部,不明白这里为什么要把两个数据扩为16位,另外如果是两个16位数相乘,结果应该有36位才能保证不溢出,为什么n14只有16位,而n15只取7至14位呢?另外n11的第一种赋值n11 <= 16'b0111111100000000应该就是Wn0,其实部为1,虚部为0,怎么就能表示成0111111100000000的形式呢?
希望有明白的高手能给解释一下,不胜感激。也可以给我发email:nerd12@163.com.
代码几千行,没法贴。这一段已经能说明我的问题了,可惜怎么没人回答呢?