![](/img/trans.png)
[英]Delay a signal in time domain with a phase change in the frequency domain after FFT
[英]Why N point FFT of a undersampled signal in time domain is worse than only a N point FFT of the time domain signal (Not resampled)
我試圖了解當我嘗試用更少的樣本重建信號的頻譜時會發生什么。 我嘗試了 2 種方法。 我根據需要的樣本數 (N) 重新采樣時域信號,然后進行 FFT。 在第二種方法中,我只是做了一個 N 點 FFT,正如 MATLAB 所說,N 之后的樣本被忽略。 令人驚訝的是,第二種方法給出了很好的結果。 我不明白為什么。 對於基本事實,我使用高斯形頻譜模擬時域信號。
我的 MATLAB 程序如下所示。 您可以更改 N 的值並查看結果。 您還可以更改重采樣信號情況的插值方法。 我做了所有類型的檢查,我認為 N 點 FFT 表現更好。 但是,有人會認為應用 FFT 時重采樣信號的性能應該更好。
clear;
close all;
% Simulation of ground truth
n = 512;
[sig_a, sig_f] = DS_simulator(10^(Inf/20), 1, 5, 0.2, n, 7.5); % sig_a is the time domain signal with 512 points and sig_f is the Gaussian spectrum from which sig is derived
figure; plot((abs(sig_f).^2)); % Original spectrum
%% Analysis
N = 256; %Number of fft points
idx = 1:n;
idxq = linspace(min(idx), max(idx), N);
sig_resampled = interp1(idx, sig_a, idxq, 'cubic'); % resampling the signal
figure; plot(1:1:n, abs(sig_a)); hold on; plot(1:n/N:n, abs(sig_resampled), '*'); % signal and resampled signal
sig_resamp_doppler = 1/N .* abs(fftshift(fft(sig_resampled, N))).^2; % FFT of resampled signal
sig_doppler = 1/N .* abs(fftshift(fft(sig_a, N))).^2; % FFT of original signal
figure; plot(abs(sig_doppler)); hold on; plot(abs(sig_resamp_doppler)); % Reconstructed spectrum
地面實況信號生成代碼,其頻譜為高斯形狀,均值為 mu,標准差為 sigma
function [data, data_f] = DS_simulator(SNR, m0, mu, sigma, n, v_amb)
vel_axis = linspace(-v_amb, v_amb, n);
X = rand(1, n);
Theta = 2 .* pi * rand(1, n);
if sigma < 0.02
[~, idx1] = min(abs(vel_axis - mu));
S = dirac(vel_axis - vel_axis(idx1));
idx = S == Inf;
S(idx) = 1;
else
S = m0/sqrt(2*pi*sigma^2) * exp(-(vel_axis - mu).^2/(2*sigma^2));
end
N = sum(S) ./ (n .* SNR); % Noise Power
P = -(S + N) .* log(X); % Power spectrum
data_f = sqrt(P);
data = ifft(fftshift(sqrt(n) .* sqrt(P) .* exp(1j .* Theta)));% complex time domain signal
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.