Этот пик при частоте почти 3 кГц должен присутствовать, поскольку fft
реального сигнала симметричен относительно частоты Найквиста (фактически комплексного сопряжения). Частота Найквиста равна половине частоты дискретизации, в вашем случае выборка выполняется при 3000 Гц, таким образом, частота Найквиста составляет 1500 Гц. Если вы посмотрите поближе на пик, вы увидите, что он находится на 2940 Гц (что составляет 3000-60 Гц) из-за того, что fft
отражается около 1500 Гц. Существует множество источников, объясняющих, почему это свойство преобразования Фурье (например, здесь ).
Фактическое преобразование Фурье будет отражено вокруг нулевой частоты, но fft
дает вам быстрое преобразование Фурье, которое отражается вокруг частоты Найквиста. Вы можете использовать fftshift
, чтобы центрировать спектр вокруг нулевой частоты.
Я позволил себе сократить код, избегая повторения нескольких циклов for, и добавил fftshift
. Поскольку ваш сигнал настоящий, вы также можете выбрать показ только одной стороны БПФ, но я оставлю это на ваше усмотрение.
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')
