Matlab - 用 IFFT 构造余弦波

信息处理 matlab IFFT
2022-02-06 06:07:24

如果以下问题过于简单而无法被问到,我深表歉意,但我有以下代码为我产生了一个很好的sine波浪:

N=64;
X=zeros(N,1);
X(2)=-32j;
X(N)=32j;
x=ifft(X);
stem(real(x));

在此处输入图像描述

现在我在想我应该能够通过将and值更改为一些真实的镜像值cosine来以类似的方式构造一个波,例如and 但是,输出不是我想要的,即X(2)X(N)X(2)=-32X(N)=32cosine

在此处输入图像描述

1个回答

您必须记住,对于实值信号,频谱的后半部分是低于奈奎斯特频率的所有值的复共轭在你的情况下:

X(2) = -32
X(N) = 32

如您所见,系数不是彼此的复共轭。因此,您最终会遇到舍入误差,因为两个频率分量相互抵消。

这是对您的代码的一些修改:

clc, clear all, close all
fs = 32;
dt = 1/fs;

N=64;
X=zeros(N,1);
X(2)=32;
X(N)=conj(X(2));
s=ifft(X)';

td = linspace(0, (length(s)-1)*dt,     length(s));

stem(td, s, 'b', 'linewidth', 2)
grid on
legend({'reconstructed signal'})

这使:

在此处输入图像描述