Обчислення PDF-сигналу з його зразків


27

Деякий час тому я намагався різними способами намалювати цифрові форми хвиль , і одна з речей, яку я спробувала, була замість стандартного силуету амплітудної оболонки, щоб відобразити її більше як осцилоскоп. Ось як виглядають синусоїдальна та квадратна хвиля в масштабі:

введіть тут опис зображення

Наївний спосіб зробити це:

  1. Розділіть аудіофайл на один відрізок на горизонтальний піксель у вихідному зображенні
  2. Обчисліть гістограму амплітуд вибірки для кожного шматка
  3. Накресліть гістограму за яскравістю у вигляді стовпчика пікселів

Це дає щось подібне: введіть тут опис зображення

Це добре працює, якщо є багато зразків на шматок, і частота сигналу не пов'язана з частотою вибірки, але не інакше. Наприклад, якщо частота сигналу є точним підмножиною частоти дискретизації, наприклад, зразки завжди відбуватимуться з однаковою амплітудою в кожному циклі, а гістограма буде лише в декількох точках, хоча фактичний реконструйований сигнал існує між цими точками. Цей синусоїд повинен бути таким же гладким, як і вліво, але це не тому, що він рівно 1 кГц, і вибірки завжди виникають приблизно в одних і тих же точках

введіть тут опис зображення

Я намагався збільшити кількість балів, щоб збільшити кількість балів, але це не вирішує проблему, а просто допомагає згладити речі в деяких випадках.

Тож, що мені дуже хотілося, це спосіб обчислити справжній PDF (ймовірність проти амплітуди) безперервного реконструйованого сигналу з його цифрових зразків (амплітуда проти часу). Я не знаю, який алгоритм використовувати для цього. Загалом, PDF функції є похідною від її зворотної функції .

PDF гріха (x): ddxarcsinx=11x2

Але я не знаю, як обчислити це для хвиль, де обернена є багатозначною функцією , або як це швидко зробити. Розбийте його на гілки і обчисліть обернену кожну, візьміть похідні та підсумовуйте їх усі разом? Але це досить складно і, мабуть, є простіший спосіб.

Цей "PDF інтерпольованих даних" також застосовний до спроби я зробив оцінку щільності ядра GPS-треку. Він повинен був бути кільцеподібним, але оскільки він дивився лише на зразки і не враховував інтерпольованих точок між зразками, KDE виглядав більше як горб, ніж кільце. Якщо зразки - це все, що ми знаємо, то це найкраще, що ми можемо зробити. Але зразки - це не все, що ми знаємо. Ми також знаємо, що між зразками є шлях. Для GPS немає ідеальної реконструкції Nyquist, як це є для смугового звуку, але основна ідея все-таки застосовується, з певними здогадами щодо функції інтерполяції.


Чи є у вас приклад багатозначної функції, яка вас цікавить? Вам, ймовірно, доведеться оцінити його за розрізом гілки, який має найбільш сенс для ваших фізичних даних.
Лорем Іпсум

Вас більше цікавлять способи намалювати такий вид сюжету, чи сюжет є лише мотивацією до питання про обчислення PDF?
datageist

@yoda: Добре, що вищевказана функція для синусоїди виявляється, взявши лише половину циклу, перевернувши та взявши похідну, оскільки кожен півцикл має той самий PDF, що і наступний. Але щоб отримати значення для всього довільного звукового сигналу, ви не можете зробити це припущення. Думаю, вам потрібно розділити його на "відрізки гілок", взяти PDF кожного по черзі та підсумувати їх усі разом?
ендоліт

@datageist: Хм. Мене цікавлять способи намалювати такий тип сюжету, але такий сюжет - це PDF. Ярлик, який дає такий самий або дуже схожий результат, добре.
ендоліт

@endolith, О так, я розумію. Лише питання про акцентування дійсно (тобто, які види ярликів є розумними).
datageist

Відповіді:


7

Інтерполюйте в кілька разів початкову швидкість (наприклад, 8-кратну вибірку). Це дозволяє приймати кусочно лінійний сигнал. Цей сигнал буде мати дуже малу помилку порівняно з нескінченною роздільною здатністю, безперервним інтерполяцією сигналу sin (x) / x.

Припустимо, що у кожної пари значень зразка є безперервний рядок від одного значення до іншого. Використовуйте всі значення між. Це дає вам один тонкий горизонтальний зріз від y1 до y2, який потрібно накопичити в PDF довільної роздільної здатності. Кожен прямокутний зріз вірогідності повинен бути розміщений до області 1 / n зразків.

Використання лінії між зразками, а не самим зразком перешкоджає PDF-накопичувачу, навіть у тому випадку, коли існує принципова залежність між періодом вибірки та формою хвилі.


Я написав функцію для лінійно-інтерпольованої гістограми, але вона хитра. Чи знаєте ви існуючий код для цього?
ендоліт

Лінійна інтерполяція робить величезну різницю для більшості форм хвиль навіть без надмірного звуження. Синус 1 кГц зараз виглядає як синус 997 Гц. Замість просто горизонтальних ліній за значеннями вибірки, тепер це горизонтальні кольорові смуги між ними. При надмірному ущільненні смуги також розгладжуються. З перекомплектуванням FFT і деяким перекриттям з сусідніми фрагментами я повинен мати змогу змусити його досягти справжніх пісочних піків. Мені потрібно зробити швидше інтерпольований код гістограми ...
ендоліт

Я повністю переписав мій сценарій для цього, і я думаю , що я отримав гистограмму і згладжування права на цей раз: gist.github.com/endolith/652d3ba1a68b629ed328
ендоліти

Остання версія на github.com/endolith/scopeplot
ендоліти

7

Те, що я б пішов, - це, по суті, "випадковий перепробірник" Джейсона Р, що, в свою чергу, є реалізацією на основі пресампльованого сигналу стохастичної вибірки йоди.

Я використовував просту кубічну інтерполяцію до однієї випадкової точки між кожними двома зразками. Для примітивного синтезного звуку (занепад від насиченого недіапазонного сигналу квадратного типу + навіть гармонік до синусу) це виглядає приблизно так:

Синтезований PDF із випадковим перекомпонованим синтезом

Порівняймо його з версією з більш високим зразком,

введіть тут опис зображення

і дивна з тим самим зразком, але не інтерполяція.

введіть тут опис зображення

Помітним артефактом цього методу є простріл у домені, що нагадує квадрат, але це фактично те, що PDF-сигнал відфільтрованого за допомогою синк-сигналу (як я вже сказав, мій сигнал не обмежений) також виглядатиме і представляє сприйняту голосність набагато краще ніж піки, якби це був звуковий сигнал.

Код (Haskell):

cubInterpolate vll vl v vr vrr vrrr x
    = v*lSpline x + vr*rSpline x
      + ((vr-vl) - (vrr-vll)/4)*ldSpline x
      + ((vrr-v) - (vrrr-vl)/4)*rdSpline x
     where lSpline x = rSpline (1-x)
           rSpline x = x*x * (3-2*x)
           ldSpline x = x * (1 + x*(x-2))
           rdSpline x = -ldSpline (1-x)

                   --  rand list   IN samples  OUT samples
stochasticAntiAlias :: [Double] -> [Double] -> [Double]
stochasticAntiAlias rs (lsll:lsl:lsc:lsr:lsrr:[]) = []
stochasticAntiAlias (r:rLst) (lsll:lsl:lsc:lsr:lsrr:lsrrr:t)
    = ( cubInterpolate lsll lsl lsc lsr lsrr lsrrr r )
          : stochasticAntiAlias rLst (lsll:lsl:lsc:lsr:lsrr:lsrrr:t)

rand list - список випадкових змінних у діапазоні [0,1].


1
Виглядає дивовижно. +1 для коду Haskell
datageist

Так, це повинно перевищувати значення вибірки. Я фактично планував мати пікове значення для кожного піксельного стовпчика, також, можливо, намальованого по-різному, виходячи з максимальних пікопробних піків, а не лише на максимальних зразках. Форми хвиль на зразок flic.kr/p/7QAScX показують, чому це потрібно.
ендоліт

"Версія з більш високим зразком" ви маєте на увазі, що вона є вибірковою, але все ж рівномірно вибірковою? І це сині крапки?
ендоліт

1
@endolith Це просто оригінальна форма хвилі, розрахована в першу чергу за вищою швидкістю вибірки. По суті, як сині точки являють собою звук, відібраний на частоті 192 кГц, а самі нижні жовті являють собою зграйний зразок, що робиться по-новому до 24 кГц. Верхні жовті точки stochasticAntiAliasцього. Але версія з більш високою вибіркою дійсно є рівномірною в обох випадках.
Лише близько

5

Хоча ваш підхід теоретично правильний (і його потрібно трохи змінити для немонотонних функцій), обчислити оберненість родової функції вкрай важко. Як ви кажете, вам доведеться мати справу з точками відділення та зрізанням гілок, що можливо, але ви серйозно не хотіли б цього робити.

Як ви вже згадували, регулярні вибірки відбирають один і той же набір балів і, як такий, дуже чутливі до поганих оцінок в регіонах, де він не проводить вибірку (навіть якщо критерій Найквіста задоволений). У цьому випадку відбір проб протягом більш тривалого періоду також не допомагає.

Взагалі, коли ми маємо справу з функціями щільності ймовірності та гістограмами, набагато краща ідея думати з точки зору стохастичної вибірки, ніж звичайна вибірка (див. Пов'язану відповідь для вступу). Провівши вибірковий аналіз на стохастичному рівні, ви можете переконатися, що кожна точка має однакову ймовірність потрапляння у "удар" і є набагато кращим способом оцінювати pdf.

f(x)=sin(20πx)+sin(100πx)fs=1000fN=1001000 вибірки (рівномірний розподіл) за секунду (я тут не використовую Гц, тому що це означає інше значення) протягом 30 секунд дає графік праворуч (те саме бінінг).

Ви легко бачите, що, хоча це шумно, це набагато краще наближення до фактичного PDF, ніж той, що праворуч, який показує нулі через кілька інтервалів та великі помилки в кількох інших. Маючи більший час спостереження, ви можете зменшити дисперсію праворуч, зрештою переходячи до точного PDF (пунктирна чорна лінія) в межах великих спостережень.

введіть тут опис зображення


1
"надзвичайно важко обчислити обернену загальну функцію" Ну, це не така функція, як серія зразків, тому пошук оберненого просто змінює координати x і y зразків, а потім перекомпонується на відповідність нова система координат. Я ніяк не можу змінити вибірку. Ми говоримо про наявні дані, створені за допомогою рівномірної вибірки.
ендоліт

4

Оцінка щільності ядра

Одним із способів оцінювання PDF форми сигналу є використання оцінювача щільності ядра .

x(n)K(x)δ(xx(n))P^

P^(x)=n=0NK(xx(n))

Оновлення: цікава додаткова інформація.

x(n)n=0,1,...,N1X(k)

X(k)=n=0N1x(n)eȷ2πnk/N

X(k)eȷ2πnk/N

x(n)=1Nk=0N1X(k)eȷ2πnk/N

Так здогад на те , що ви aftermight бути згортка всіх PDF - файлів кожного компонент тусовки Фур'є:

|X(k)|11x2

X(k)x(n)

Хоча потрібно більше думки!


Я подумав про це, але оцінка щільності використовується для оцінки невідомої функції щільності ймовірності. Через теорему дискретизації Найкіста точно відома вся форма хвилі, і точна функція густини ймовірностей також повинна бути відома. Я добре з оцінкою, якщо це компроміс зі швидкістю та точністю, але повинен бути спосіб вийти з нього фактичного PDF. Можливо, реконструйовану форму хвилі можна зробити, поставивши функцію sinc на кожен зразок і підсумовуючи їх разом. Чи можна створити PDF, використовуючи PDF функції sinc як ядро? Я не думаю, що це працює так.
ендоліт

Мовляв, я не думаю, що це вирішує проблему, коли зразки сигналів є підмножиною частоти вибірки. Він не враховує реконструйовану форму хвилі між зразками, чи не так? Він просто розмиває кожну точку в PDF, щоб спробувати заповнити прогалини. У мене була аналогічна проблема зі спробою провести оцінку щільності ядра GPS-сліду, оскільки вона не враховує значення між зразками.
ендоліт

4

Як ви вказали в одному зі своїх коментарів, було б привабливо мати можливість обчислити гістограму реконструйованого сигналу, використовуючи лише зразки та PDF функції sinc, що інтерполює смугові сигнали. На жаль, я не думаю, що це можливо, оскільки в гістограмі синка немає всієї інформації, яку має сам сигнал; вся інформація про позиції часової області, де зустрічається кожне значення, втрачається. Це унеможливлює моделювання того, як масштабовані та затримані у часі версії sinc підсумовуватимуться, що саме ви хочете, щоб обчислити гістограму "безперервної" або вгорі вибіркової версії сигналу, не роблячи фактично підбір проб.

Я думаю, що вам залишається інтерполяція як найкращий варіант. Ви вказали на кілька питань, які заважали вам цього зробити, які, на мою думку, можна вирішити:

  • Витрати на обчислення: це, звичайно, завжди є відносною проблемою, залежно від конкретної програми, для якої ви хочете використовувати це. На основі посилання, яке ви опублікували в зібраній галереї візуалізації, я припускаю, що ви хочете зробити це для візуалізації звукових сигналів. Незалежно від того, чи цікавить вас це програма в режимі реального часу або в режимі офлайн, я б радив вам скласти прототип ефективного інтерполятора і перевірити, чи справді це занадто дорого. Поліфазне перекомпонування - це хороший спосіб зробити це гнучким (можна використовувати будь-який раціональний фактор).

  • π


Але що робити, якщо форма хвилі становить 44,1 / π кГц? :) Хоча це гарна порада. Чи існує таке поняття, як випадкове перекомпонування? Або дійсно, я гадаю, що б чудово працювало, щоб це було нерівномірне повторне вибіркове оформлення, таким чином, щоб нові зразки ідеально вміщувались у відрізки в розмірі y, а не були рівномірно розміщені в розмірі x. Не впевнений, чи є спосіб зробити це
endolith

2
Ви могли б легко реалізувати "випадковий" респромплер за допомогою структури Farrow. Це схема, яка допускає довільну дробову затримку вибірки шляхом інтерполяції з використанням многочленів (часто кубічних). Ви можете підтримувати міжпробний фазовий акумулятор, подібний до використовуваного в NCO , який збільшується псевдовипадковими частками інтервалу вибірки для кожного вихідного (повторного відбору) вибірки. Значення акумулятора використовується як вхід до інтерполятора Farrow, визначаючи величину дробової затримки для кожного виходу.
Джейсон R

Хм, для уточнення, Farrow - це просто оптимізована процесором / пам'яттю версія звичайної старої поліноміальної інтерполяції?
ендоліт

1
Так. Це просто ефективна структура для здійснення довільної дробової затримки на основі поліномів.
Джейсон R

Кубічна інтерполяція - це лише наближення. Я хочу знати справжні пікопробні вершини, і це, здається, не працює добре на крайніх вершинах: stackoverflow.com/questions/1851384/… Насправді, здається, що нескінченна серія з розривом, як [..., -1, 1, -1, 1, 1, -1, 1, -1, ...] дасть нескінченний міжпробний пік, хоча я не впевнений, наскільки це буде мати значення на практиці.
ендоліт

0

Потрібно згладити гістограму (це дасть аналогічні результати, як використання методу ядра). Як саме потрібно проводити розгладження, потрібно експериментувати. Можливо, це також можна зробити за допомогою інтерполяції. На додаток до вирівнювання, я вважаю, що ви також отримаєте покращені результати, якщо покращити форму сигналу таким чином, щоб частота вибірки була «значно вищою», ніж найвища частота у вашому введенні. Це повинно допомогти у "хитрому" випадку, коли синусова хвиля пов'язана з частотою вибірки таким чином, що заповнюється лише кілька бункерів гістограми. Якщо взяти до крайнього значення, достатньо висока частота вибірки повинна дати вам гарні сюжети без згладжування. Таким чином, збільшення вибору в поєднанні з деяким вигладжуванням повинно дати кращі сюжети.

Ви наводите приклад тону 1 кГц, де сюжет не такий, як ви очікували. Ось моя пропозиція (код Matlab / Octave)

pixels_vertical = 100;
% This needs to be tuned to your configuration and acceptance
upsampling_factor = 16*(pixels_vertical/100); 
fs_original = 48000;
fsine = 1000; % in Hz
fs_up = upsampling_factor*fs_original;
duration = 1; % in seconds
x = sin(2*pi*fsine*[0:duration*fs_up]/fs_up);
period_in_samples = fs_up/fsine;
hist_points = linspace(-1,1,pixels_vertical);
istart = 1;
iend   = period_in_samples;
pixel_values = hist(x(istart:iend), hist_points);
% smooth pixel values
[b,a] = butter(2,0.2);
pixel_values_smooth = filtfilt(b,a,pixel_values);
figure;hold on;
plot(hist_points, pixel_values);
plot(hist_points, pixel_values_smooth,'r');

За ваш тон 1000 Гц ви отримуєте це введіть тут опис зображення

Що вам потрібно зробити, це налаштувати вираз upsampling_factor на свої уподобання.

Все ще не на 100% впевнений, які саме ваші вимоги. Але використовуючи вищезазначений принцип посилення та згладжування, ви отримаєте це для 1 кГц (зроблено за допомогою Matlab). Зауважте, що в сирої гістограмі багато бункерів з нульовими зверненнями.

введіть тут опис зображення


Так, це дійсно потребує певного типу інтерполяції як частини алгоритму. Згладжування гістограми не обійдеться, оскільки гістограма має дискретні точки, а не реконструйовану форму хвилі. Єдиний спосіб, який би підходив до розгортання, це зробити, якщо я зроблю це до моменту, коли є багато більше зразків, ніж вертикальних пікселів, але це важкий метод грубої сили, який займає тривалий час.
ендоліт

або обчислення ефекту інтерполяції на вихід без фактичної інтерполяції
ендоліт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.