gpt4 book ai didi

matlab - 在 matlab 中获得更高精度的 FFT

转载 作者:行者123 更新时间:2023-12-02 04:31:52 25 4
gpt4 key购买 nike

我正在分析一个时间信号,我想对其应用 FFT 以获得频域中的信号分量。然而,我似乎遇到的问题是我的信号持续时间相对较短,t_end。因此,我的频率仓大小 dohm 非常大。我希望在不增加信号持续时间的情况下减小垃圾箱的大小。

这是我的简化代码:

Fs = 100;           %Sampling frequency
Ts = 1/Fs; %Sample time
t_end = 50; %End time
t = 0:Ts:t_end;

A = 5;
B = 3;
C = 4;

for ii = 1:length(t)
x(ii) = A*cos(4*t(ii))+B*sin(3*t(ii))+C*sin(2*t(ii)); %Random signal
end

xdft = fft(x); % Fast Fourier Transfrom
freq = 0:Fs/length(x):Fs/2; % The signal is symmetric; the second half is neglected
xdft1 = xdft(1:length(x)/2+1)./length(x); % Again second half is neglected

Ohm = 2*pi*freq; % x-axis transformation to rad/s
dohm = Ohm(2)-Ohm(1); % frequency bin size in rad/s
dft = abs(xdft1); % Take the absolute value, these are the heave amplitue spectrum values

似乎减少频率仓大小dohm的唯一方法是对信号进行较长时间的采样,但不幸的是,在我的情况下我无法做到这一点。还有其他选择吗?

谢谢!

最佳答案

不,这是不可能的,因为Frequency_resolution = 1/window_duration。这是一个无法绕过的数学极限。例如,假设您以 1000 Hz 采样了 1 秒的数据。 FFT 的作用或多或少是:可以使用具有 274 个振荡的正弦/余弦重构多少信号,使用具有 275 个振荡、276 个振荡的正弦/余弦重构多少信号,等等。该计算的结果是频率为 274、275 和 276 Hz,因此频率分辨率为 1 Hz。如果您测量相同的信号 10 秒,FFT 可以尝试 2740、2741 和 2742 次振荡,这对应于 274.0、274.1 和 274.2 Hz 的信号,因此分辨率为 0.1 Hz。

您可以尝试在 FFT 中使用零填充,但这只会给您带来“假分辨率”,它会在您通过标准 FFT 获得的点之间产生某种平滑插值。

关于matlab - 在 matlab 中获得更高精度的 FFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22857646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com