【问题标题】:fft / ifft deconvolution in MatlabMatlab中的fft / ifft反卷积
【发布时间】:2016-08-18 19:53:14
【问题描述】:

我有一个时变信号(时间、幅度)和一个测量的频率灵敏度(频率、幅度转换因子 (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 的一些改进的理解会帮助我......

谢谢

【问题讨论】:

  • 将 fft 信号的实部乘以幅度没有多大意义,因为它是幅度和相位信息的混合。您是否尝试过将xdft 的系数与您的权重Mf 直接相乘。这会更有意义,因为它与将频率变化滤波器应用于 fft 信号的过程相同
  • 谢谢 我明白你的意思,但不确定你所说的“系数”是什么意思?

标签: matlab fft ifft


【解决方案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);

这应该是真实的。

【讨论】:

  • 更新帖子。我已经有了:xdft = fft(a); xdft = xdft(1:长度(a)/2+1);频率 = Fs*(0:(L/2))/L;其中 Fs 是采样频率,L 是信号长度。我还插入 Mf=interp1(freq_Mf,Mf_in,freq,'cubic');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多