|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.02.2023, 14:28 | #1 |
Новичок
Джуниор
Регистрация: 27.02.2023
Сообщений: 1
|
Спектральная Плотность Мощности - $5 за пару строк кода
В приложенном архивном файле проект PSD на C#.
Проект читает файл rr.txt и пишет файл pp.txt Входной файл это временной ряд из 300 чисел зафиксированных в течение 339095 миллисекунд. Каждое число ряда это время в миллисекундах прошедшее после предыдущего измерения. Программа считывает временной ряд в массив и применяет к нему дискретное преобразование Фурье. Результаты преобразования выводятся в файл pp.txt В программе не хватает нескольких строк для расчета мощности каждой гармоники и вместо значения мощности выводятся нули. Нужно добавить код для расчета мощности и вывода ее в составе строки файла. Расчитанная для каждой гармоники мощность не должна отличаться от приведеной в файле ee.txt более чем на 2%. Для расчета мощности можно написать либо оригинальный код либо найти готовую функцию в какой-либо библиотеке. Стоимость $5. Оплата через PayPal после проверки работы кода на моем компьютере. |
02.03.2023, 13:42 | #2 | ||
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Фигня какая то. А где данные сигнала то??
Цитата:
Цитата:
Так где измерения то?? где сам сигнал? Более того. В конечном файле у вас единицы должны быть в ms в квадрате на герц а мощность получается в герцах. Для перевода еще необходимо понимать физику процесса. нужен коэффициент, который зависит от физических свойств сигнала.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 02.03.2023 в 14:16. |
||
02.03.2023, 14:42 | #3 | |||
Форумчанин
Регистрация: 17.10.2018
Сообщений: 184
|
Там всё не то.
Цитата:
♦Замеры через разные промежутки времени, чего быть не должно. ♦На выходе получили комплексное число, а надо досчитать до скаляра. ТС скопипастил код не разобравшись. ♦Желание получить на выходе физическую величину, при этом нет входных данных. ♦Причём в "эталонном" ее.тхт есть намёк что расчёт возможен. Цитата:
Чтоб до этого добраться надо писать весь код. Цитата:
ТС, не подскажите что значит квадратная миллисекунда на герц? Стандартно PSD ед.измерения это Вт/Гц или дБм/Гц. В целом скопипащенная ТС-ом и доработанная функция кажется работает: Код:
|
|||
02.03.2023, 17:34 | #4 |
Новичок
Джуниор
Регистрация: 27.02.2023
Сообщений: 1
|
В описании задачи указано что проект читает файл rr.txt
Файл rr.txt приложен к теме В нем перечень чисел Именно они и составляют ряд исходных данных Временные замеры между интервалами действительно не одинаковы но этим можно пренебречь Считаем что одинаковые (ну для применения ДПФ) Данные ряда это интервалы между ударами сердца Так оно бьется - не совсем равномерно Мощность в миллисукундах в квадрате на герц Шумы уже устранены и грубые ошибки импульсов в сигнале тоже Детрендинг не нужен Применение оконной функции приветствуется Я про нее смутное представление имею Если я не на все ответил или еще нужна информация - пишите В конце нужно примерное совпадение результата расчета мощности с указанной в файле ee.txt (А там точно оконная функция применялась) Последний раз редактировалось vi19540315; 02.03.2023 в 17:40. |
03.03.2023, 00:10 | #5 |
Новичок
Джуниор
Регистрация: 27.02.2023
Сообщений: 1
|
Закрываем тему
Похоже тут для оценки мощности применялся метод периодограмм Велча и оконная функция Хэмминга. Так что парой строк кода тут явно не обойдешься.
Поэтому тема закрывается, а господин jillitil если хочет то может сообщить мне свой PayPal акк для получения $5. Но все таки странно. Если есть Фурье разложение определенного временного ряда то мощность спектра одной определенной гармоники заданной частоты должна бы иметь одно и то же значение хоть ты тресни. А тут применяют какие-то периодограммы и функции разные и получают разные результаты и что - все они правильные? Похоже как я купил что-то за 10 копеек а мне с сотни дают любую сумму сдачи и всякий вариант правильный? Не понимаю такой математики. |
03.03.2023, 04:22 | #6 | |
Форумчанин
Регистрация: 17.10.2018
Сообщений: 184
|
Цитата:
Набор данных во времени это сигнал. Сигнал можно охарактеризовать, например макс-мин, RMS, пик-пик, среднее арифметическое, и т.п. Самый первый и примитивный графический вид сигнала это осциллограмма или амплитудо-временная характеристика (АВХ) [моя отсебятина]. Иное представление этого же сигнала амплитудо-частотная хар-ка (АЧХ) БПФ переводит АВХ в АЧХ. Но тут есть проблема: фаза и частота в функции на практике не совпадают с таковыми в обрабатываемом сигнале. В результате преобразования на АЧХ появятся несуществующие частоты (вы их некорректно назвали гармониками). Называется Spectral leakage (утечка спектра) см. Рис и сравните с предыдущим две высшие частоты. Функция дискретно проходит, а в данных я забил дробную частоту, они размазались. Для уменьшения их появления применяется "окно". Окно Хемминга(Hamming): хорошо убирает несуществующие, но может подавить присутствующую частоту. Окно Ганна (Hann): теоретически хуже Хемминга, но не давит существующие частоты полностью. Лучше пользоваться им в решениях, где важно ничего не упустить, ценой лишнего шума. Абсолютно правильных решений как в школе нет. Задачи сильно сложные. |
|
03.03.2023, 12:53 | #7 |
Новичок
Джуниор
Регистрация: 27.02.2023
Сообщений: 1
|
Спасибо за разъяснение. Картина существенно прояснилась.
Предложение насчет пейпала остается в силе. |
03.03.2023, 15:06 | #8 |
Новичок
Джуниор
Регистрация: 27.02.2023
Сообщений: 1
|
Остается еще один не понятный для меня вопрос.
Метод Велча включает следующие шаги: - Разделите исходный сигнал на перекрывающиеся или неперекрывающиеся сегменты равной длины. - Примените оконную функцию к каждому сегменту для уменьшения эффекта утечки спектра. - Вычислите периодограмму для каждого сегмента, которая определяется как квадрат модуля дискретного преобразования Фурье (DFT) сегмента. - Усредните периодограммы по всем сегментам для получения оценки PSD. Значит имеем входной ряд из 300 элементов и продолжительностью сьемки 340 секунд. Допустим я разбил свой входной ряд из 300 элементов на 59 участков по 10 элементов от 1 по 10, от 6 по 15, от 21 по 30 и т.д. Применил к каждому участку оконную функцию Хемминга. Применил к каждому участку ДПФ. На каждом участке получил по 10 магнитуд. ----- Нашел формулу усреднения периодограмм в общем виде $$ \text{PSD}(f) = \frac{1}{N}\sum_{i=1}^{N}\frac{1}{M }\left|\text{FFT}(x_i)\right|^2 $$ где: $\text{PSD}(f)$ - оценка спектральной плотности мощности (PSD) на частоте $f$; $N$ - число сегментов; $M$ - длина каждого сегмента; $x_i$ - $i$-й сегмент сигнала; $\text{FFT}(x_i)$ - преобразование Фурье (FFT) $i$-го сегмента; $|\text{FFT}(x_i)|^2$ - квадрат амплитуды спектра $i$-го сегмента. Таким образом, мы берем среднее значение квадрата амплитуды спектра для каждого сегмента и делим его на общее число сегментов, чтобы получить усредненную оценку PSD на данной частоте $f$. Заметим, что PSD - это функция частоты, поэтому для оценки PSD на всех возможных частотах, необходимо применять эту формулу для каждой из частот, на которых мы хотим оценить PSD. ----- Вопрос: Можно описать эту формулу нормальным человеческим языком чоб можно было это записать в виде программного кода? Что с чем складывать и на сколько делить чтобы получить 300 значений Спектральной Оценки Мощности для исходного ряда из 300 элементов? ------ Убрав служебные разметочные символы получаем PSD(f) = (1 / N) * Summa(po i ot 1 do N) ( (1 / M) * |FFT(x_i)|^2 ) где: PSD(f) - оценка спектральной плотности мощности (PSD) на частоте f; N - число сегментов; M - длина каждого сегмента; x_i - i-й сегмент сигнала; FFT(x_i) - преобразование Фурье (FFT) i-го сегмента; |FFT(x_i)|^2 - квадрат амплитуды спектра i-го сегмента. Таким образом, мы берем среднее значение квадрата амплитуды спектра для каждого сегмента и делим его на общее число сегментов, чтобы получить усредненную оценку PSD на данной частоте f. Получается что частота f присутствует в правой части через x_i ? И я не понимаю - откуда наберется 300 штук PSD(f) Так чтоб сопоставить их с ДПФ исодного ряда. ----- Частота PSD связана с номером элемента в сегменте через формулу: f_i = i * (F_s / N) где f_i - частота i-го элемента в сегменте, F_s - частота дискретизации сигнала, а N - количество элементов в сегменте. Номер сегмента не имеет непосредственной связи с частотой PSD. Вместо этого, номер сегмента используется для усреднения спектров. Обычно сегменты перекрываются на определенном проценте, например, 50%. Для каждого сегмента вычисляется спектр, затем спектры усредняются. Т.е. на выходе получаем 10 значений PSD т.к. в сегменте было 10 элементов, а сколько было сегментов не имеет значения. Но мне же нужно 300 значений PSD. И где они? Последний раз редактировалось vi19540315; 03.03.2023 в 18:19. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразование Фурье (БПФ) и Спектральная Плотность Мощности | vi19540315 | Общие вопросы по программированию, компьютерный форум | 0 | 27.02.2023 22:05 |
Написать программу на C++. Разработать класс «Множество (целых чисел, символов, строк и т. д.)» – Set мощности n. | KamaR | Общие вопросы по программированию, компьютерный форум | 0 | 18.05.2020 11:49 |
Перевод мощности в плотность мощности | ImmortalAlexSan | Свободное общение | 9 | 20.02.2014 22:45 |
Прокоментировать пару строк кода | kilogram | PHP | 9 | 28.03.2012 23:20 |
Прокоментируйте пару строк | stenl1 | Общие вопросы C/C++ | 70 | 22.07.2011 21:34 |