fft
часть кода выглядит хорошо для меня. Однако этот бит не имеет большого смысла:
for i = 1:2048
y = I(:,2);
end
Что вы пытаетесь здесь сделать? Вы не используете индекс цикла i
вообще в цикле for.
Кроме того, я предполагаю, что y
имеет длину 2000, вы можете подтвердить? В противном случае L = 2000
следует изменить на L = length(y)
. Аналогично, я предполагаю, что частота дискретизации данных составляет 40 кГц, в противном случае Fs = 40000
неверен.
EDIT после обсуждения в комментариях:
С данными, которые вы предоставили, я получаю те же результаты. Единственное, что я сделал, это исключить последнюю точку данных из анализа, когда он упадет до нуля. То, как вы читаете данные, по-прежнему не имеет смысла для меня. Примечание. Я использую Octave, а не MATLAB, но код должен давать те же результаты в MATLAB.
load('ascii_value.txt')
y = ascii_value(1:end-1,2);
plot(y)
L=length(y);
Fs = 40000;
T = 1/Fs;
NFFT = 2^nextpow2(L);
Y = abs(fft(y,NFFT))/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
figure, plot(f,2*abs(Y(1:NFFT/2+1)))
axis([0 40000 0 40])
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
сигнал выглядит следующим образом:
и FFT так:
Примечание: если вы выборки 40 кГц, ваш FFT может работать только до 20 кГц (частота Найквиста).
Кроме того, рекомендуется, что вы не используете 'i' или' j' как переменные в Matlab, так как они относятся к SQRT (-1): http://stackoverflow.com/ Вопросы/14790740/using-i-and-j-as-variables-in-matlab –
Ну, я понимаю, что создание fft не объясняет самих себя. В первый раз я тоже боролся. Но есть некоторые действительно хорошие примеры, которые должны помочь, например: [понимание fft с matlab] (http://stackoverflow.com/questions/10758315/understanding-matlab-fft-example?rq=1) –
Вам нужно перестать задавать один и тот же вопрос снова и снова и пытаться скрыть два разных идентификатора пользователя. На этот вопрос уже был дан ответ. – am304