从频域解析公式得到IFFT

问题描述 投票:0回答:2

我正在尝试从频域解析公式获得时域信号,具体来说,公式是:

Formula implemented

在实现 IFFT 时会出现问题,因为获得以下脉冲响应:

Impulse response

很明显,第一部分似乎没问题,但是,随着信号结束,噪声水平很高,并且“斜率”不断增加。

现在,当从频域开始时,我定义一个频率向量,其频率分辨率基于 FFT 的大小。

%% Sampling Frequency + Size FFt

Fs = 512; %Sampling Frequency
Nfft = 2^12; %FFT Size
df = Fs/Nfft; %Frequency Resolution
f = 0:df:180; %Frequency Vector

然后应用该公式并获得频率向量。随后应用大小为 NFFT 的 IFFT:

%%Obtain impulse response
x = ifft(P_w,Nfft); %P_w is obtained by formula (1)
t = (0:(length(x)-1))/Fs; %Time Vector

一旦绘制

x
的实部,就可以看到图 2 中获得的结果。 对于如何克服这个问题有什么建议吗? 我的意思是,我不应该得到信号的最后一个“嘈杂”部分,还是我遗漏了代码中的错误?

编辑:

我在频率向量上犯了一个错误,实际上它是从0开始的:

f = 0:df:180; %Frequency Vector
matlab fft resolution frequency sampling
2个回答
0
投票

我猜测,如果你的 P_w 从 5Hz 开始,你会错过 5Hz 以下低频范围的零填充。

假设我的猜测是正确的,请在ifft之前的P_w前面加上40个零。

40 个零对应于 0Hz~4.875Hz 范围,因为 df=0.125。

如果 P_w 是列向量:

P_w=[zeros(40,1);P_w];

如果 P_w 是行向量:

P_w=[zeros(1,40) P_w];


0
投票

我遇到了一个非常相似的问题。首先,按照大家的建议进行操作,对向量进行零填充,使其逐渐下降到 0,并在应用 ifft 之前在向量的末尾创建一个共轭对称镜像。这才是正确的做法。

但是问题仍然存在,对吧?

我发现零填充会以某种方式导致这种情况。我真的不知道为什么,它可能隐藏在实现该操作的 matlabs 算法后面。

不过你可以解决它。

你要做的是首先平滑过渡,而不是突然跳到零

© www.soinside.com 2019 - 2024. All rights reserved.