Matlab:傅里叶变换后改变相位矩阵

时间:2014-12-07 19:51:04

标签: matlab image-processing matrix fft ifft

我正在研究一些信号项目,我想要做的就是对信号应用傅立叶变换,得到幅度阶段,然后更改相位矩阵表示 phasenew ,然后从幅度 phasenew 获取信号。

我的代码基于Getting Fourier Transform from Phase and Magnitude - 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 非常不同。

我在这里也发现了类似的问题:Fourier Transform: getting mag + phase then using those to plot original signal但在这个链接中,我评论了问@David有关如何继续解决phasenew案例的答案。他建议我把这个问题作为一个新问题,所以在这里。

请帮助我使用原始幅度新阶段中的逆傅立叶变换生成信号。 提前谢谢。

P.S。在 phasenew 中,我只需将阶段移动π/ 2或-π/ 2.

1 个答案:

答案 0 :(得分: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)是相同的。