2016-04-25 224 views
0

我有一个时变信号(时间,幅度)和一个测量的频率灵敏度(频率,幅度转换因子(Mf))。fft/ifft在Matlab中的解卷积

我知道如果我使用我的时间信号的中心频率来选择我的信号的幅度转换因子(例如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。

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

的ABS(幅度)和实际FFT的y轴的一些更好的了解会帮助我,我认为......

感谢

+0

将fft信号的实部乘以一个幅度并没有多大意义,因为它是幅度和相位信息之间的混合。你有没有试过用你的权重'Mf'直接乘以'xdft'的系数。这会更有意义,因为它与应用频率变化滤波器到fft信号的过程相同 – BillBokeey

+0

谢谢我理解你的观点,但不确定'系数'是什么意思? – 2one

回答

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); 

应该出来真实。

+0

更新后。我已经有:xdft = fft(a); xdft = xdft(1:length(a)/ 2 + 1); freq = Fs *(0:(L/2))/ L; 其中Fs是采样频率,L是信号长度。我也插入 Mf = interp1(freq_Mf,Mf_in,freq,'立方体'); – 2one