що згладжується в дуже базових умовах


17

Що таке розгладження і як це зробити?

У мене є масив у Matlab, який є спектром величини мовного сигналу (величина 128 балів FFT). Як згладити це за допомогою ковзної середньої? З того, що я розумію, я повинен брати розмір вікна певної кількості елементів, брати середній розмір, і це стає новим 1-м елементом. Потім змістіть вікно праворуч на один елемент, перейдіть середнє значення, яке стає другим елементом, і так далі. Це насправді це працює? Я не впевнений у собі, оскільки якщо я це зроблю, у моєму кінцевому результаті у мене буде менше 128 елементів. Отже, як це працює і як це допомагає згладити точки даних? Або є інший спосіб я згладжувати дані?

EDIT: посилання на подальше запитання


для спектра, напевно, ви хочете, щоб середнє значення (у часовому вимірі) було багато спектрів, а не середнє значення по осі частоти одного спектру
ендоліт

@endolith обидва є дійсними методиками. Усереднення в частотній області (іноді її називають Даніельською періодограмою) - це те саме, що вікно у часовій області. Усереднення декількох періодограм ("спектрів") - це спроба імітувати усереднення ансамблю, необхідне для справжньої періодограми (це називається періодограма Вельха). Також, що стосується семантики, я б стверджував, що "згладжування" - це невипадкова фільтрація низьких частот. Див. Фільтрування Kalman проти згладжування Kalman, фільтрація Wiener v згладжування Wiener тощо. Існує нетривіальна відмінність і це залежить від реалізації.
Брайан

Відповіді:


23

Згладжування може бути здійснено різними способами, але в дуже основних і загальних рисах це означає, що ви навіть подаєте сигнал, змішуючи його елементи з сусідами. Ви трохи змащуєте / розмиваєте сигнал, щоб позбутися від шуму. Наприклад, дуже простою технікою згладжування було б перерахувати кожен елемент сигналу f(t)до 0,8 від початкового значення плюс 0,1 кожного з його сусідів:

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

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

Ваги, які ви використовуєте в цій функції перерахунку, можна назвати ядром . У вашому випадку повинна виконуватись одновимірна Гауссова функція або будь-яке інше базове ядро.

Хороший приклад одного виду згладжування:

Вгорі: не згладжений сигнал
Внизу: згладжений сигнал

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

Приклади кількох ядер:

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


так це зважене рухоме середнє? Це називається розміром вікна 3? Що з 1-м і останнім елементом? І як би це було змінено, якщо у мене є масив із 128 елементів і я хочу використовувати вікно з 16 або 32 елементів?

@ user13267: Так, можна сказати, що згладжує ядро ​​- це зважена середня середня величина. Якщо ви використовуєте рівномірне ядро ​​(див. Друге зображення), це просто звичайна ковзна середня. Ви маєте рацію щодо розміру вікна. Для роботи з ребрами є три основні підходи: 1) занулення ваших даних, 2) повторення останнього значення, 3) дзеркальне відображення сигналу. У всіх випадках ви робите кілька даних про вигляд, щоб ваше ядро ​​не потрапляло в небуття.
Junuxx

не вважатиметься, що нульове набивання вважається потраплянням у небуття? Після закінчення ковзного середнього процесу мій новий «усереднений» набір даних повинен мати таку ж кількість даних, що й оригінал, чи не так? то, якщо я занулюю його на початку або в кінці, або повторюю останні дані, чи не буде це зміщення середнього значення в краях масиву? І як би дзеркальне відображення сигналу допомогло з точки зору кількості термінів даних? Чи є де-небудь простий підручник для цього де-небудь, який показує, як відбувається процес, скажімо, для 32 точок даних та розміром вікна 4 або 5?

2
Якщо ви хочете, щоб ваш згладжений набір даних був такої ж довжини, як і вихідний набір даних, вам потрібно "скласти" дані в кінцевих точках. Будь-який вибір, який ви робите, як створити ці дані, певним чином змінює середнє значення. Трактування даних поза межами межі як дзеркало реального набору даних (тобто припускаючи, що зразок N + 1 такий же, як N-1, N + 2 = N-2 і т.д.) збереже характеристики частотного спектру кінцеві частини сигналу, тоді як якщо припустити повтор нульового або ненульового значення, буде показано, що всі частоти згортаються на кінцях.
Рассел Борогов

8

Окрім приємної відповіді Junuxx, я хотів би скинути кілька записок.

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

  • Один з моїх улюблених - серединний фільтр . Це приклад нелінійного фільтра. Він має деякі цікаві властивості, зберігає «краї» і досить міцний при великому шумі.

  • Якщо у вас є модель, як поводиться ваш сигнал, фільтр Кальмана варто переглянути. Його згладжування - це фактично байєсівська максимальна ймовірність оцінки сигналу на основі спостережень.


4

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


3

Ви можете знайти весь код matlab для згладжування фільтрів, що пересуваються, для різної довжини відводів. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/


1

Інші згадували, як ви розгладжуєте, я хотів би зазначити, чому розгладження працює.

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

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

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

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

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

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

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

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