0 / 0 / 0
Регистрация: 06.01.2023
Сообщений: 2
|
||||||||||||||||
1 | ||||||||||||||||
Matlab 2018 Проблема с функцией создания октавных фильтров octaveFilter06.01.2023, 02:37. Показов 542. Ответов 5
Здравствуйте. Пишу сейчас диплом по программе спектрального анализа, одно из заданий - ускорение работы программы. 1/3-октавный анализ обычно длится около 10 минут, а 1/12-октавный 35+ минут, что при большом количестве записей очень затратно.
С помощью Profiler проанализировал код, 90-95% общего времени работы программы занимает функция фильтрации (приложу скриншот). Она выполняется в двойном цикле, где внешний цикл - это цикл по времени (вообще внешних цикла два - время разделено на две части, но в целом разница между двумя циклами незначительная), а внутренний - по частотам. Так как основное время занимает функция фильтрации, решил использовать параллельные вычисления, по-моему, другим способом ускорить вычисления и не получится. Для параллельных вычислений использовал parfor. После исправления всех проблем программа запустилась и довольно быстро отработала (для 1/3-октавного анализа получилось 4 минуты вместо 10 в оригинале), но выявилась разница в массиве уровней звукового давления, если сравнить её с массивом оригинала. Где-то эта разница небольшая, во втором знаке, но где-то она достигает нескольких дБ, что неприемлемо (приложу скриншот с массивом-разницей между оригинальным массивом SPL и с parfor). Первая строчка (первая итерация внешнего цикла по времени) считается правильно, а вот дальше начинаются проблемы. Видимо, происходит какое-то "подмешивание" данных других итераций, что странно, учитывая то, что при parfor они вроде как должны выполняться одновременно. После многих отладок выяснил, что проблема происходит как раз в функции фильтрации - на вход данные поступают одни и те же, но на выходе данные отличаются. Обычно ещё в начале программы создаётся банк фильтров через цикл с использованием функции octaveFilter (*1), затем во внутреннем цикле выбирается фильтр конкретной частоты и происходит фильтрация (*2).
Сталкивался ли кто-то с подобной проблемой? Есть ли у неё решение, или может какая-то схожая функция создания октавных фильтров? Заранее спасибо
0
|
06.01.2023, 02:37 | |
Ответы с готовыми решениями:
5
Проблема с функцией создания односвязного списка Инструменты управления и создания фильтров для аудио Реализовать программу применения графических фильтров к фотографии (5 фильтров) После создания файла функцией CreateFile() не получается сохранить в него TStringGrid |
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
|
|
09.01.2023, 13:01 | 2 |
The_Doctor49, заметил, что если создать фильтр и два раза прогнать через него один и тот же массив данных, то результаты будут разными. Может, ошибка как-то с этим связана?
Размеры разных xw будут одинаковыми или нет? Если да, то на octFilt можно подать сразу подготовленную матрицу, где каждый столбец - это ваши xw.
0
|
0 / 0 / 0
Регистрация: 06.01.2023
Сообщений: 2
|
|
10.01.2023, 01:01 [ТС] | 3 |
Размер может незначительно отличаться. Проблема не в xw, так как я проверял все данные, идущие на вход фильтра. Сравнивал даже xw до фильтра и после, разницы никакой
0
|
104 / 85 / 22
Регистрация: 09.01.2018
Сообщений: 463
|
|
10.01.2023, 08:16 | 4 |
А я например не понимаю почему размер может отличаться?
0
|
1296 / 926 / 448
Регистрация: 21.10.2012
Сообщений: 2,601
|
||||||
10.01.2023, 11:03 | 5 | |||||
The_Doctor49, ниже кусок кода:
0
|
104 / 85 / 22
Регистрация: 09.01.2018
Сообщений: 463
|
|
10.01.2023, 13:49 | 6 |
Это нюансы работы объекта.
В реальной жизни крайне сложно понять как возможно изменение параметров фильтра сигналом. Он же неадаптивный? Или я ошибаюсь?
0
|
10.01.2023, 13:49 | |
10.01.2023, 13:49 | |
Помогаю со студенческими работами здесь
6
Написать программу с функцией создания списка символов (логические структуры данных) Передача массива символов в функцию strlen после создания его функцией sprintf В какой последовательности использовать 4 точки для создания двух треугольников функцией AddMeshFace Проблема с функцией Проблема с функцией Проблема с функцией Проблема с функцией Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |