簡體   English   中英

Matlab中的fft / ifft反卷積

[英]fft / ifft deconvolution in Matlab

我有一個隨時間變化的信號(時間,幅度)和一個測得的頻率靈敏度(頻率,幅度轉換因子(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的一些更好的了解將對我有所幫助...

謝謝

您需要重新排列權重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);

應該是真實的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM