在Matlab中的fft / ifft反卷积

时间:2016-04-25 12:16:27

标签: matlab fft ifft

我有一个时变信号(时间,幅度)和测量的频率灵敏度(频率,幅度转换因子(Mf))。

我知道如果我使用时间信号的中心频率为我的信号选择幅度转换因子(例如0.0312),我得到最大值。转换后的振幅值为1.4383。

我已经编写了一些代码来解卷时变信号和已知灵敏度(即所有频率)。

其中Pt是输出/转换幅度,Mf是幅度转换因子数据,fft(a)是时变信号(a)的fft。

我接受了fft(a)的真实部分:

xdft = fft(a);
xdft = xdft(1:length(x)/2+1); % only retaining the positive frequencies
freq = Fs*(0:(L/2))/L; 

其中Fs是采样频率,L是信号长度。

convS = real(xdft).*Mf;

假设Mf是幅度=真实(我没有阶段信息)。我也插入

Mf=interp1(freq_Mf,Mf_in,freq,'cubic');

所以与频率相同的审讯点。

然后我使用以下方法在时域中重建信号:

fftRespI=complex(real(convS),imag(xdft));

pt = ifft(fftRespI,L,'symmetric')

我使用fft(a)的虚部。

重建的信号形状看起来正确,但信号的幅度不正确。

如果我为f = 0..N MHz设置Mf = 0.0312的所有值,我期望最大值。转换幅度值~1.4383(类似于我使用中心频率)但我得到13.0560。

如何校准振幅轴?即如何正确地将fft(a)乘以Mf?

对abs(幅度)的y轴和实际FFT的一些改进的理解将帮助我,我认为......

感谢

1 个答案:

答案 0 :(得分:1)

您需要重新排列权重Mf的顺序,以匹配MATLAB的频率顺序。假设你有一个信号

N=10;
x=randn(1,N);
y=fft(x);

输出y中的频率顺序为

[0:1:floor(N/2)-1,floor(-N/2):1:-1] = [0 1 2 3 4 -5 -4 -3 -2 -1]

所以,如果你的权重

Mf = randn(1,N)

按此顺序定义:Mf == [0 1 2 3 4 5 6 7 8 9],您必须重新安排

Mfshift = [Mf(1:N/2), fliplr(Mf(2:(N/2+1)))];

然后你可以获得过滤后的输出

z = ifft(fft(x).*Mshift);

应该是真实的。