📄 mif_gen.m
字号:
%-------------------------------------------------------------------------%
%-- 本程序用来产生时间抽取基-2FFT的旋转因子。 --%
%-- 程序还能够输出ROM初始化文件*.mif。 --%
%-- 作者:Xudong --%
%-- 时间:2004年5月4日 --%
%-------------------------------------------------------------------------%
clear;
clc;
PI=3.14159265357;
PRECISION=8; %--旋转因子的精度(数据位宽)。
POINTS=32; %--时间抽取基-2FFT的点数。
WN_DOT=POINTS/2; %--旋转因子数组元素个数。
theta=[0:1/WN_DOT*PI:(WN_DOT-1)/WN_DOT*PI];
cos_ary=cos(theta);
sin_ary=sin(theta);
wn_r_t=round(cos_ary*2^(PRECISION-1)); %--四舍五入取整。
wn_i_t=-round(sin_ary*2^(PRECISION-1));%--此处要加“-”号,为便于后面处理。
for i=1:WN_DOT %--产生wn_r和wn_i数组(要用补码来表示)。
if wn_r_t(i)<0
wn_r(i)=2^PRECISION+wn_r_t(i); %--取负数的补码。
elseif wn_r_t(i)==2^(PRECISION-1) %--避免对“+1”归一化时的错误。
wn_r(i)=wn_r_t(i)-1;
else
wn_r(i)=wn_r_t(i);
end;
if wn_i_t(i)<0
wn_i(i)=2^PRECISION+wn_i_t(i);
elseif wn_i_t(i)==2^(PRECISION-1)
wn_i(i)=wn_i_t(i)-1;
else
wn_i(i)=wn_i_t(i);
end;
end;
for k=1:POINTS %--产生实部和虚部交替的wn数组。
if mod(k,2)==1
if wn_r_t((k+1)/2)==2^(PRECISION-1); %--避免对“+1”归一化时的错误
wn(k)=wn_r_t((k+1)/2)-1;
else
wn(k)=wn_r_t((k+1)/2);
end;
else
if wn_i_t(k/2)==2^(PRECISION-1);
wn(k)=wn_i_t(k/2)-1;
else
wn(k)=wn_i_t(k/2);
end;
end;
end;
mif_id=fopen('wnk.mif','w');
if (mif_id==-1)
disp('Couldn''t open file correlat.vec for writing');
end;
fprintf(mif_id,'WIDTH=%d;\n',PRECISION);
fprintf(mif_id,'DEPTH=%d;\n',POINTS);
fprintf(mif_id,'\n');
fprintf(mif_id,'ADDRESS_RADIX=UNS;\n');
fprintf(mif_id,'DATA_RADIX=DEC;\n');
fprintf(mif_id,'\n');
fprintf(mif_id,'CONTENT BEGIN\n');
for i=1:POINTS
fprintf(mif_id,' %d : %d;\n',i-1,wn(i));
end
fprintf(mif_id,'END;\n');
fclose(mif_id);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -