Основне відшарування без формування шуму
Основна дефітована квантування без формування шуму працює так:
Рисунок 1. Основна схема системи квантування на кінці. Шум - це нульове середнє трикутне забарвлення з максимальним абсолютним значенням 1. Округлення до найближчого цілого числа. Залишкова помилка - це різниця між виходом і входом і розраховується лише для аналізу.
Трикутна тремтіння збільшує дисперсію результуючої залишкової помилки в 3 рази (від до ), але розв'язує середнє значення та дисперсію чистої помилки квантування від значення вхідного сигналу. Це означає, що сигнал чистої помилки некорельований з входом, але більш високі моменти не розв'язуються, тому це не справді абсолютно незалежна випадкова помилка, але ніхто не визначив, що люди можуть почути будь-яку залежність вищих моментів у сигналі чистої помилки від вхідний сигнал в аудіо-програмі.11214
З незалежною додатковою залишковою помилкою ми мали б більш просту модель системи:
Малюнок 2. Апроксимація базової дефірованої квантування. Залишкова помилка - білий шум.
У наближеній моделі вихід просто вводиться плюс незалежна помилка білого шуму.
Дихання з шумовою формою
Я не можу дуже добре читати Mathematica, тому замість вашої системи я проаналізую систему від Lipshitz et al. " Мінімально чутне формування шуму " J. Audio Eng. Соц., Т.39, №11, листопад 1991:
Малюнок 3. Ліпшиц та ін. Системна схема 1991 р. (Адаптована з їх рис. 1). Фільтр (курсивом у тексті) включає в нього затримку на один зразок, щоб його можна було використовувати як фільтр зворотного зв'язку з помилками. Шум - це трикутна туга.
Якщо залишкова помилка не залежить від поточного та минулого значень сигналу A, у нас є більш проста система:
Малюнок 4. Орієнтовна модель Lipshitz et al. 1991 р. Система. Фільтр такий же, як на рис. 3, і включає в нього одну затримку вибірки. Він більше не використовується як фільтр зворотного зв'язку. Залишкова помилка - білий шум.
У цій відповіді я буду працювати з більш легко проаналізованою приблизною моделлю (рис. 4). В оригіналі Lipshitz et al. Система " Фільтр" 1991 року має загальну форму фільтрів безмежної імпульсної відповіді (IIR), яка охоплює як фільтри IIR, так і кінцеві імпульсні реакції (FIR). Далі ми припустимо, що Filter - це фільтр FIR, як я вважаю, на основі моїх експериментів з вашими коефіцієнтами, це те, що у вас є у вашій системі. Функція передачі фільтра :
HFilter(z)=−b1z−1−b2z−2−b3z−3−…
Коефіцієнт являє собою затримку однієї вибірки. У наближеній моделі також існує прямий шлях підсумовування до виходу із залишкової помилки. Це підсумовується заперечним виходом фільтра , утворюючи функцію передачі фільтра повного шуму:z−1
H(z)=1−HFilter(z)=1+b1z−1+b2z−2+b3z−3+….
Щоб перейти від ваших коефіцієнтів фільтру , які ви перераховуєте у порядку , до функції передачі фільтру повного шуму, коефіцієнти полінома , знак коефіцієнтів змінюється для врахування заперечення виходу фільтра на системній діаграмі, а коефіцієнт додається в кінці (за сценарієм Octave нижче), і нарешті список перевертається (за ):…,−b3,−b2,−b11,b1,b2,b3,…b0=1horzcat
flip
pkg load signal
b = [-0.16, 0.51, -0.74, 0.52, -0.04, -0.25, 0.22, -0.11, -0.02, 0.31, -0.56, 0.45, -0.13, 0.04, -0.14, 0.12, -0.06, 0.19, -0.22, -0.15, 0.4, 0.01, -0.41, -0.1, 0.84, -0.42, -0.81, 0.91, 0.75, -2.37, 2.29];
c = flip(horzcat(-b, 1));
freqz(c)
zplane(c)
Сценарій подає графік частотного відгуку та нульові розташування фільтра для формування повного шуму:
Малюнок 5. Частотна характеристика фільтра повного шумового формування.
Малюнок 6. Графік Z-площини полюсів ( ) та нулів ( ) фільтра. Усі нулі знаходяться всередині одиничного кола, тому фільтр, що формує повний шум, є мінімальним.×∘
Я думаю, що проблема пошуку коефіцієнтів фільтра може бути переформульована як проблема проектування фільтра мінімальної фази з провідним коефіцієнтом 1. Якщо існують притаманні обмеження частотній характеристиці таких фільтрів, то ці обмеження переносяться на еквівалентні обмеження у формуванні шуму, який використовує такі фільтри.
Перетворення з багатополюсної конструкції на мінімальнофазну ПДЧ
Процедура проектування різних, але багато в чому еквівалентних фільтрів описана в Stojanović et al. , "Проектування багатополюсних рекурсивних цифрових фільтрів на основі ультрасферних поліномів", Радіоінженерія, т. 23, № 3, вересень 2014 р. Вони обчислюють коефіцієнти знаменника передатної функції IIR багатополюсного низькочастотного фільтра. Вони завжди мають провідний коефіцієнт знаменника 1 і мають усі полюси всередині одиничного кола, вимога стабільних фільтрів IIR. Якщо ці коефіцієнти будуть використані в якості коефіцієнтів фільтру для формування шуму мінімальної фази FIR, вони даватимуть перевернуту частотну характеристику частоти порівняно з низькочастотним фільтром IIR (коефіцієнти знаменника функції передачі стають коефіцієнтами чисельника). У вашій нотації є один набір коефіцієнтів із цієї статті {-0.0076120, 0.0960380, -0.5454670, 1.8298040, -3.9884220, 5.8308660, -5.6495140, 3.3816780}
, який можна перевірити на додаток для формування шуму, хоча це не зовсім відповідає специфікації
Малюнок 7. Частотна характеристика частоти FIR-фільтра з використанням коефіцієнтів Stojanović et al. 2014 рік.
Малюнок 8. Полюсно-нульовий графік фільтра FIR з використанням коефіцієнтів Стоянович та ін. 2014 рік.
Функція перенесення полюсів:
H(z)=11+a1z−1+a2z−2+a3z−3+…
Таким чином, ви можете створити стабільний полюсний Біє - фільтр нижніх частот і використовувати коефіцієнти а коефіцієнти для отримання високих частот FIR фільтра мінімальної фази з провідним коефіцієнтом 1.ab
Щоб створити повнополюсний фільтр і перетворити його в мінімальнофазний фільтр FIR, ви не зможете використовувати методи проектування фільтру IIR, які починаються з аналогового фільтра-прототипу і відображають полюси і нулі в цифровий домен за допомогою білінеарного перетворення . Це включає в себе cheby1
, cheby2
і ellip
в октаву і SciPy Python. Ці методи дадуть нулі подалі від площини z-площини, тому фільтр не буде необхідним повнополюсним типом.
Відповідь на теоретичне запитання
Якщо вам все одно, який шум буде на частотах, що перевищують чверть частоти вибірки, то Lipshitz та ін. 1991 вирішує ваше запитання безпосередньо:
Для таких зважувальних функцій, які йдуть на нуль над частиною смуги, немає теоретичного обмеження зваженого зниження шумової потужності, отриманого з ланцюга на рис. 1. Це було б у випадку, якщо, наприклад, можна вважати, що вухо має нульову чутливість між, скажімо, 20 кГц і частотою Найкіста, і вибирає функцію зважування для відображення цього факту.
Їх фіг.1 показує формувач шуму із загальною структурою фільтра IIR як з полюсами, так і з нулями, настільки відмінними від структури FIR, яку ви маєте на даний момент, але те, що вони кажуть, стосується і цього, тому що імпульсна реакція фільтра FIR може бути зроблені довільно близькими до імпульсної реакції будь-якого заданого стабільного фільтра IIR.
Сценарій Octave для дизайну фільтрів
Ось сценарій Octave для обчислення коефіцієнтів іншим методом, який, на мою думку, еквівалентний Stojanovici et al. Метод 2014 року параметризований як з правильним вибором мого параметра.ν=0dip
pkg load signal
N = 14; #number of taps including leading tap with coefficient 1
att = 97.5; #dB attenuation of Dolph-Chebyshev window, must be positive
dip = 2; #spectrum lift-up multiplier, must be above 1
c = chebwin(N, att);
c = conv(c, c);
c /= sum(c);
c(N) += dip*10^(-att/10);
r = roots(c);
j = (abs(r(:)) <= 1);
r = r(j);
c = real(poly(r));
c .*= (-1).^(0:(N-1)); #if this complains, then root finding has probably failed
freqz(c)
zplane(c)
printf('%f, ', flip(-c(2:end))), printf('\n'); #tobalt's format
Він починається з вікна Дольфа-Чебишева як коефіцієнтів, об'єднує його з собою, щоб подвоїти нулі функції передачі, додає до середнього крана число, яке "піднімає" частотну характеристику (вважаючи середній кран як нульовий час), так що воно скрізь позитивне, знаходить нулі, видаляє нулі, які знаходяться поза одиничним колом, перетворює нулі назад у коефіцієнти (провідний коефіцієнт poly
- завжди 1), і перевертає знак кожного другого коефіцієнта, щоб зробити фільтр високопрохідним . Результати (старшої, але майже еквівалентної версії) сценарію виглядають багатообіцяючими:
Малюнок 9. Частотна характеристика фільтра (більш стара, але майже еквівалентна версія) вищевказаного сценарію.
Малюнок 10. Графік полюса-нуль фільтра (старший, але майже еквівалентний варіант) вищевказаного сценарію.
Коефіцієнти з (стара , але майже еквівалентна версія) вище сценарію в позначеннях: {0.357662, -2.588396, 9.931419, -26.205448, 52.450624, -83.531276, 108.508775, -116.272581, 102.875781, -74.473956, 43.140431, -19.131434, 5.923468}
. Цифри великі, що може призвести до чисельних проблем.
Октавна реалізація формування шуму
Нарешті, я власноруч здійснив формування шуму в Octave і не маю проблем, як ви. Виходячи з нашого обговорення в коментарях, я думаю, що обмеженням у вашій реалізації було те, що спектр шуму оцінювали за допомогою прямокутного вікна з назвою "без вікон", яке розсипало високочастотний спектр на низькі частоти.
pkg load signal
N = length(c);
M = 16384; #signal length
input = zeros(M, 1);#sin(0.01*(1:M))*127;
er = zeros(M, 1);
output = zeros(M, 1);
for i = 1:M
A = input(i) + er(i);
output(i) = round(A + rand() - rand());
for j = 2:N
if (i + j - 1 <= M)
er(i + j - 1) += (output(i) - A)*c(j);
endif
endfor
endfor
pwelch(output, max(nuttallwin(1024), 0), 'semilogy');
Рисунок 11. Спектральний аналіз квантового шуму з наведеної вище Октави здійснення формування шуму для постійного нульового вхідного сигналу. Горизонтальна вісь: нормалізована частота. Чорний: відсутність шумового формування ( c = [1];
), червоний: ваш оригінальний фільтр, синій: фільтр із розділу "Сценарій Октави для дизайну фільтра".
Рисунок 12. Виведення часової області від вищевказаної октави здійснення формування шуму для постійного нульового вхідного сигналу. Горизонтальна вісь: номер вибірки, вертикальна вісь: значення вибірки. Червоний: ваш оригінальний фільтр, синій: фільтр із розділу "Сценарій Октави для дизайну фільтра".
Більш екстремальний фільтр для формування шуму (синій) призводить до дуже великих квантованих значень вибірок вихідних даних навіть для нульового введення.