📄 top.m
字号:
%-------------------------------------------------------------------------%
%-- 时间抽取32点基-2固定缩小比例(2/级)fft的matlab验证程序。 --%
%-- 作者:Xudong --%
%-- 时间:2004年5月7日 --%
%------------------------------------------------------------------------%
%--本代码主要用来分析,此种FFT算法中相位误差的来源。
clear;
clc;
PI=3.14159265357;
DWIDTH=5;
POINTS=32;
OutDataWidth=16;
%--下面的程序用于产生仿真所需的输入信号(正弦信号)。
% ^
% | *
% | * *
% | * *
% | * *
% --|*--------------*--------------*----->
% |0 1 ... * *31
% | * *
% | * *
% | *
MULT_F=3;
OMIGA=2*PI/(POINTS-1)*MULT_F;
N=[0:1:31];
indata_signal=sin(OMIGA*N);
CONSTANT=0;
fftout_orig=fft(indata_signal+CONSTANT);
fftout_orig_xil=fftout_orig*2^DWIDTH/(2^log2(POINTS))*2^OutDataWidth;
thetaout_orig=angle(fftout_orig);
thetaout_orig_xil=thetaout_orig*2^(OutDataWidth-3);
indata=round((indata_signal+CONSTANT)/max(indata_signal+CONSTANT)*2^(DWIDTH-1));%--相当于是一个A/D采用器。
fftout_mat=fft(indata);%--Malab计算出的FFT理论输出。
fftout_xil=floor(fftout_mat/(2^log2(POINTS)));%--因为在设计中为了防止每级蝶形运算的数据逸出,
%--所以每级输出数据缩小了2倍。
absout_xil=abs(fftout_xil);%--FFT结果的理论模值。
thetaout=angle(fftout_xil);%--FFT结果的理论相位值(弧度表示)。
thetaout_xil=thetaout*2^(OutDataWidth-3);%--按Xilin的CORDIC核中定义的数据格式缩放后的数值(波形中的理论数值,便于比较用)。
%thetaout_du=thetaout/PI*180;%--度数表示的FFT相位理论输出结果。
[g1out,g2out,g3out,g4out,g5out]=simfft(indata);
absg5out=abs(g5out)*2^(OutDataWidth-8);
%--图形化输出。
figure(1);
subplot(2,1,1);
stem(indata,'*-r');
title('输入数据时域值','color','b','FontSize',8);
subplot(2,1,2);
stem(abs(fftout_xil),'*-r');
title('FFT输出理论值','color','b','FontSize',8);
figure(2);
stem(absg5out);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -