![]() |
|
![]() ![]() ![]() |
|
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
subj
вообщем просто надоумьте мож я че не так понимаю. сделал FFT звукового сигнала, построил спектр, сделал отрисовку волны. все ок. а как посчитать THD? из FFT это делается? или как то иначе. сложить квадраты высших гармоник, поделить на квадрат основной гармоники, как то так вроде... а реально как? |
|||
|
||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Сделать это можно согласно определению. Расчитываете мощность основной и высших гармоник, суммируете и делите. Можно это делать в частотной области через ДПФ, можно во временной пропуская сигнал через набор фильтров. Как вам больше нравится
![]() |
|||
|
||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
так это все теория. вот есть у меня ряд (таблица) после fft, это набор частот (с соответствующим шагом) и соответствующие им амплитуды. где тут основная, а где высшая гармоника? |
|||
|
||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Надо вначале определится что это за сигнал. Основная гармоника может быть один отсчёт FFT а может несколько, зависит от того что подали на вход. Вы путаете спектральные отсчёты FFT и гармоники сигнала, это разные вещи. Для измерения THD удобно через систему пропусить гармонический сигнал и на нём проводить измерения. THD нельзя измерять на случайном сигнале, надо знать что подаётся на вход системы.
|
|||
|
||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
на входе синусоидный сигнал.
например 36Гц . дальше что? это я читал http://en.wikipedia.org/wiki/Total_harmonic_distortion чето не совсем понимаю как это запрограммировать... получаю оцифрованные данные со зв. карты, делаю FFT, рисую спектр, рисую волну. а как из этих данных посчитать THD не понимаю чето... Это сообщение отредактировал(а) pethead - 29.3.2011, 10:04 |
|||
|
||||
vedun |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Если на входе 36 Гц то надо из сигнала выделить основную гармонику (36 Гц), вторую (72 Гц), третью (108 Гц) и так далее. Сделать это можно с помощью цифровых фильтров (это пожалуй будет самый простой вариант). Надо рассчитать фильтр нижних частот(ФНЧ) с частотой среза ~15...20 Гц и достаточным подавлением на отстройке 36 Гц (от этого зависит точность и диапазон измерения THD). Далее берёте свой сигнал и умножаете на комплексную экспоненту частоты 36 Гц, после умножения фильтруете сигнал, и на выходе получаем отсчёты амплитуды основной гармоники. Далее делаем те же операции но умножаем на частоты 72, 108 и т.д. Гц. Далее считаете мощности гармоник, и по формуле находим THD. Коэффициенты фильтра можно рассчитать в матлабе или аналогичной программе. Как получить отсчёты комплексной экспоненты и фильтровать сигнал надо писать ?
|
|||
|
||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
если не трудно напишите, но у меня цель все это сделать программно, без матлабов.
и еще: нельзя ли к расчету применить уже готовое преобразование фурье? может есть где то готовый\полуготовый код по расчету THD? на любом языке, главное чтобы работал с оцифрованным сигналом. http://alglib.sources.ru/ в этом случае не может помочь? |
|||
|
||||
vedun |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Если хотите считать через спектр сигнала, то тогда так:
Надеюсь я понятно изложил. Если что не ясно спрашивайте.
Если хотите без расчёта фильтра то считайте через БПФ, как я написал.
Можно, как это сделать я написал выше. Только мне не ясно будет при этом выигрыш по скорости или проигрыш (считать неохота ![]()
Насчёт есть ли код это я не знаю, не интересовался. С alglib не работал. Это сообщение отредактировал(а) vedun - 30.3.2011, 15:22 |
||||||
|
|||||||
Pavia |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
vedun,
А если не через фильтры, а напрямую через гармонический анализ? Лучше же должно быть.
Да и вообще зачем фильтры и окна? 2^14 как-то понадежнее. // Точность вычислений. При каждой операции мы теряем часть данных. // Это часть маленькая, но так как элементов много она накапливается. // Оценка дана в http://algolist.manual.ru/maths/long.zip // Который ссылается на источник http://www.daemonology.net/tricl/fftconv_c.ps
Как по мне посчитать переходы через 0. Что позволит определить основную частоту более точно. Заодно засечь начало первого и конец последнего периодов. PS. Поправите меня, если я неправ. |
||||
|
|||||
vedun |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
Pavia насколько я разбираюсь в вопросе (гуру себя не считаю), то по сути это одно и тоже. Ведь алгоритм ДПФ это и есть последовательный перенос спектра с частоты Fd/N, 2*Fd/N, 3*Fd/N.... в 0, фильтрация ФНЧ (характеристика фильтра канала ДПФ вроде похожа на sin(x)/x но не она, какой там фильтр получается по памяти не скажу, но уровень АЧХ спадает достаточно медленно) и децимация в N раз. Зато если сразу работать по нужным частотам то не надо интерполировать спектр для поиска максимума.
Если не применять оконную функцию то надо брать большую размерность ДПФ чтобы избежать влияния гармоник друг на друга из за растекания спектра. Если к примеру уровень 2-й гармоники -80 дБ относительно 1-й то надо чтобы при измерении её уровня 1-ая была хотя бы на 10..15 дБ ниже 2-й, то есть подавление фильтра при отстройке 36 Гц должно быть 95 дБ. Я это на глазок по спектрам подобрал. Ещё непонятно насколько высок уровень нелинейных искажений у pethead и с какой точностью ему надо мерять THD, поэтому что либо советовать по окнам и размерности ДПФ сложно.
Я смотрел по спектрограммам на глаз, может хватит и 2^14.
Спасибо за ссылки, пока посмотрел по диагонали, как будет время изучу подробнее. Что могу сказать насчёт точности, построил спектр синусоиды с длиной ДПФ 2^24 степени (все вычисления с двойной точностью, тип double в С). Я не заметил чтобы ошибки сильно накопились (смотри рис.). Стоит одна честная палка 0 дБ остальные на уровне не более -320 дБ. По моему этого достаточно. Если в 2-х словах то как то так. ![]() ![]() |
||||||||
|
|||||||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
||||
|
||||
vedun |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 23.12.2010 Репутация: 2 Всего: 2 |
И это правильно, сам такой ![]()
Например в книге Сергиенко "Цифровая обработка сигналов" стр. 270. Ну и классика жанра Рабинер, Голд. Сейчас вот туда заглянул (начиная со стр. 421) и обнаружил для себя новые вещи. Вот ещё статья о применении окон, на dsplib.ru вообще неплохая подборка статей по ДПФ и фильтрации. |
||||
|
|||||
pethead |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 13.11.2007 Репутация: нет Всего: нет |
спасибо. будем пробовать
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |