1

我有一个调制信号,现在我想执行 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 的大尖峰,周围有马刺。

4

1 回答 1

3

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

实际的傅里叶变换将围绕零频率进行镜像,但它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')

在此处输入图像描述

于 2019-11-07T08:50:27.810 回答