高频的FFT错误结果?

时间:2014-08-27 21:05:42

标签: matlab signal-processing fft

我采样频率为50 KHz的逆变器的50Hz输出电流1分钟。我应该将时间分为200ms封装(主信号的0.2s或10个周期)并在每个封装上进行FFT。所以这意味着我在每个包中都有10000个样本(如果不是我的零填充或截断,这没有太大的区别)。我也应该提取高达9 KHz的频谱。结果对于低频率是可以的,但是我得到了错误的结果(这些值是高频率的一半)。你能帮我理解我做错了什么吗?!

我有一个想法,也许有些事情就像下面的代码发生在我的FFT上。只需将SF更改为10000并查看结果将如何更改!

in this code if you change the SF(sampling frequency) from 30000 to 10000, 
the results for high frequncies will be distorted and disordered . why ?

SF = 30000; %sampling frequency

% signal 
t = 0:1/SF:1-1/SF; %  sample points
wave=15*sin(2*pi*1*t)+1*sin(2*pi*123*t)+2*sin(2*pi*203*t)+3*sin(2*pi*223*t)+4*sin(2*pi*331*t)+5*sin(2*pi*2812*t)+6*sin(2*pi*5752*t)+7*sin(2*pi*7993*t);


wavefft = fft(wave);

L=floor(size(wave,2)/2)+1; % removing the mirror side of spectrum
MagSpec = abs(wavefft(1:L))/(SF/2);  %% removing the mirror side of the spectrum 
and ranging the domain 

plot(MagSpec);

1 个答案:

答案 0 :(得分:4)

您所观察的是aliasing

通过使用50kHz的采样率比较结果,您可以看到 50kHz sampling rate

以及使用10kHz 10kHz sampling rate的采样率

正弦信号的频率低于10kHz采样率的一半(Nyquist frequency),即1Hz,123Hz,203Hz,223Hz,331Hz和2812Hz的正弦波不受影响。 5752Hz和7993Hz的波特率分别为4248Hz和2007Hz。

您仍然可以在200ms或10000个样本上执行FFT,但采样率在50kHz时保持不变。那就是你会:

SF = 50000; %sampling frequency

% signal 
t = 0:1/SF:1-1/SF; %  sample points
wave=15*sin(2*pi*1*t)+1*sin(2*pi*123*t)+2*sin(2*pi*203*t)+3*sin(2*pi*223*t)+4*sin(2*pi*331*t)+5*sin(2*pi*2812*t)+6*sin(2*pi*5752*t)+7*sin(2*pi*7993*t);

用于生成信号,但是您可以将结果波形信号分成块进行处理:

for i=1:floor(length(wave)/10000)
  wavefft = fft(wave(1+(i-1)*10000:i*10000))
  % do somthing with the wavefft result
end