专利名称:用于数字扫描变换装置的坐标转换方法及处理器的制作方法
技术领域:
本发明涉及电数字数据处理领域中根据所要处理的数据的位数或内容进行运算的数据处理方法和装置,尤其涉及用于B超显像仪的数字扫描变换装置中的坐标转换方法及处理器。
背景技术:
现有技术涉及的B超显像仪中数字扫描变换装置,要把显示用直角坐标数据转换为极坐标数据,可以采用查表、使用专用坐标变换芯片或构建电路等方法来实现。采用查表的方法,存在容量有限而成本很高地缺点;采用专用坐标变换芯片,存在性能调整不灵活的缺点;采用构建专用电路的方法,由于直角坐标转换为极坐标通常采用的是CORDIC(Coordinate RotationDigital Computer坐标旋转数字计算机)算法,而采用现有的CORDIC算法实现直角坐标到极坐标的转换,不足以实现灵活调整精度、速度等性能参数,不能满足对显像仪的高精度、大容量并且实时工作的要求。
发明内容
本发明要解决的技术问题在于避免上述现有技术的不足之处,而提出一种用于B超显像仪中数字扫描变换装置的坐标转换方法及处理器。
本发明解决上述技术问题采用的技术方案是,提出一种用于数字扫描变换装置的坐标转换方法,用以把直角坐标值(x0,y0)转换为极坐标值(r,p),包括步骤
(1).初始化处理把相位判断变量Xs,Ys和角度变量z(0)赋值为0,把符号变量couti赋值为1;
(2).预处理根据直角坐标值(x0,y0)给相位判断变量Xs,Ys赋值,并把(x0,y0)转换为无符号数若X0<0,则Xs,=1;若Y0<0,则Ys=1;
且(x0,y0)=(|x0|,|y0|);
(3).CORIDIC算法运算,依次分两个阶段
第一阶段用左移操作进行a次CORDIC算法的迭代,即
i从0到a-1,按步长为1递增,循环计算
x(i+1)=2i*x(i)+y(i);y(i+1)=|2i*y(i)-x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(2i*y(i)-x(i));
第二阶段用右移操作进行(N-a)次CORDIC算法的迭代,即
i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
(4).半径修正
(5).相位修正p=z(N)/2N,
若(Xs,Ys)=(0,0),p值不调整;若(Xs,Ys)=(1,0),p=π-p;
若(Xs,Ys)=(1,1),p=π+p; 若(Xs,Ys)=(0,1),p=2π-p。
本发明解决上述技术问题采用的技术方案还包括,设计制造一种用于数字扫描变换装置的坐标转换处理器,用以把直角坐标值(x0,y0)输入转换为极坐标值(r,p)输出,包括
(1).输入模块
接受前端电路过来的x0,y0,对用到的常数和初始变量进行赋值相位判断变量Xs,Ys和角度变量z(0)赋值为0,符号变量couti赋值为1;
(2).预处理模块
区分x0,y0的象限,进行赋值运算
若X0<0,则 Xs=1;若Y0<0,则Ys=1,且x0=|x0|,y0=|y0|;
(3).迭代运算模块,依次分为两个模块
迭代运算第一模块
用左移操作实现a次CORDIC算法的迭代运算,
即i从0到a-1,按步长为1递增,循环计算
x(i+1)=2i*x(i)+y(i);y(i+1)=|2i*y(i)-x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(2i*y(i)-x(i));
迭代运算第二模块
用右移操作实现(N-a)次CORDIC算法的迭代运算,
即i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
(4).半径修正模块
进行运算
(5).相位修正模块
进行运算p=z(N)/2N,
若(Xs,Ys)=(0,0),p=p; 若(Xs,Ys)=(1,0),p=π-p;
若(Xs,Ys)=(1,1),p=π+p;若(Xs,Ys)=(0,1),p=2π-p;
(6).输出模块
把r,p值送后端电路处理。
同现有技术相比较,采用本发明用于数字扫描变换装置的坐标转换方法及处理器,可以实现B超显像仪中数字扫描变换装置灵活调整精度、速度等性能参数,满足对显象仪的高精度、大容量并且实时工作的要求。
图1为本发明用于数字扫描变换装置的坐标转换方法最佳实施例的原理框图。
图2为本发明实施例中所述迭代前段运算模块中一次迭代运算所用电路示意图。
图3为本发明实施例中所述迭代中段运算模块中一次迭代运算所用电路示意图。
图4为本发明实施例中所述迭代后段运算模块中一次迭代运算所用电路示意图。
具体实施例方式
以下结合附图所示之最佳实施例作进一步详述。
本发明用于数字扫描变换装置的坐标转换方法,用以把直角坐标值(x0,y0)转换为极坐标值(r,p),包括步骤
(1).初始化处理把相位判断变量Xs,Ys和角度变量z(0)赋值为0,把符号变量couti赋值为1;
(2).预处理根据直角坐标值(x0,y0)给相位判断变量Xs,Ys赋值,并把(x0,y0)转换为无符号数若X0<0,则Xs,=1;若Y0<0,则Ys=1;
且(x0,y0)=(|x0|,|y0|);
(3).CORDIC算法运算,依次分两个阶段
第一阶段用左移操作进行a次CORDIC算法的迭代,即
i从0到a-1,按步长为1递增,循环计算
x(i+1)=2i*x(i)+y(i);y(i+1)=|2i*y(i)-x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(2i*y(i)-x(i));
第二阶段用右移操作进行(N-a)次CORDIC算法的迭代,即
i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
(4).半径修正
(5).相位修正p=z(N)/2N,
若(Xs,Ys)=(0,0),p值不调整;若(Xs,Ys)=(1,0),p=π-p;
若(Xs,Ys)=(1,1),p=π+p; 若(Xs,Ys)=(0,1),p=2π-p。
下面对本发明用于数字扫描变换装置的坐标转换方法予以更进一步的说明
CORDIC算法,是通过迭代的方法来完成矢量的旋转,从而完成三角函数、双曲函数、指数函数及其反函数等超越函数的运算。算法的通用迭代公式为
其中
算法经过N次迭代后的输出为
如果我们把x0和y0看作直角坐标系中的横坐标和纵坐标,则经过N次迭代后,结果xN和zN分别对应于其平方根(有一因子A)和其反正切(有一常数z0)。如果设z0=0,并将xN乘以1/A,那么xN和zN就是与x0和y0相对应的极坐标系中的半径和相位。算法通过强追初始矢量[x0 y0]逼近X轴而完成直角坐标一极坐标的变换。
另外需要注意的情况是,初始矢量[x0 y0]必须位于第一象限,这是因为
∑tan-1(2-i)<100° (3)
因而,如果初始矢量不在第一象限,算法迭代的结果就不会逼近X轴。所以,如果初始矢量位于其他象限,必须对算法做出相应的修正。下面的研究只限于初始矢量在第一象限的情况,位于其他象限的情况在后面会给出说明。
仔细研究CORIC算法,对于方程组(1)中的第一个方程,当yi≥0时,di=-1且有
xi+1=xi+yi2-i=xi+|yi|2-i (4)
可得到xi+1>xi。同样,当yi<0时,di=1且有
xi+1=xi-yi2-i=xi+|yi|2-i (5)
也可以得到xi+1>xi。所以xi是一个递增序列,考虑到x0>0,所以xi是一个递增的正数序列。
对于方程组(1)中的第二个方程,当yi≥0时,di=-1,可化简为
yi+1=yi-xi2-(i+1)=|yi|-xi2-(i+1) (6)
由于xi是一个正数序列,所以这可以认为是两个正数的减操作;当yi<0时,di=1,公式化简为
yi+1=yi+xi2-(i+1)=xi2-(i+1)-|yi| (7)
这同样可以认为是两个无符号数的减操作。但此时yi+1的正负并不确定,为了使其便于硬件实现并和公式(6)保持一致,将公式(6、7)统一为
yi+1=|yi-xi2-(i+1)| (8)
其时,方程组(1)变为
其中,
采用方程组(9)的CORDIC算法,可以提高算法的运算速度,下表给出了有符号运算和无符号运算时的软件仿真(精度分析)和硬件仿真结果(资源消耗、运算速度分析)
注1在仿真过程中,x、y的字长扩展为18Bits(左移两位),z包括15Bits小数位。
注2仿真在美国Altera公司的FPGA(现场可编程门阵列)中实现,并采用了流水线结构。
注3为绝对平均误差,括号内分别为最大负向误差和最大正向误差。
从上表中可以看出,由有符号运算改为无符号运算,在资源的消耗、半径和相位的精度方面并没有明显的改善,但在运算的最高实现频率上面却有很大的提高。
分析方程组(9)可知,存在某个值b,yb的宽度小于等于(b+1),则yb右移(b+1)位后等于零,这时,xb保持不变。在以后的迭代中,由于yi进一步减小和i的增加,xi将始终保持不变,从而无须进行方程组(9)中方程式一的运算。而该b值可通过软件仿真确定。
进一步研究CORIC算法,我们可以发现算法的误差主要来源是在xi、yi迭代过程中,由于存在右移操作(×2-i)而导致的截位误差,从而丢失部分精度,导致最后结果误差较大。因此,可以通过消除截位误差来提高精度,方法就是用左移操作代替右移操作,即将方程组(9)改为如下的形式
其中,
但如此一来,会大大增加所需的硬件资源,从而导致算法的运算速度降低。
综合考虑,我们可以得出解决问题的办法在前a次迭代过程中采用方程组(10),再在后面的迭代过程中采用方程组(9)。
需要注意的是,由于采用了左移操作,所以迭代完成后,必须对得到的半径进行修正,如下式所示
下面的两个表格给出了对方程组(9)(不采用左移操作)和方程组(10)(采用左移操作)中a取不同值时的软件仿真(精度分析)和硬件仿真结果(资源消耗、运算速度分析)
注1在仿真过程中,不采用左移操作时,x、y的字长扩展为18Bits(左移2bits);采用左移操作且a=1时,x、y的字长扩展为19Bits(左移3bits);a=2时,x、y的字长扩展为21Bits(左移5bits);a=3时,x、y的字长扩展为24Bits(左移8bits)。z包括15Bits小数位。
注2仿真在美国Altera公司的FPGA中实现,并采用了流水线结构。
注3为绝对平均误差,括号内分别为最大负向误差和最大正向误差。
从上面两个表格中可以看出,采用左移操作的次数,即a值越高,半径和相位的精度随之增高,相应地,资源消耗也随之增大,运算的最高频率随之下降。
本发明用于数字扫描变换装置的坐标转换处理器,用以把直角坐标值(x0,y0)输入转换为极坐标值(r,p)输出,包括
(1).输入模块
接受前端电路过来的x0,y0,对用到的常数和初始变量进行赋值相位判断变量Xs,Ys和角度变量z(0)赋值为0,符号变量couti赋值为1;
(2).预处理模块
区分x0,y0的象限,进行赋值运算
若X0<0,则Xs=1;若Y0<0,则Ys=1,且x0=|x0|,y0=|y0|;
(3).迭代运算模块,依次分为两个模块
迭代运算第一模块
用左移操作实现a次CORDIC算法的迭代运算,
即i从0到a-1,按步长为1递增,循环计算
x(i+1)=2i*x(i)+y(i);y(i+1)=|2i*y(i)-x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(2i*y(i)-x(i));
迭代运算第二模块
用右移操作实现(N-a)次CORDIC算法的迭代运算,
即i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
(4).半径修正模块
进行运算
(5).相位修正模块
进行运算p=z(N)/2N,
若(Xs,Ys)=(0,0),p=p;若(Xs,Ys)=(1,0),p=π-p;
若(Xs,Ys)=(1,1),p=π+p;若(Xs,Ys)=(0,1),p=2π-p;
(6).输出模块
把r,p值送后端电路处理。
下面对本发明用于数字扫描变换装置的坐标转换处理器予以更进一步的说明
为加快CORDIC算法的运算速度,每次迭代都采用了一级流水线结构,这样虽然变换一个单独的数据需要N个周期,但对数据流来说,却可以每个周期都完成一次变换(结果整体延迟N个周期),下面根据图1所示处理器原理框图,对每个模块给出具体的说明
输入模块接受前端电路送来的信号x0、y0,进行迭代公式运算的初始化工作,对用到的常数和初始变量进行赋值。
预处理模块区分信号x0、y0的符号,并将其符号分别赋予Xs和Ys。
迭代运算模块按照迭代方程组进行运算,可分为三个子模块
迭代前段模块按照方程组(10)进行运算,即在迭代中取消截位误差,a的值可根据资源消耗和算法的实现速度来折中考虑,其每一次运算的具体电路结构如图2所示,包括
用于x(i+1),y(i+1)计算的两个左移运算器,两个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器。
迭代中段模块按照方程组(9)进行运算,即在迭代中不取消截位误差,b的值可用软件仿真得到,其含义是,如果在第b次迭代中,yb的宽度小于等于(b+1),则yb右移(b+1)位后等于零,这时,xb保持不变。在以后的迭代中,由于yi进一步减小和i的增加,xi将始终保持不变,其每一次运算的具体电路结构如图3所示,包括
用于x(i+1),y(i+1)计算的两个右移运算器,两个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器。
迭代后段模块这期间xi不再变化,故不进行其公式的迭代运算,其他则按照方程组(9)进行运算,其每一次运算的具体电路结构如图4所示,包括
用于x(i+1)计算的一个锁存器;用于y(i+1)计算的一个右移运算器,一个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于Couti+1计算的一个逻辑控制器。
半径修正模块根据方程组(2)和方程(11),由于迭代后得到的半径r有一因子A且要右移,所以要通过一个乘法运算器和一个移位运算器来修正半径
相位修正模块根据Xs、Ys的值(即x0、y0所在的象限)对p进行修正。
输出模块将进行过修正的半径r和相位p输出到后端电路。
权利要求
1、一种用于数字扫描变换装置的坐标转换方法,用以把直角坐标值(x0,y0)转换为极坐标值(r,p),包括步骤
(1).初始化处理把相位判断变量Xs,Ys和角度变量z(0)赋值为0,把符号变量couti赋值为1;
(2).预处理根据直角坐标值(x0,y0)给相位判断变量Xs,Ys赋值,并把(x0,y0)转换为无符号数若X0<0,则Xs,=1;若Y0<0,则Ys=1;且(x0,y0)=(|x0|,|y0|);
(3).CORDIC算法运算,依次分两个阶段
第一阶段用左移操作进行a次CORDIC算法的迭代,即
i从0到a-1,按步长为1递增,循环计算
x(i+1)=2i*x(i)+y(i);y(i+1)=|2i*y(i)-x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(2i*y(i)-x(i));
第二阶段用右移操作进行(N-a)次CORDIC算法的迭代,即
i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
(4).半径修正
(5).相位修正p=z(N)/2N,
若(Xs,Ys)=(0,0),p值不调整;若(Xs,Ys)=(1,0),p=π-p;
若(Xs,Ys)=(1,1),p=π+p; 若(Xs,Ys)=(0,1),p=2π-p。
2、如权利要求1所述的用于数字扫描变换装置的坐标转换方法,其特征在于所述步骤(3)中第二阶段还可进一步分为依次的两个阶段
b值前阶段用右移操作进行(b-a)次CORDIC算法的迭代,即
i从a到b-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
b值后阶段用右移操作进行(N-b)次CORDIC算法的迭代,但停止对x变量的
迭代运算,即
i从b到N-1,按步长为1递增,循环计算
x(i+1)=x(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i))。
3、如权利要求1或2所述的用于数字扫描变换装置的坐标转换方法,其特征在于所述步骤(3)中a的优选值为3。
4、一种用于数字扫描变换装置的坐标转换处理器,用以把直角坐标值(x0,y0)输入转换为极坐标值(r,p)输出,包括
(1).输入模块
接受前端电路过来的x0,y0,对用到的常数和初始变量进行赋值相位判断变量Xs,Ys和角度变量z(0)赋值为0,符号变量couti赋值为1;
(2).预处理模块
区分x0,y0的象限,进行赋值运算
若X0<0,则Xs=1;若Y0<0,则Ys=1,且x0=|x0|,y0=|y0|;
(3).迭代运算模块,依次分为两个模块
迭代运算第一模块
用左移操作实现a次CORDIC算法的迭代运算,
即i从0到a-1,按步长为1递增,循环计算
x(i+1)=2i*x(i)+y(i);y(i+1)=|2i*y(i)-x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(2i*y(i)-x(i));
迭代运算第二模块
用右移操作实现(N-a)次CORDIC算法的迭代运算,
即i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
(4).半径修正模块
进行运算
(5).相位修正模块
进行运算p=z(N)/2N,
若(Xs,Ys)=(0,0),p=p;若(Xs,Ys)=(1,0),p=π-p;
若(Xs,Ys)=(1,1),p=π+p;若(Xs,Ys)=(0,1),p=2π-p;
(6).输出模块
把r,p值送后端电路处理。
5、如权利要求4所述的用于数字扫描变换装置的坐标转换处理器,其特征在于所述迭代运算模块中迭代运算第二模块可进一步分为依次的两个模块
b值前模块用右移操作实现(b-a)次CORDIC算法的迭代运算,
即i从a到N-1,按步长为1递增,循环计算
x(i+1)=x(i)+2-i*y(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i));
b值后模块用右移操作实现(N-b)次CORDIC算法的迭代运算,但停止对x变量的
迭代运算,即i从b到N-1,按步长为1递增,循环计算
x(i+1)=x(i);y(i+1)=|y(i)-2-i*x(i)|;
z(i+1)=z(i)+couti*tan-12-i;couti+1=couti⊙sign(y(i)-2-i*x(i))。
6、如权利要求4所述的用于数字扫描变换装置的坐标转换处理器,其特征在于所述迭代运算第一模块中一次迭代运算所用电路包括用于x(i+1),y(i+1)计算的两个左移运算器、两个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器;所述迭代运算第二模块中一次迭代运算所用电路包括用于x(i+1),y(i+1)计算的两个右移运算器、两个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器。
7、如权利要求5所述的用于数字扫描变换装置的坐标转换处理器,其特征在于所述迭代运算第一模块中一次迭代运算所用电路包括用于x(i+1),y(i+1)计算的两个左移运算器、两个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器;所述迭代运算第二模块b值前模块中一次迭代运算所用电路包括用于x(i+1),y(i+1)计算的两个右移运算器、两个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器;所述迭代运算第二模块b值后模块中一次迭代运算所用电路包括用于y(i+1)计算的一个右移运算器、一个无符号加法运算器和一个绝对值运算器;用于z(i+1)计算的一个无符号加法器;用于couti+1计算的一个逻辑控制器。
8、如权利要求4至7中所述任一用于数字扫描变换装置的坐标转换处理器,其特征在于所述半径修正模块包括一个乘法运算器和一个右移运算器。
9、如权利要求4至7中所述任一用于数字扫描变换装置的坐标转换处理器,其特征在于所述迭代运算模块中每次迭代采用一级流水线结构。
10、如权利要求4至7中所述任一用于数字扫描变换装置的坐标转换处理器,其特征在于所述迭代运算模块中a的优选值为3。
全文摘要
一种用于数字扫描变换装置的坐标转换方法及处理器,用以把直角坐标值(x0,y0)转换为极坐标值(r,p),所述方法包括步骤有初始化处理;预处理;CORDIC算法运算先用左移操作进行a次CORDIC算法的迭代,然后用右移操作进行(N-a)次CORDIC算法的迭代;半径修正和相位修正。所述处理器为实现所述方法之最佳实施例,包括有输入模块、预处理模块、迭代运算模块、半径修正模块、相位修正模块和输出模块。采用本坐标转换方法及处理器,可以实现B超显像仪中数字扫描变换装置灵活调整精度、速度等性能参数,满足了对显象仪的高精度、大容量并且实时工作的要求。
文档编号G06G7/22GK1492313SQ0314001
公开日2004年4月28日 申请日期2003年7月29日 优先权日2003年7月29日
发明者何绪金, 王文芳 申请人:深圳迈瑞生物医疗电子股份有限公司