Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9

Нахождение периода по графику

23.10.2016, 16:35. Показов 6366. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Была построена коррелограмма.
Теперь нужно найти период на этой коррелограмме,т.е. что бы программа сама его подсчитывала.
Был написан код.
Но выдает ошибку : Undefined function 'zi' for input arguments of type 'double'.
Сам код для нахождения периода:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dt=1/f0;%период дискретизации сигнала
TN=2;
Na=0:TN;
is=0;
A=size(rnorm_2);
z=sign(A);
 
for i=2:Na;%организовываем цикл по числу элементов
if z(i)==0;  
    then z(i)=1;
if (z(i)*z(i-1))<0;
then is=is+1; 
 zi(is)=i;
    
end
end
end
T(i)=((zi(is)-zi(1))*dt)/(is-1);
Кто может помочь разобраться с ошибкой или подтолкнуть на мысль, как найти период сигнала по графику
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.10.2016, 16:35
Ответы с готовыми решениями:

Нахождение периода
Доброй ночи) Подскажите, как в Mathcad найти период(максимально точно), если функция является одномерным массивом экспериментальных данных....

Нахождение наименьшего положительного периода функции
Определить, является ли функция f(x)=sin(5x)/(c0as(4x)-2) периодической, и найти ее наименьший положительный период, если он существует.

Нахождение периода повторений в генераторе псевдослучайных чисел
Изначальное задание выглядело так: ГПСЧ на основе сдвигового регистра с обратной связью (количество разрядов регистра: 8, ксорить нужно...

20
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
23.10.2016, 19:11
Цитата Сообщение от Myrcella Посмотреть сообщение
Undefined function 'zi'
Программа так и пишет: "Не определена функция zi". Откуда она взялась, если всё время использовалась z?
0
533 / 438 / 47
Регистрация: 17.07.2013
Сообщений: 2,236
23.10.2016, 20:17
Ошибка выдается в 13-й или в 18-й строке?
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
23.10.2016, 20:44
Myrcella, вот в этой строке
zi(is)=i;
может статься, что индекс окажется равным нулю (у вас is начинает отсчитываться с нуля), что приведёт к ошибке.
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
23.10.2016, 20:59  [ТС]
Цитата Сообщение от Nick07 Посмотреть сообщение
Ошибка выдается в 13-й или в 18-й строке?
18 строка

Добавлено через 7 минут
Цитата Сообщение от Centurio Посмотреть сообщение
Программа так и пишет: "Не определена функция zi". Откуда она взялась, если всё время использовалась z?
Да, так и пишет.
Код еще был написан в прошлом году к диплому, но не использовался, т.к. эта же ошибка выдавалась
Поэтому точно не помню откуда брали zi.
Попробую поменять на z и is не приравнивать к 0.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
23.10.2016, 21:11
Myrcella, у вас ещё и цикл не будет выполняться, так как он прописан для i от 2 до 0 с положительным приращением.
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
23.10.2016, 21:13  [ТС]
Цитата Сообщение от Centurio Посмотреть сообщение
Myrcella, у вас ещё и цикл не будет выполняться, так как он прописан для i от 2 до 0 с положительным приращением.
Легче заново сесть и написать новый код?
Просто я даже не представляю как сделать, что бы он посчитал период.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
23.10.2016, 21:28
Myrcella, скорее всего, ошибка именно в задании цикла. Судя по всему, i должна принимать значение от 2 до length(A).
Предлагаю следующий код для замены строк 6-17:
Matlab M
1
2
3
z=2*(A>=0)-1;
d=diff(z);
zi=find(d)+1;
Добавлено через 3 минуты
17 строка тоже непонятная. В ней используются индексы уже за пределами цикла.
0
Эксперт по электронике
 Аватар для R2D2
939 / 839 / 121
Регистрация: 23.11.2012
Сообщений: 2,488
23.10.2016, 21:29
Myrcella, я, конечно, извиняюсь, но нельзя ли привести Вашу задачу к использованию данной функции?
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
24.10.2016, 10:46  [ТС]
Цитата Сообщение от R2D2 Посмотреть сообщение
Myrcella, я, конечно, извиняюсь, но нельзя ли привести Вашу задачу к использованию данной функции?
Когда искала, как в Матлабе посчитать период сигнала, то данный функции не нашла. Смотрела в 2-х или 3-х книгах.
Сейчас попробовала, тоже не хочет считать.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
24.10.2016, 10:54
18 строку в дополнение к коду, написанному мной выше, можно записать в виде
Matlab M
1
T=(zi-zi(1)*dt)./(0:length(zi)-1);
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
24.10.2016, 11:41  [ТС]
Цитата Сообщение от Centurio Посмотреть сообщение
18 строку в дополнение к коду, написанному мной выше, можно записать в виде
Matlab MВыделить код
1
T=(zi-zi(1)*dt)./(0:length(zi)-1);
Правильно я поняла, что код должен выглядеть так:
Matlab M
1
2
3
4
5
6
7
8
9
dt=1/f0;
A=size(rnorm_2);
z=2*(A>=0)-1;
 
for i=2:length(A);
d=diff(z);
zi=find(d)+1;
end
T=(zi-zi(1)*dt)./(0:length(zi)-1);
Первый раз работаю с циклами и не очень хорошо в них разбираюсь.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
24.10.2016, 12:38
Myrcella, здесь цикл не нужен. Кроме того, период - это расстояние между двумя точками, в которых функция одинаково меняет знак, т.е. и в первой, и во второй точке либо с плюса на минус, либо с минуса на плюс. Поэтому код будет такой.:
Matlab M
1
2
3
4
5
dt=1/f0;
A=size(rnorm_2);
d=diff(z<0);
zi=find(d)+1;
T=(zi-zi(1)*dt)./(0:length(zi)-1);
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
24.10.2016, 13:42  [ТС]
Centurio,
теперь выдает ошибку:
Attempted to access zi(1); index out of bounds because numel(zi)=0.
Как я понимаю, это уже на массив он ругается
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
24.10.2016, 14:18
Myrcella, А, ну да. Там происходит деление на ноль. Скорее всего, последняя строчка должна быть
Matlab M
1
T=(zi-zi(1)*dt)./(1:length(zi));
Вообще, неплохо было бы, если бы предоставили данные коррелограммы и более подробно объяснили, каким способом вы хотите найти период.
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
24.10.2016, 17:24  [ТС]
Centurio,
Задание было: Найти средний период колебаний П, который вычисляется путем измерения периодов колебаний на коррелограмме за определенный временной отрезок и последующего усреднения полученных периодов.

Cначала хотела вообще делать через fft, но сказали, что надо находить период не пользуясь преобразованием Фурье.
Поэтому думала находить через пики.
Но могу что-нибудь перепутать, т.к. это было еще в мае, а бумаги с описанием этого кода куда-то дела.
Миниатюры
Нахождение периода по графику  
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
24.10.2016, 17:50
Myrcella, а данные, по которым строилась коррелограмма, есть?
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
24.10.2016, 17:55  [ТС]
Centurio, да, есть, но они в формате "edf".
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
24.10.2016, 19:31
Myrcella, выложите.
0
0 / 0 / 0
Регистрация: 21.03.2016
Сообщений: 9
24.10.2016, 19:50  [ТС]
Centurio,

и параметры, которые были взяты с сайта
Matlab M
1
2
3
4
5
%Задаем частоту дискретизации
f0=165; %Гц
 
%Задаем время наблюдения
Tn=20; %c
Вложения
Тип файла: rar S001R02.rar (560.7 Кб, 3 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2016, 19:50
Помогаю со студенческими работами здесь

Нахождение периода колебаний тела массы m на пружине с коэффициентом жесткости k
Нужно написать программу на фортране!Тело массы m совершает колебания на пружине с коэффициентом жесткости k. Написать программу, которая...

Нахождение принадлежности точки к заданному графику
Добрый вечер! Необходимо написать программу на C для нахождения принадлежности точки к заданному графику. Задание:

Период из запроса разбить на начало периода и конец периода
есть запрос &quot;выбрать оборотыпродажи. период как период из продажиобороты &quot; на выходе имеем поле период которое указывается в...

Формат периода
Привет всем, Помогите найти ошибку в формате периода &quot;Обороты за&quot;+ Выбор Когда &amp;Переодичность=6 Тогда...

Измерение периода
К сообщению прикрепил головную боль...Вообщем так нашёл в интернете статью вот По данному примеру сделал, но только через PCINT. Но как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru