相位旋转算法
① [100分]请教关于星盘的相位和角度算法
简单跟你说吧 好的相位指的就是0度(合相) 60度(半拱) 120度(相拱)的相位 不好的就是 90 和180 一个刑 一个冲
② 什么是相位
占星手册 什么是相位
2005/09/02
如果将人生比拟为一出戏相位就像戏剧情节,它是你与他人彼此的互动状况
相位的算法:
相位是两颗行星间与星盘圆心的夹角度数,如:分别将太阳、月亮与圆心连成一线,两线的夹角,即为相位。相位佳时,即使行星落入星座不佳,当事人也能够逢凶化吉。若相位不佳,行星落入的星座也不佳,就要以其它行星及相位补救了。
相位的种类:
合 相:
两星近乎重迭,与星盘圆心夹角为0度时,即是合相。这是非常有力的相位,它具有集中且强烈的作用,可增强两星的力量。
六分相:
两颗行星与星盘圆心夹角为60度时,即为六分相。这是一个只要肯努力,即有好机会的调和相位。
四分相:
两颗行星与星盘圆心夹角为90度时,即为四分相。这是一个不调和的相位。当事人必须花费许多心力,才能改善不调和的事。
三分相:
两颗行星与星盘圆心夹角为120度时,即为三分相。这是一个让两颗星互相协助,顺利推动事情进展的调和相位。
对分相:
两颗行星与星盘圆心夹角为180度时,即为对分相。这是一个引起紧张与对立的不调和相位,但有时物极必反,反而是个有奇迹出现的相位。
③ 如何用FFT算法转换成相位差
%% FFT
f0 = 50;
X=fft(x); % x是信号离散值
N = length(x);
X=X(1:N/2);
Xabs=abs(X);
for i= 1 : m % m 是谐波次数
[Amax,index]=TriFind(Xabs,floor((i*f0-15)/fsN),ceil((i*f0+15)/fsN)); % 如果只求基波可以改成求最大值的 [Amax,index]=max(Xabs);
if(index==-1)
Fn(i) = 0;
An(i) = 0;
Pn(i) = 0;
else
if(Xabs(index-1) > Xabs(index+1))
a1 = Xabs(index-1) / Xabs(index);
r1 = 1/(1+a1);
k01 = index -1;
else
a1 = Xabs(index) / Xabs(index+1);
r1 = 1/(1+a1);
k01 = index;
end
Fn(i) = (k01+r1-1)*fs/N; %频率校正 fs 为采样频率
An(i) = 2*pi*r1*Xabs(k01)/(N*sin(r1*pi)); % 幅值校正
Pn(i) = phase(X(k01))-pi*r1; % 相位校正
% Pn(i,3) = mod(Pn(i),pi);
end
end
这是我写的一个FFT求取谐波参数的程序,Pn中存的就是各次谐波的相位,要是做相位差,分别对两个信号求取相位,再差就行了;如果是异步采样,可能误差较大,需要加窗改进;
有问题可以追问。
④ NCO的运算公式
Walther JS于1971年提出了统一的CORDIC形式。假定初始向量V1(x1 ,y1)旋转角度θ后得到向量V2(x2,y2):
即:
若每次旋转的角度θ是正切值为2 的倍数,即θi=arctan(2-i),则cosθi=(1+2-2i)-1/2 。假设以δi代表矢量的旋转方向,+1表示逆时针旋转,-1表示顺时针旋转,故第i 步旋转可用下式表示:
其中:(1+2-2i)-1/2为模校正因子。对于字长一定的运算,该因子是一个常数,用K表示,以16 bits字长为例,则:
可见,迭代运算不能使幅值比例因子恒为1。为了抵消因迭代产生的比例因子的影响,可将输入数据X,Y校正后再参与运算,以避免在迭代运算中增加校正运算,降低CORDIC算法的速度。由此运算迭代式可以简化成:
公式(5)运算仅通过加法器及移位器就可以实现。此外,若用Zi表示第i次旋转时与目标角度之差, 则:
经过n次旋转后,式(5)的n次迭代可以得到以下结果:
本文介绍的数控振荡器的设计是在式(7)的基础上,给定x0=K ,y0=0,则迭代结果为:
将所需产生的角度值作为z0输入,通过式(5)、(6)的迭代运算,迭代结果输出的xn和yn就是所需要的三角函数值。
数控振荡器的FPGA实现
图1是数控振荡器的顶层电路。由图可见,频率控制字寄存器将接收到的的频率控制字送入相位累加器,相位累加器对系统时钟进行计数,每到达输入频率控制字的值即对相位进行累加,随后将累加值送入相位相加器,与相位控制字寄存器接收到的初始相位进行相加,得到当前的相位值。其中,相位累加器是决定NCO性能的一个关键模块,可以利用FPGA器件的进位链实现快速、高效的电路结构。然而,由于进位链必须位于临近的逻辑阵列块CLB和逻辑单元LC内,所以长的进位链会减少其它逻辑使用的布线资源;同时,过长的进位链也会制约整个系统速度的提高。因此,设计中采用进位链和流水线技术相结合的办法。所谓流水线技术,即把在一个时钟内要完成的逻辑操作分成几步较小的操作,并插入几个时钟周期来提高系统的数据吞吐率。采用以上做法实现的相位累加器既能保证具有较高的资源利用率,又能大幅提高系统的性能和速度。
经过上述相位的处理之后,即可获得具有所设定初始相位的一定频率的正余弦相位序列,将此序列送入基于CORDIC算法的波形发生器,最终获得两路正交的正余弦输出序列。