这个不好用Matlab编程吧,Matlab只能做个验证,而且还必须输入一定的序列。
对于未知的N以及未知的x[n]不好办的。
先上理论推导:
(1)Y1[k]=对n个求和(y1[n]exp(-j(2pi/2N)kn)) n=0,1,…,2N-1,k=0,1,…,2N-1
将y1[n]=x[n/2]代入上面的等式中,注意这时候求和的时候n要为偶数。
使用m=n/2替换掉上面的n,最终我可以得到这样的式子:
Y1[k]=求m求和(x[m]exp(-j(2pi/N)km)),m=0,1,…,N-1,k=0,1,…,2N-1
这样我们就获得了Y1[k]的
表达式:Y1[k]=X[k] 0=<k<=N-1,Y1[k] = X[k-N] N=<k<=2N-1
说白了y1[n]是x[n]的增采样,或者叫内插0
(2)同理,Y3[k]=exp(j(2pi/N)k)X[-k]
(-1)^n=exp(j pi n)于是乎,Y2[k]=X[k+N/2] 0=<k<=N/2-1,Y2[k]=X[k-N/2], N/2=<k<=N-1
Matlab代码写起来很容易的:
下面是一个例子:
>> x=[1,-1,1,-1];
>> xfft = fft(x,4);
>> y1=[1,0,-1,0,1,0,-1,0];
>> y1fft=fft(y1,8);
>> y2=x.*x;
>> y2fft=fft(y2,4);
>> y3 = [-1,1,-1,1];
>> y3fft=fft(y3,4);
自己在WorkSpace里面核对下理论推导和仿真的关系就很清楚了
这个DFT的关系,只要记住循环对称性,以及只取一个周期,其它认为是0就很容易了
理论推导的时候需要注意每个变量的范围就OK了:)
本回答被网友采纳