2014-09-25 6 views
1

Я пытаюсь проанализировать некоторые данные сигнала, собранные на частоте 120 Гц. У меня есть Excel и SPSS в моем распоряжении (а также MATLAB, но я не очень-то знаком с ним). Я искал онлайн около часа и половины, и, похоже, не могу найти то, что ищу, хотя я знаю, что это должно быть относительно просто.Расчет частоты и продолжительности двоичного сигнала

У меня есть список 0 и 1. Я хотел бы рассчитать продолжительность каждого сигнала, а затем график частотного распределения сигналов (т. Е. Гистограммы с изображением процента сигналов @ 1/10-й секунды, процента сигналов @ 2/10ths sec, @ 3/10ths sec ... @ 1 сек и т. Д.). Я считаю, что это обратное кумулятивное распределение, которое я ищу, но прежде чем я смогу это сделать, мне нужно обработать данные в своих электронных таблицах.

У меня возникли проблемы с определением, как суммировать каждую «группу» из них, чтобы получить продолжительность каждого сигнала. Он сделал бы что-то вроде этого: для ячейки, содержащей 1, если ячейка выше содержит 0, она начинает новую сумму и продолжает суммировать 1 до появления 0. К концу электронной таблицы у меня будет список длительностей сигналов (выраженный в единицах 1/120-й секунды, т. Е. 30 будет 0,25 секунды)

У меня есть более 100 файлов для обработки , поэтому я ищу формулу или макрос, чтобы сделать это быстро для каждого файла.

У меня есть данные для 4-х разных устройств, и я ищу сравнить эти распределения сигналов по устройству. Могу ли я сделать это в Excel, Spps или Matlab?

Спасибо!

Данные форматируются в столбцах - у меня есть количество кадров в столбце A и сигнал в столбце B (0 или 1). Каждый кадр составляет 1/120 сек (у меня есть тысячи кадров на файл). Меня не интересует форма волны, сама по себе - я делаю это для статистических целей, чтобы определить, значительно ли отличается распределение длинных и коротких сигналов между условиями. В конце концов, мне нужен список длин сигнала, который я мог бы представить в гистограмме частоты (и по частоте, я не имею в виду волновую частоту, а скорее количество вхождений.

+0

Можете ли вы добавить код для того, что вы пробовали? И какие конкретные проблемы у вас есть? – triggerNZ

+0

Найдите блок ** 1's ** и запишите его центральную точку. Найдите следующий блок ** 1 **, а также запишите его центральную точку. Это два последовательных пика. Из разницы во времени вы можете рассчитать период, частоту, длину волны и т. Д. –

+0

Я могу представить несколько идей, как это можно сделать в SPSS, но эти идеи зависят от того, как ваши данные структурированы в первую очередь и какая структура вам нужна или не нуждаются в конце. Можете ли вы дать нам небольшой пример ваших данных? И было бы проблемой сохранить длину прогонов «1» одного сообщения в дополнительном листе данных? – mirirai

ответ

0

"суммировать каждую" группу " из них для получения продолжительности каждого сигнала «применять итоговые значения и при каждом изменении: выберите свой список, используйте функцию: Сумма и добавьте промежуточный итог в: какую колонку вы хотите добавить.

+0

Я не уверен, что я понимаю, как использовать функцию SUBTOTAL в этом случае. Я не хочу ни одного значения для всех 1 в столбце, я хочу значение для каждого «куска» из 1. Сумма будет условной (IF cell = 1, добавьте в ячейку выше.Если cell = 0, начните новый промежуточный итог. Проблема с этим подходом заключается в том, что она дает мне еще один столбец чисел, который увеличивается на 1 - я ТОЛЬКО хочу итоговые значения) – MsHF

+0

Я имел в виду итог, как в DATA> Наброски - Итого. – pnuts

+0

Ах! Хорошо, сейчас я понимаю. Благодарю. Это дает мне итоговые значения для каждого запуска из них - к сожалению, он представлен в очень громоздком формате (он вставляет строки и текст). Я хотел бы получить только данные итогов в отдельный столбец, если это возможно. – MsHF

0

Это одна из возможностей, сделано в SPSS.

* create some test data. 
    DATA LIST FREE/frame (F8) signal (F1). 
    BEGIN DATA 
    1 1 
    2 1 
    3 0 
    4 0 
    5 1 
    6 0 
    7 1 
    8 1 
    9 1 
    10 0 
    11 0 
    12 0 
    13 1 
    14 0 
    15 1 
    16 0 
    17 1 
    18 0 
    19 1 
    20 1 
    END DATA. 
    DATASET NAME data_orig. 

    * use a work copy because data will be reduced in the process. 
    DATASET COPY data_workcopy. 
    DATASET ACTIVATE data_workcopy. 

    * count the length of each run of "1". 
    COMPUTE signallength = 0. 
    IF (signal=1 AND (LAG(signal)=0 OR frame=1)) signallength = 1. 
    IF (signal=1 AND LAG(signal)>0) signallength = LAG(signallength)+1. 
    EXECUTE. 

    * get the last/highest number of each run. 
    * It's somewhat complicated, but I haven't found a much better idea yet. 
    IF (signallength=1) signalbegin = 1. 

    SORT CASES BY frame (D). 
    IF (signal=1 AND LAG(signal)>0) signallength = LAG(signallength). 
    EXECUTE. 

    SELECT IF signalbegin=1. 

    FREQUENCIES signallength /HISTOGRAM. 

в этом примере есть на самом деле не нужно для создания листа данных работы копирования, потому что вы можете запустить SELECT IF с TEMPORARY, и данные не будут потеряны. Однако работа с копией набора данных может быть полезна, если вы хотите провести дополнительный анализ.

+0

Если кто-то знает хороший способ, как отметить самый высокий/последний экземпляр каждого прогона, пожалуйста, оставьте примечание. – mirirai