0

我正在做一些信号项目,我想做的就是对信号应用傅里叶变换,获取幅度相位,然后将相位矩阵更改为其他东西,比如phasenew,然后从幅度phasenew获取信号。

我的代码基于从相位和幅度获取傅里叶变换 - Matlab

>> F = fft(x);
>> mag =  abs(F);
>> phase = angle(F);
% Calculate phasenew using some algorithm, phasenew is very similar to phase, so output should be same.
>> re = mag .* cos(phasenew);
>> im = mag .* sin(phasenew);
>> F_i = complex(re,im);
>> x_i = ifft(F_i);

输出信号x_i非常不同。

我在这里也发现了类似的问题:傅立叶变换:获取 mag + 相位然后使用它们来绘制原始信号,但是在这个链接中,我评论了询问@David 关于我应该如何着手解决 phasenew 的情况的答案。他建议我把这个作为一个新问题来问,所以就在这里。

请帮助我使用逆傅立叶变换原始幅度新相位生成信号。提前致谢。

PS在phasenew中,我只是将相位移动π/2或-π/2。

4

1 回答 1

0

对我来说,你的方法有效:

x = rand(100, 1);
y = fft(x);
mag = abs(y);
phase = angle(y);
y2 = mag .* (cos(phase) + 1i * sin(phase));
y3 = complex(mag .* cos(phase), mag .* sin(phase));
sum(abs(y-y2).^2)
sum(abs(y-y3).^2)
x2 = ifft(y2);
x3 = ifft(y3);
sum(abs(x - x2).^2)
sum(abs(x - x3).^2)

给出 1e-30 顺序的值,因此所有比较的信号 (y, y2, y3) 和 (x, x2, x3) 除了微小的数值偏差外都是相同的。

于 2014-12-07T20:00:14.667 回答