Native x86
![]() ![]() 6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
|
|
1 | |
Вычисление SNR07.03.2025, 01:31. Показов 1015. Ответов 13
Всем привет.
Есть тут знающие люди, которые подскажут алгоритм измерения SNR? Сейчас делаю так: 1. Раскладываю буфер по Фурье 2. Вычисляю модули амплитуд спектральных составляющих по формуле sqrt(sqr(buf[even]) + sqr(buf[odd])) / Count 3. Суммирую амплитуду всех спектральных составляющих кроме контрольной 4. Делю амплитуду контрольной частоты на сумму из предыдущего пункта В качестве источника сигнала у меня сгенерированный звуковым редактором файл, в котором смешан синус 1000 Гц с амплитудой 0.2 (контрольная частота) и белый шум с той же амплитудой: На спектре, который строит моя программа, это выглядит так: Как видно, амплитуда контрольной частоты соответствует заданному уровню. Шумы размазаны по спектру и их почти не видно. Но результат расчета SNR получается в районе 0.03, хотя должен быть равен единице. То есть суммарная амплитуда шумовых составляющий намного выше, чем амплитуда контрольного сигнала. Хотя если судить по уровню контрольного сигнала на спектре, вычисляется амплитуда правильно, утечки тоже почти нет. Куда копать?
0
|
07.03.2025, 01:31 | |
Ответы с готовыми решениями:
13
[VHDL] Вычисление арктангенса угла по заданной таблице тангенсов Intel 8080 (КР580ВМ80А). Вычисление модуля числа EWB. Вычисление разности кодов на АЛУ 74181 |
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
|
|
07.03.2025, 02:02 | 2 |
0
|
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
|
|
07.03.2025, 08:22 | 3 |
Это что значит? Вы сумму всех частот делите на одну частоту? (топорно формулировал, но думаю ясно)
Добавлено через 1 минуту Как определили что д.б. равен 1?
0
|
Native x86
![]() ![]() 6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
|
|
07.03.2025, 14:06 [ТС] | 4 |
Нормализация амплитуд, чтобы результаты разложения были в диапазоне от 0 до 1.
Правда, тут забыл дописать, что еще на 2 умножается, т.к. обрабатывается половина спектра (вторая половина -- зеркальная и ее игнорируем): Не по теме: был же когда-то нормальный редактор формул, теперь эта неюзабельная хрень Грубо говоря -- да (на самом деле там некоторая полоса частот, плюс вычитаю шумы из-под полезного сигнала и плюсую их к остальным шумам, но это на результат влияет не сильно). Я сам сформировал исходный сигнал из синусоиды и шума равных амплитуд. Добавлено через 7 минут А вопрос решен, я забыл в квадрат взять элементы спектра перед суммированием. То есть просуммировал амплитуды, а не мощности. После добавления квадратов отношение стало стремиться к 1.
0
|
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
|
|
07.03.2025, 16:41 | 5 |
Что такое
в расчёте модуля амплитуды спектральной составляющей?
Как вы считаете Count?
0
|
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
|
|
07.03.2025, 20:50 | 7 |
Количество точек в буфере, что ли? Или количество чего? Как считается Count? Чему равен в вашем примере?
0
|
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
|
|
07.03.2025, 22:40 | 8 |
Даже если просто в вики посмотрть, там написано - "среднеквадратичное". Хотя что-то подобное вы после написали. Так СКВ или нет?
Что такое шум с амплитудой к примеру 5 вольт? Чисто мое мнение амплитуда и шум вещи не особо совместимые. Однако в понятие такое вводится. Но возникает вопрос и как же конкретно вы его задавали? Если согласно определению, которое всетаки имеет место, то вероятно 1 не получится. Хотя справедливости ради надо сказать, что никогда этим вопросом не занимался, и не рассчитывал. Чисто интуитивные рассуждения.
0
|
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
|
|
07.03.2025, 23:09 | 9 |
Сойдётся только если суммировать амплитуды всех гармоник этого шума, гармоник во всей полосе частот, занимаемой этим шумом. Если шум нарисован, то его ширина спектра скорее всего бесконечна, а при FFT будет выделена только заданная шириной окна полоса частот, и это условие не выполнится, сумма ничему соответствовать не будет.
0
|
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
|
|
09.03.2025, 18:16 | 10 |
Ия о том же, только не столь научно и внятно
![]()
0
|
Native x86
![]() ![]() 6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
|
|
10.03.2025, 15:00 [ТС] | 11 |
Да.
Квадратичное усреднение используется для преобразования комплексного спектра в реальный. Далее суммирую квадраты полученных элементов спектра в полосе сигнала, квадраты элементов за пределами полосы. Делю первое на второе, получаю С/Ш. Все, что я изначально сделал неправильно -- это забыл возвести каждый элемент в квадрат перед суммированием. В стартовом сообщении есть примеры волн. Сигнал, шум, и результат смешивания. Ширина спектра именно "нарисованного" шума жестко ограничена частотой дискретизации. Это не оцифровка реального шума без ФНЧ. Результат работы алгоритма на скрине (входной сигнал из первого сообщения), мне этого более чем достаточно.
0
|
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
|
|
10.03.2025, 21:13 | 12 |
Я к тому, что бывает синус с амплитудой. Бывает меандр с амплитудой. А шум - это хаотично совершаемые колебания. Параметра частоты нет. Параметра амплитуды (имхо) тоже нет. Шум определяется статистическими характеристиками.
PS: Хотя повторю, про амплитуду, это я так считаю, но в учебниках определенное понятие амплитуды шума встречается. Добавлено через 1 минуту ![]()
0
|
5446 / 2807 / 563
Регистрация: 07.11.2019
Сообщений: 4,611
|
|
11.03.2025, 06:27 | 13 |
ViktorArs, это у гауссовского белого шума нет амплитуды, а, например, у белого шума с равномерным распределением - есть.
0
|
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
|
|
11.03.2025, 08:07 | 14 |
Да понятно. Просто у меня к этому отношение не очень. Любой шум - понятие статистическое, и применение к нему понятий четко детерминированных вызывает диссонанс.
0
|
11.03.2025, 08:07 | |
Помогаю со студенческими работами здесь
14
Чем отличается вычисление БПФ с прореживанием по времени и частоте? Вычисление коэффициентов БИХ фильтров Вычисление значения функции Z на MCS-51
Вычисление полинома 3-й степени в Quartus II Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
|
Предсказание ветвлений - путь к высокопроизводительному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
|
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
|
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
|
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
|
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
|
Позиционирование Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
|
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
|
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
|
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
|