期待着一天 发表于 2011-7-31 19:02

x1=3*sin(2*pi*25*t+pi/6);
x2=3*sin(2*pi*25*t+pi/2+pi/6);
y1=6*sin(2*pi*25*t-pi);
y2=6*sin(2*pi*25*t+pi/2-pi);
x=i*x1+x2;
y=i*y1+y2;
r1=fft(x,N);
r2=fft(y,N);
我在上面发的是这四个信号,而我编程序时是用的一下4个信号,x1=3*sin(2*pi*25*t);
x2=3*cos(2*pi*25*t);
y1=6*sin(2*pi*25*t-pi);
y2=6*cos(2*pi*25*t-pi);
x=i*x1+x2;
y=i*y1+y2;
r1=fft(x,N);
r2=fft(y,N);
这样的四个信号构成复数,进行FFT时,能把幅频图和相频图都能正确的输出来,在这里我取得采样频率是100HZ,采样点数是128,变换后是有两个幅频图和相频图,这两个图都反映了这两个复数的幅值和相位,我把图附在下面,老师您看一下,但是我如果改变信号频率,也就是不能满足信号频率是采样频率的整数倍时,幅频图和相频图就不正确了,我不知道这种思想正确不?还有就是正确的话,麻烦老师能帮我校正一下,也就是当不是整周期采样时也能反映幅值和相位。谢谢老师了。下面是我仿真的完整程序,图在附件里。
function pinlv()
clf
fs=100;
N=128;
n=0:N;
t=n/fs;                  
x1=3*sin(2*pi*25*t);
x2=3*cos(2*pi*25*t);
y1=6*sin(2*pi*25*t+pi);
y2=6*cos(2*pi*25*t+pi);
x=i*x1+x2;
y=i*y1+y2;
q=fft(x,N)
z=fft(y,N);
mag1=abs(q)
mag2=abs(z)
deg1=angle(q)*180/pi
deg2=angle(z)*180/pi;
f1=(0:length(q)-1)'*fs/length(q);
f2=(0:length(z)-1)'*fs/length(z);
subplot(2,2,1),plot(f1,mag1/N);
subplot(2,2,2),plot(f2,mag2/N);
subplot(2,2,3),plot(f1,deg1);grid
subplot(2,2,4),plot(f2,deg2);grid

songzy41 发表于 2011-8-1 10:13

对16楼的程序,如果把幅值和初始相角计算出来,得到的结果是
3.00    6.00   30.00   -180.00
附合设置结果。
LZ实际上的信号是x=A*cos(2*pi*f*t+phi)+i*A*sin(2*pi*f*t+phi)=A*exp(i*2*pi*f*t+phi),这是一个指数信号。在LZ的例子中信号的频率正好与某条谱线相重合,可以方便地计算出信号的幅值和相位,但如果信号的频率正好与某条谱线不相重合,应该使用修正法。但是以往的修正法似乎都是对于正弦信号和余弦信号的,而不是针对指数信号的。直接用于指数信号得不到正确结果。曾看到过一篇文献:“Analysis of damped sinusoidal signals via a frequency-domain interpolation algorithm” IEEE trans. Instrum. Meas., 1994 43(2)245-250,可能对LZ有参考价值。

gumiaoyu 发表于 2011-8-1 15:33

回复 4 # dsp2008 的帖子

同意!单独做就可以了
页: 1 [2]
查看完整版本: 我想对两组数据同时做FFT,实现他的matlab程序怎么写呀