利用N点复数序列求2个N点实数序列的快速傅里叶变换

一、方法简介

通过一个N点复数序列求出两个N点实数序列的离散傅里叶变换,进一步提升快速傅里叶变换的效率。


二、方法详解

x(n)y(n)是实数序列,且长度都为N,定义复数序列:

        z(n)=x(n)+jy(n),          0\leq n\leq N-1

则序列x(n)y(n)可表示为:

        x(n)=\frac{1}{2}(z(n)+z^{*}(n))

        y(n)=\frac{1}{j2}({z(n)-z^{*}(n)})

z(n)的离散傅里叶变换可表示为:

        Z(k)=X(k)+jY(k)

序列x(n)y(n)可表示为:

        X(k)=\frac{1}{2}({DFT[z(n)]+DFT[z^{*}(n)]})

        Y(k)=\frac{1}{j2}(DFT[z(n)]-DFT[z^{*}(n)])

因为DFT[x^{*}(n)]=X^{*}(N-k),所以:

        X(k)=\frac{1}{2}({Z(k)+Z^{*}(N-k)})

        Y(k)=\frac{1}{j2}({Z(k)-Z^{*}(N-k)})


三、MatLab代码示例

x = [8 2 3 4 5 8];
y = [3 9 2 7 6 9];

x_fft = fft(x);
y_fft = fft(y);

z = x+1i*y;

Z = fft(z);
N = length(Z);

X = zeros(1,N);
Y = zeros(1,N);

R = real(Z);
I = imag(Z);

X(1) = R(1);
Y(1) = I(1);

for j = 2 : N
    X(j) = 1/2*(Z(j)+conj(Z(N+2-j)));
    Y(j) = -1i/2*(Z(j)-conj(Z(N+2-j)));
end

运行结果:

利用N点复数序列求2个N点实数序列的快速傅里叶变换_第1张图片

你可能感兴趣的:(傅里叶分析,傅里叶分析,快速傅里叶变换,离散傅里叶变换)