利用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) = 1/2i*(Z(j)-conj(Z(N+2-j)));
end

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大的马师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值