我正在尝试从频域解析公式获得时域信号,具体来说,公式是:
在实现 IFFT 时会出现问题,因为获得以下脉冲响应:
很明显,第一部分似乎没问题,但是,随着信号结束,噪声水平很高,并且“斜率”不断增加。
现在,当从频域开始时,我定义一个频率向量,其频率分辨率基于 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
我猜测,如果你的 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,并在应用 ifft 之前在向量的末尾创建一个共轭对称镜像。这才是正确的做法。
但是问题仍然存在,对吧?
我发现零填充会以某种方式导致这种情况。我真的不知道为什么,它可能隐藏在实现该操作的 matlabs 算法后面。
不过你可以解决它。
你要做的是首先平滑过渡,而不是突然跳到零