FPGAFFTWord下载.docx
- 文档编号:20441054
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:14
- 大小:640.85KB
FPGAFFTWord下载.docx
《FPGAFFTWord下载.docx》由会员分享,可在线阅读,更多相关《FPGAFFTWord下载.docx(14页珍藏版)》请在冰豆网上搜索。
%做频谱图
axis([0,100,0,80]);
xlabel('
频率(Hz)'
);
ylabel('
幅值'
title('
正弦信号幅频谱图'
grid;
图1正弦信号
%进行FFT变换并做频谱图
y=fft(x,N);
%进行fft变换
mag=abs(y);
%求幅值
图2幅频谱图
%求均方根谱
sq=abs(y);
figure(3);
plot(f,sq);
均方根谱'
正弦信号均方根谱'
图3均方根谱
%求功率谱
power=sq.^2;
figure(4);
plot(f,power);
xlabel(‘频率(Hz)’);
ylabel(‘功率谱’);
title(‘正弦信号功率谱’);
图4功率谱
%求对数谱
ln=log(sq);
figure(5);
plot(f,ln);
对数谱'
正弦信号对数谱'
图5对数谱
%用IFFT恢复原始信号
xifft=ifft(y);
magx=real(xifft);
ti=[0:
length(xifft)-1]/fs;
figure(6);
plot(ti,magx);
t'
y'
IFFT转换的正弦信号'
图6IFFT转换
2、用Verilog语言在FPGA上实现16点FFT算法
1,总体设计方案:
逐一对每个模块进行设计,采用VerilogHDL语言对各个模块进行设计,用QuartusII工具进行仿真。
采用单输入主要功能模块包括,算术逻辑单元,蝶形运算单元,输入输出存储单元,系统顶层控制单元
2,算术逻辑单元:
对16位有符号数求和,差,乘积,提供给蝶形运算器计算。
3,蝶形运算单元:
完成16位有符号整数的蝶形运算
4,输入输出存储单元:
存储输入序列和蝶形运算完成后的输出序列。
5,各模块综合代码如下:
modulefft_16(xn_r,xn_i,RST,CLK,START,OUT,Xk_r,Xk_i);
input[15:
0]xn_r,xn_i;
//输入的实部与虚部
inputRST,CLK,START;
//FFT启动信号与时钟信号和复位信号
output[15:
0]Xk_r,Xk_i;
//FFT输出实部与虚部
outputOUT;
//输出标志信号
reg[15:
regOUT;
regOUT1,STRT1;
//级联FFT4的输出标志和启动信号
reg[2:
0]k,j,m,n,l,p;
//循环指针
reg[4:
0]i;
0]IN_r[15:
0],IN_i[15:
0];
//存储输入的实部与虚部
0]OUT_r[15:
0],OUT_i[15:
//存储输出的实部与虚部
0]TRANIN_r,TRANIN_i;
//输入序列与FFT4输入之间的转接
0]TRANOUT_r,TRANOUT_i;
//输出序列与FFT4输出之间的转接
0]state;
parameterIdle=3'
b000,//空闲
Input=3'
b001,//输入
Compute0=3'
b010,//计算引擎
Compute1=3'
b100,//第二级计算的控制
Butfly=3'
b101,//蝶形计算
Output=3'
b110;
//输出
//定义三个移位函数
function[15:
0]Shift03;
//乘以0.3827
0]xn;
begin
Shift03={xn[15],xn[15:
1]}-{xn[15],xn[15],xn[15],xn[15:
3]}
+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:
7]}
-{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],
xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:
13]};
end
endfunction
0]Shift07;
//乘以0.7071
Shift07={xn[15],xn[15:
1]}+{xn[15],xn[15],xn[15],xn[15:
+{xn[15],xn[15],xn[15],xn[15],xn[15:
4]}
+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:
6]}
+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],
xn[15],xn[15],xn[15:
8]}+{xn[15],xn[15],xn[15],xn[15],
xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],
xn[15],xn[15],xn[15],xn[15],xn[15:
14]};
0]Shift09;
//乘以0.9239
Shift09=xn-{xn[15],xn[15],xn[15],xn[15],xn[15:
4]}
-{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15:
+{xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],xn[15],
9]};
//调用FFT4模块计算4组4点的FFT
//FFT4XFFT(.CLK(CLK),.START(STRT1),.xn_r(TRANIN_r),.xn_i(TRANIN_i),.OUT(OUT1),.Xk_r(TRANOUT_r),.Xk_i(TRANOUT_i));
always@(posedgeCLKorposedgeRST)
if(RST)
begin
state<
=Idle;
//异步复位,高电平有效
OUT<
=0;
//输出无效
end
else
case(state)
//空闲状态
Idle:
begin
if(START)//只有在空闲状态下才能启动FFT
=Input;
i<
else
//16位复数输入
Input:
if(i<
16)
IN_r[i]<
=xn_r;
IN_i[i]<
=xn_i;
=i+1;
elseif(i==16)//输入完毕进入的计算
=Compute0;
STRT1<
=1;
//启动FFT4
j<
//指针复位
k<
m<
n<
//第一二级计算
Compute0:
if(j<
4)//4组串行输入计算
//关断FFT4启动信号
if(k<
4)
TRANIN_r<
=IN_r[4*k+j];
//时选法输入
TRANIN_i<
=IN_i[4*k+j];
=k+1;
elseif(k==4)//k=4输入完毕,则等待FFT4的输出
if((OUT1==1)&
&
(m<
4))//可以输出
begin//这两个信号同时消失
OUT_r[4*j+m]<
=TRANOUT_r;
//连续存储
OUT_i[4*j+m]<
=TRANOUT_i;
=m+1;
if(m==4)//输出完毕,并非没有开始
=j+1;
//进入下一组的计算
//清零,以备用
//为下一个计算作准备启动信号
end//输出完毕
elseif(j==4)
if(n==0)
=Butfly;
//第一级计算完毕进入蝶形计算
=n+1;
elseif(n==3)
=Output;
//第二级计算完毕输出
l<
p<
Butfly:
if(n==1)
IN_r[0]<
=OUT_r[0];
IN_i[0]<
=OUT_i[0];
IN_r[1]<
=OUT_r[1];
IN_i[1]<
=OUT_i[1];
IN_r[2]<
=OUT_r[2];
IN_i[2]<
=OUT_i[2];
IN_r[3]<
=OUT_r[3];
IN_i[3]<
=OUT_i[3];
IN_r[4]<
=OUT_r[4];
IN_i[4]<
=OUT_i[4];
IN_r[5]<
=Shift09(OUT_r[5])+Shift03(OUT_i[5]);
IN_i[5]<
=Shift09(OUT_i[5])-Shift03(OUT_r[5]);
IN_r[6]<
=Shift07(OUT_r[6])+Shift07(OUT_i[6]);
IN_i[6]<
=Shift07(OUT_i[6])-Shift07(OUT_r[6]);
IN_r[7]<
=Shift03(OUT_r[7])+Shift09(OUT_i[7]);
IN_i[7]<
=Shift03(OUT_i[7])-Shift09(OUT_r[7]);
IN_r[8]<
=OUT_r[8];
IN_i[8]<
=OUT_i[8];
IN_r[9]<
=Shift07(OUT_r[9])+Shift07(OUT_i[9]);
IN_i[9]<
=Shift07(OUT_i[9])-Shift07(OUT_r[9]);
IN_r[10]<
=OUT_i[10];
IN_i[10]<
=0-OUT_r[10];
IN_r[11]<
=Shift07(OUT_i[11])-Shift07(OUT_r[11]);
IN_i[11]<
=0-Shift07(OUT_i[11])-Shift07(OUT_r[11]);
IN_r[12]<
=OUT_r[12];
IN_i[12]<
=OUT_i[12];
IN_r[13]<
=Shift03(OUT_r[13])+Shift09(OUT_i[13]);
IN_i[13]<
=Shift03(OUT_i[13])-Shift09(OUT_r[13]);
IN_r[14]<
=Shift07(OUT_i[14])-Shift07(OUT_r[14]);
IN_i[14]<
=0-Shift07(OUT_i[14])-Shift07(OUT_r[14]);
IN_r[15]<
=0-Shift09(OUT_r[15])-Shift03(OUT_i[15]);
IN_i[15]<
=Shift03(OUT_r[15])-Shift09(OUT_i[15]);
if(n==2)
=Compute1;
//进入第二级计算
Compute1:
=3;
Output:
begin//倒序输出
if(l<
Xk_r<
=OUT_r[4*p+l];
Xk_i<
=OUT_i[4*p+l];
=(p==3)?
0:
(p+1);
(l+1):
l;
elseif(l==4)//输出完毕
default:
endcase
endmodule
6,数据流结构仿真波形:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGAFFT