Причина, по которой диапазон находится между [-Fs/2,Fs/2]
, объясняется тем, что Fs/2
является Nyquist frequency. Это самая большая возможная частота, которая обладает способностью визуализироваться и что в конечном итоге присутствует в вашей частотной разложения. Я также не согласен с вашим комментарием, где диапазон «может быть между [-0.25,0.25]
». Это противоречит определению частоты Найквиста.
Из теории обработки сигналов мы знаем, что мы должны пробовать по меньшей мере в два раза ширину полосы сигнала для правильной реконструкции сигнала. Полоса пропускания определяется как максимально возможная частотная составляющая, которая может быть замечена в вашем сигнале, которая также называется Частота Найквиста. Другими словами:
Fs = 2*BW
Верхний предел, где мы можем визуализировать спектр и в конечном счете частоту полосы пропускания/Найквиста определяется как:
BW = Fs/2;
Поэтому, потому что ваша частота дискретизации равна 6000 Гц, это означает частота Найквиста составляет 3000 Гц, поэтому диапазон визуализации составляет [-3000,3000]
Гц, что является правильным в графе магнитов.
BTW, ваши центры бункеров для каждой из частот неверны. Вы указали, что общее количество ячеек в FFT равно 512, но способ, которым вы указываете ячейки, относится к общей длине сигнала. Я удивлен, почему вы не получаете синтаксическую ошибку, потому что вывод функции fft
должен дать вам 512 точек, но ваша переменная оси частоты будет массивом, который больше 512. В любом случае это неверно. Частота в каждом бен i
должна быть:
f = i * Fs/N, for i = 0, 1, 2, ..., N-1
N
является общим количеством очков, которое вы имеете в вашем FFT, который 512. Вы первоначально имели как length(y)
и это не правильно ... так возможно, именно поэтому у вас есть источник путаницы при рассмотрении оси частот. Вы можете прочитать, почему это так, ссылаясь на замечательный пост пользователя Paul R: How do I obtain the frequencies of each value in an FFT?
Обратите внимание, что мы указываем только ячейки от 0 до N - 1.С учетом этого при указании бин центров каждой частоты, обычно указать дополнительной точки в вашей команде linspace
и удалить последнюю точку:
freqaxis=Fs*(linspace(-0.5,0.5, 513); %// Change
freqaxis(end) = []; %// Change
Кстати, как вы объявили freqaxis
является бит, запутанный для меня. Это для меня является более удобным для чтения:
freqaxis = linspace(-Fs/2, Fs/2, 513);
freqaxis(end) = [];
Я лично ненавижу, используя length
и я предпочитаю более numel
.
В любом случае, когда я запускаю исправленный код, чтобы указать центры bin, теперь я получаю этот график. Обратите внимание на то, что я вставил несколько курсоров данных, где пики спектра, которые соответствуют частотам для каждого из косинусов, что вы объявили (400 Гц и 1100 Гц):
![enter image description here](https://i.stack.imgur.com/xXsw5.png)
Вы видите, что есть некоторые незначительные неточности, в первую очередь из-за количества ящиков, которые вы указали (т.е. 512). Если вы увеличили общее количество ящиков, вы увидите, что частоты на каждом из пиков будут более точными.