【问题标题】:High-frequency spur after performing an FFT in MATLAB在 MATLAB 中执行 FFT 后的高频杂散
【发布时间】:2020-03-03 16:50:43
【问题描述】:

我有一个调制信号,现在我想执行 FFT。但是,我得到了一个不应该存在的高频杂散(如果应该存在,我不知道为什么)。

Lvl=[0.5,0.9,0.5,0.5,0.1,0.1,0.9,0.5];
fa=60;  %the frequency of the parasitic source in hertz
np=2;   %number of periods per bit

kl=length(Lvl);
t=0:0.01*np/fa:np*kl/fa;

Sig=sin(2*pi*fa*t);

for n=1:1:101
    Sig(n)=Sig(n)*Lvl(1);
end 

for n=102:1:201   
    Sig(n)=Sig(n)*Lvl(2);
end

for n=202:1:301
    Sig(n)=Sig(n)*Lvl(3);
end

for n=302:1:401
    Sig(n)=Sig(n)*Lvl(4);
end

for n=402:1:501
    Sig(n)=Sig(n)*Lvl(5);
end

for n=502:1:601
    Sig(n)=Sig(n)*Lvl(6);
end

for n=602:1:701
    Sig(n)=Sig(n)*Lvl(7);
end

for n=702:1:801
    Sig(n)=Sig(n)*Lvl(8);
end

plot(t,Sig)

%FFT
y = fft(Sig);     
f = (0:length(y)-1)*(1/(0.01*np/fa))/length(y);

plot(f,abs(y))
title('Magnitude')

我预计在 60Hz 处会有一个尖峰,周围有杂散,但实际上我得到了这个,并且在接近 3kHz 处有一个大尖峰,周围有杂散。

【问题讨论】:

    标签: matlab signal-processing fft modulation


    【解决方案1】:

    应该存在几乎 3 kHz 的峰值,因为实数的 fft 是围绕奈奎斯特频率(实际上是复共轭)对称的信号。奈奎斯特频率是采样频率的一半,在您的情况下,采样以 3000 Hz 完成,因此奈奎斯特频率为 1500 Hz。如果您仔细观察峰值,您会发现它位于 2940 Hz(即 3000-60 Hz),因为 fft 镜像在 1500 Hz 左右。 有很多资料可以解释为什么这是傅立叶变换的一个属性(例如here)。

    实际的傅立叶变换将围绕零频率进行镜像,但fft 为您提供快速傅立叶变换,它围绕奈奎斯特频率进行镜像。您可以使用fftshift 使频谱以零频率为中心。

    我冒昧地通过避免重复几个 for 循环来缩短您的代码,并添加了 fftshift。由于您的信号是真实的,您也可以选择仅显示 fft 的一侧,但我会留给您。

    Lvl=[0.5,0.9,0.5,0.5,0.1,0.1,0.9,0.5];
    fa=60;  % the frequency of the parasitic source in hertz
    np=2;   % number of periods per bit
    
    kl = length(Lvl);
    dt = 0.01*np/fa; % time step 
    Tend = np*kl/fa - dt; % time span 
    t = 0:dt:Tend; % time vector
    N = length(t); % number samples
    
    Sig=sin(2*pi*fa*t);
    for n = 1:kl
        ids = (1:100) + (n-1)*100; 
        Sig(ids) = Sig(ids).*Lvl(n);
    end
    
    % FFT
    Y = fft(Sig);     
    fv = (0:N-1)/(N*dt);     % frequency range
    % FFT shift: 
    Y_shift = fftshift(Y);
    fv_shift = (-N/2:N/2-1)/(N*dt); % zero centered frequency vector
    
    % Plot
    figure(1); clf
    subplot(311)
    plot(t,Sig)
    title('Signal')
    
    subplot(312)
    plot(fv,abs(Y))
    title('FFT Magnitude')
    
    subplot(313)
    plot(fv_shift,abs(Y_shift))
    title('FFT Magnitude zero shift')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多