Использование FFT в MATLAB для нескольких матриц данных, чтобы найти различия в ответах - PullRequest
0 голосов
/ 29 января 2010

У меня есть 4 матрицы данных F1, F2, O1, O2. Все нейронные сигналы собраны на 1 мс в секунду. F1 и O1 собирали одновременно с F2 и O2. Мне нужно выяснить, как собранные данные различаются между двумя испытаниями, а также сравнить компоненты каждого испытания (F1 и O1) друг с другом, чтобы заметить различия в ответах. Я новичок в MATLAB, но я считаю, что мне нужно использовать функцию FFT. Я просто не знаю, с чего начать, любая помощь будет очень кстати.

Ответы [ 2 ]

2 голосов
/ 31 января 2010

Исходя из вашей частоты дискретизации (1000 раз в секунду), вы сможете анализировать только сигналы с частотой до 500 Гц. Любые компоненты нейронных сигналов, которые имеют более высокие компоненты, будут отображаться как сигналы более низких компонентов (если ваше устройство не оснащено фильтром верхних частот и т. Д.)

Команда для fft из Matlab Help: Y = fft (сигнал, n)

Сигнал является либо F1, либо O1, либо F2, либо O2 и должен иметь длину вектора 1000. n определяет количество сэмплов вашего БПФ. Это, по сути, то, насколько точно вы разделите значения частоты от 0 до 1000 Гц (ваша частота дискретизации). Например, если вы выберите n = 256, ваш Y будет длинным вектором 256 с мерой, соответствующей частотам (0 * 1000/256 Гц, 1 * 1000/256 Гц, ... 255 * 1000/256 Гц) .

Y будет вектором комплексных значений. Часто вы хотите увидеть силу или мощь сигнала. Вы можете использовать «abs ()», чтобы найти величину. myPSD = abs (Y). Далее, потому что ваши сигналы являются реальными сигналами, их FFT симметричны примерно на половине частоты дискретизации (500 Гц). Таким образом, вы должны смотреть только на первую половину. Вот фрагмент кода для просмотра первой половины.

Y = fft (сигнал, n); % выберите ваш n

myPSD = abs (Y);

myHalfPSD = myPSD (1: ceil (n / 2))

myFreqValues ​​= [0: 1000 / n: 500-1000 / n]% и myHalfPSD, и myFreqValues ​​должны иметь длину n / 2

сюжет (myFreqValues, myHalfPSD)

Как правило, PSD отображается в логарифмическом масштабе или даже в децибелах. Так что вы можете добавить строку.

Y = fft (сигнал, n); % выберите ваш

myPSD = abs (Y);

myHalfPSD = myPSD (1: ceil (n / 2))

myHalfDBPSD = 20 * log (myHalfPSD)

myFreqValues ​​= [0: 1000 / n: 500-1000 / n]%, и myHalfPSD, и myFreqValues ​​должны иметь длину n / 2

сюжет (myFreqValues, myHalfDBPSD)

Если вы хотите построить все 4 графика одновременно, вы можете использовать что-то вроде участок (4,1,1), участок (4,1,2) и т. д.

Надеюсь, это поможет,

Chuan

0 голосов
/ 29 января 2010

Если вы пытаетесь сравнить частотные спектры двух отдельных приобретений, то fft - это инструмент, который вы хотите использовать.

Mathworks имеет довольно хорошую документацию по использованию функции fft, и вы, вероятно, можете вырезать и вставлять свои данные прямо в пример кода, который они предоставляют.

Если вы хотите нанести данные на одну и ту же ось, вы можете использовать команду hold on, построить различные цвета линий (например: plot(x,y,'r') построит красную линию, 'b' голубую и т. Д. - см. свойства lineseries ) и включите легенду для обозначения графиков.

...