Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-2 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 94
1

Нахождения частоты импульсного сигнала

01.11.2019, 12:36. Просмотров 1228. Ответов 5
Метки нет (Все метки)

Здравствуйте, стоит задача найти частоту импульсного сигнала
Написал функцию

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 public double Rotor_rotation1(double[] ch2)
        {
            double ampl_impuls = ch2.Max();
            int i = 0;
 
            // находим имульс
            for (;i<ch2.Length;i++)
            {
                if (ampl_impuls != ch2[i])
                {
                    continue;
                }
                else
                {
                    break;
                }
                //i++;
            }
            // нашли имульс , находим его спад 
          /*  while (ampl_impuls == ch2[i])
            {
                i++;
            }
            */
            for (; i < ch2.Length; i++)
            {
                if (ampl_impuls == ch2[i])
                {
                    continue;
                }
                else
                {
                    break;
                }
                //i++;
            }
 
            int beg = i-1;
            // находим следующий имульс
            for (; i < ch2.Length; i++)
            {
                if (ampl_impuls != ch2[i])
                {
                    continue;
                }
                else
                {
                    break;
                }
                //i++;
            }
            // ищем его спад
            for (; i < ch2.Length; i++)
            {
                if (ampl_impuls == ch2[i])
                {
                    continue;
                }
                else
                {
                    break;
                }
                //i++;
            }
 
            int end = i-1;
            //находим количество точек между спадами = период 
            //4006-это частота дискретизации
            double per = (1.0/4006.0) * ((end - beg));
 
            return 1/per;
        }
Естественно он не работает(работает через раз). Подскажи как его улучшить,пожалуйста(в честь пятницы). Вычисляют частоту по периоду
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2019, 12:36
Ответы с готовыми решениями:

Различие частоты сигнала и частоты его АКФ
Здравствуйте. Я думал, что если взять обычный синусоидальный сигнал, найти его АКФ, то частота не...

Извлечение сигнала заданной частоты из более сложного сигнала
Нужен совет. Предположим, у меня есть некий сложный сигнал. Я знаю, что в него входит синусоида,...

Определение частоты сигнала
Добрый день! Определяю частоту смоделированного сигала по переходам через 0 и экстремумам. Из-за...

Определение частоты квазипериодического сигнала
Здравствуйте, уважаемые форумчане. Необходимо экспертное мнение касательно следующей задачи: есть...

5
2387 / 1707 / 355
Регистрация: 11.09.2009
Сообщений: 6,288
01.11.2019, 21:58 2
Цитата Сообщение от pinguin1119 Посмотреть сообщение
не работает(работает через раз)
Может ch2.Length выбран неудачно, и из for вылетает, не досчитав до конца периода сигнала?
Вы бы поподробнее написали, что значит "не работает".
0
-2 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 94
02.11.2019, 21:04  [ТС] 3
ch2 это оцифрованный сигнал - массив значений. Иногда она правильно считает,иногда нет. В этом проблема. Например подаю сигнал на ацп 50Гц, показывет правильно, а иногда например 70Гц,60гц. Возможно из за шумов, хотя на графике все норм.
А как вы считаете, сама логика алгоритма правильная?

Добавлено через 2 минуты
ch2.Length = 2048 , то есть при частоте дискретизации 4096, я собираю пол сек. И в такой промежуток времени попадает не один период. Моя функция ищет 1 период и считает по нему частоту
0
2387 / 1707 / 355
Регистрация: 11.09.2009
Сообщений: 6,288
02.11.2019, 22:08 4
Цитата Сообщение от pinguin1119 Посмотреть сообщение
сама логика алгоритма правильная?
За весь алгоритм не скажу, не вникал, но искать период по максимуму, тем более на равенство ... В этом вероятно и причина нечёткой работы. Попробуйте выделять период по пересечениям нуля. Если нет чёткой привязки нуля к шкале АЦП или сигнал с постоянной составляющей - то по пересечениям среднего значения. В общем, работать по фронтам - надёжнее.

Ну и ещё общее соображение. Если уж всё равно есть запись нескольких периодов, то нет смысла терять точность, вычисляя частоту только по одному периоду. Максимальная точность будет если выделить суммарную длительность максимального количества периодов в записи и поделить её на количество этих периодов.
0
-2 / 0 / 0
Регистрация: 15.10.2015
Сообщений: 94
04.11.2019, 13:24  [ТС] 5
Под среднем значением , вы имеете ввиду среднее число всего массива ?
0
2387 / 1707 / 355
Регистрация: 11.09.2009
Сообщений: 6,288
04.11.2019, 16:12 6
Лучший ответ Сообщение было отмечено pinguin1119 как решение

Решение

pinguin1119, ну, если вы заранее не знаете, какой код АЦП соответствует нулю, то можно и так. Но обычно схему делают так, чтобы "ноль" двуполярного сигнала (если синусоида) соответствовал середине шкалы АЦП. А для импульсного сигнала с крутыми фронтами так, чтобы максимальная амплитуда умещалась в полную шкалу. То есть, порог, пересечение которого надо "отловить", обычно известен заранее, заложен на этапе конструирования. Посмотрите внимательно на свою схему, прикиньте диапазон изменения амплитуды. Скорее всего значение порога можно выбрать, а не расчитывать.
Хотя вы всё равно максимум-то считаете, значит время на анализ массива в вашем алгоритме не слишком критично.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2019, 16:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

БПФ бинарного сигнала, поиск частоты и фазы
Вляпался по неосторожности в ЦОС, совсем не мою область. Есть светодиод. Он мигает с частотой...

Осциллограф показывает две разные частоты одного сигнала
Осциллограф GW INSTEK GDS-840C, на вход поданы прямоугольные импульсы с частотой 200Гц амплитудой...

Выделение сигнала полученного с SDR в стороне от центральной частоты
Исходные условия: Имеется SDR приёмник на базе USB TV-тюнера. На нём выставляется центральная...

Анализ сигнала для нахождения времени и амплитуды
Существует проблема: Есть форма сигнала представленная виде рисунка (рисунок 1) Можно ли с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.