Native x86
Эксперт Hardware
 Аватар для quwy
6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
1

Вычисление SNR

07.03.2025, 01:31. Показов 1015. Ответов 13
Метки fft, snr (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Есть тут знающие люди, которые подскажут алгоритм измерения SNR?

Сейчас делаю так:
1. Раскладываю буфер по Фурье
2. Вычисляю модули амплитуд спектральных составляющих по формуле sqrt(sqr(buf[even]) + sqr(buf[odd])) / Count
3. Суммирую амплитуду всех спектральных составляющих кроме контрольной
4. Делю амплитуду контрольной частоты на сумму из предыдущего пункта

В качестве источника сигнала у меня сгенерированный звуковым редактором файл, в котором смешан синус 1000 Гц с амплитудой 0.2 (контрольная частота) и белый шум с той же амплитудой:
Вычисление SNR


На спектре, который строит моя программа, это выглядит так:
Вычисление SNR


Как видно, амплитуда контрольной частоты соответствует заданному уровню. Шумы размазаны по спектру и их почти не видно.

Но результат расчета SNR получается в районе 0.03, хотя должен быть равен единице. То есть суммарная амплитуда шумовых составляющий намного выше, чем амплитуда контрольного сигнала. Хотя если судить по уровню контрольного сигнала на спектре, вычисляется амплитуда правильно, утечки тоже почти нет.

Куда копать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2025, 01:31
Ответы с готовыми решениями:

[VHDL] Вычисление арктангенса угла по заданной таблице тангенсов
Столкнулся с такой задачей: Требуется написать блок вычисления арктангенса угла по заданной таблице тангенсов. Таблица определена в виде...

Intel 8080 (КР580ВМ80А). Вычисление модуля числа
Помогите пожалуста,нужно сложить програму вычесления модуля числа, что находится в памяти за адресой 0ВАА0Н.для i8080.подскажите как...

EWB. Вычисление разности кодов на АЛУ 74181
В Electronics Workbench, используя микросхему АЛУ 74181 и два 4-х разрядных регистра 74175 (Quad D-type FF (clr)) собрать схему вычисления...

13
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
07.03.2025, 02:02 2
Что такое
Цитата Сообщение от quwy Посмотреть сообщение
/ Count
в расчёте модуля амплитуды спектральной составляющей?
0
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
07.03.2025, 08:22 3
Цитата Сообщение от quwy Посмотреть сообщение
То есть суммарная амплитуда шумовых составляющий намного выше, чем амплитуда контрольного сигнала.
Это что значит? Вы сумму всех частот делите на одну частоту? (топорно формулировал, но думаю ясно)

Добавлено через 1 минуту
Цитата Сообщение от quwy Посмотреть сообщение
Но результат расчета SNR получается в районе 0.03, хотя должен быть равен единице.
Как определили что д.б. равен 1?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
07.03.2025, 14:06  [ТС] 4
Цитата Сообщение от i8085 Посмотреть сообщение
Что такое
Нормализация амплитуд, чтобы результаты разложения были в диапазоне от 0 до 1.
Правда, тут забыл дописать, что еще на 2 умножается, т.к. обрабатывается половина спектра (вторая половина -- зеркальная и ее игнорируем):

https://www.cyberforum.ru/cgi-bin/latex.cgi?2\frac{\sum_{0}^{count/2-1}\sqrt{{buf[even]}^{2}+{buf[odd]}^{2}}}{count}

Не по теме:

был же когда-то нормальный редактор формул, теперь эта неюзабельная хрень



Цитата Сообщение от ViktorArs Посмотреть сообщение
Вы сумму всех частот делите на одну частоту?
Грубо говоря -- да (на самом деле там некоторая полоса частот, плюс вычитаю шумы из-под полезного сигнала и плюсую их к остальным шумам, но это на результат влияет не сильно).

Цитата Сообщение от ViktorArs Посмотреть сообщение
Как определили что д.б. равен 1?
Я сам сформировал исходный сигнал из синусоиды и шума равных амплитуд.

Добавлено через 7 минут
А вопрос решен, я забыл в квадрат взять элементы спектра перед суммированием. То есть просуммировал амплитуды, а не мощности. После добавления квадратов отношение стало стремиться к 1.
0
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
07.03.2025, 16:41 5
Что такое
Цитата Сообщение от quwy Посмотреть сообщение
/ Count
в расчёте модуля амплитуды спектральной составляющей?
Цитата Сообщение от quwy Посмотреть сообщение
Нормализация амплитуд
Как вы считаете Count?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
07.03.2025, 19:29  [ТС] 6
Цитата Сообщение от i8085 Посмотреть сообщение
Как вы считаете Count?
Это количество элементов спектра на выходе FFT.
0
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
07.03.2025, 20:50 7
Цитата Сообщение от quwy Посмотреть сообщение
количество элементов
Количество точек в буфере, что ли? Или количество чего? Как считается Count? Чему равен в вашем примере?
0
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
07.03.2025, 22:40 8
Цитата Сообщение от quwy Посмотреть сообщение
Грубо говоря -- да (на самом деле там некоторая полоса частот, плюс вычитаю шумы из-под полезного сигнала и плюсую их к остальным шумам, но это на результат влияет не сильно).
Даже если просто в вики посмотрть, там написано - "среднеквадратичное". Хотя что-то подобное вы после написали. Так СКВ или нет?
Цитата Сообщение от quwy Посмотреть сообщение
Я сам сформировал исходный сигнал из синусоиды и шума равных амплитуд.
Что такое шум с амплитудой к примеру 5 вольт? Чисто мое мнение амплитуда и шум вещи не особо совместимые. Однако в понятие такое вводится. Но возникает вопрос и как же конкретно вы его задавали? Если согласно определению, которое всетаки имеет место, то вероятно 1 не получится. Хотя справедливости ради надо сказать, что никогда этим вопросом не занимался, и не рассчитывал. Чисто интуитивные рассуждения.
0
3586 / 2502 / 566
Регистрация: 11.09.2009
Сообщений: 9,071
07.03.2025, 23:09 9
Цитата Сообщение от ViktorArs Посмотреть сообщение
шум с амплитудой ... то вероятно 1 не получится
Сойдётся только если суммировать амплитуды всех гармоник этого шума, гармоник во всей полосе частот, занимаемой этим шумом. Если шум нарисован, то его ширина спектра скорее всего бесконечна, а при FFT будет выделена только заданная шириной окна полоса частот, и это условие не выполнится, сумма ничему соответствовать не будет.
0
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
09.03.2025, 18:16 10
Ия о том же, только не столь научно и внятно
0
Native x86
Эксперт Hardware
 Аватар для quwy
6435 / 3539 / 992
Регистрация: 13.02.2013
Сообщений: 11,209
10.03.2025, 15:00  [ТС] 11
Цитата Сообщение от i8085 Посмотреть сообщение
Количество точек в буфере, что ли?
Да.

Цитата Сообщение от ViktorArs Посмотреть сообщение
Так СКВ или нет?
Квадратичное усреднение используется для преобразования комплексного спектра в реальный. Далее суммирую квадраты полученных элементов спектра в полосе сигнала, квадраты элементов за пределами полосы. Делю первое на второе, получаю С/Ш.

Все, что я изначально сделал неправильно -- это забыл возвести каждый элемент в квадрат перед суммированием.

Цитата Сообщение от ViktorArs Посмотреть сообщение
Что такое шум с амплитудой к примеру 5 вольт? Чисто мое мнение амплитуда и шум вещи не особо совместимые.
В стартовом сообщении есть примеры волн. Сигнал, шум, и результат смешивания.

Цитата Сообщение от i8085 Посмотреть сообщение
Если шум нарисован, то его ширина спектра скорее всего бесконечна, а при FFT будет выделена только заданная шириной окна полоса частот, и это условие не выполнится, сумма ничему соответствовать не будет.
Ширина спектра именно "нарисованного" шума жестко ограничена частотой дискретизации. Это не оцифровка реального шума без ФНЧ.

Результат работы алгоритма на скрине (входной сигнал из первого сообщения), мне этого более чем достаточно.
Вычисление SNR
0
135 / 109 / 29
Регистрация: 09.01.2018
Сообщений: 744
10.03.2025, 21:13 12
Цитата Сообщение от quwy Посмотреть сообщение
В стартовом сообщении есть примеры волн. Сигнал, шум, и результат смешивания.
Я к тому, что бывает синус с амплитудой. Бывает меандр с амплитудой. А шум - это хаотично совершаемые колебания. Параметра частоты нет. Параметра амплитуды (имхо) тоже нет. Шум определяется статистическими характеристиками.
PS: Хотя повторю, про амплитуду, это я так считаю, но в учебниках определенное понятие амплитуды шума встречается.

Добавлено через 1 минуту
Цитата Сообщение от quwy Посмотреть сообщение
мне этого более чем достаточно
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2025, 08:07
Помогаю со студенческими работами здесь

Чем отличается вычисление БПФ с прореживанием по времени и частоте?
Мне для зачета задали десять вопросов, и на вот эти я не могу ответить. Подскажите. 1) Я вложил картинку(справа полюса, слева нули), в...

Вычисление коэффициентов БИХ фильтров
Добрый день! В настоящее время ушел в обработку дискретных сигналов (аудиозаписей). Никак не могу разобраться с тем, как рсчитать...

Вычисление значения функции Z на MCS-51
(НА ЯЗЫКЕ C) Вычислить значение функции Z(X=0...255, Y=0...255): Z= 1,x - y - четное o,x - y -нечетное

Вычисление логической функции в МК AT90S2313
В ячейке SRAM з ADR1 (C4) расположен код (3F). Записать в кодах МК AT90S2313 програму, которая выполняет вычисление заданой логической...

Вычисление полинома 3-й степени в Quartus II
Совсем новичок в ПЛИС а особенно в их математике. Подскажите пожалуйста как оптимальнее рассчитать полином вида: p = c0 + x*(c1 +...


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

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

Новые блоги и статьи
Циклы 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-приложений. Суть этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru