Перший крок - переконатися, що і початкова швидкість вибірки, і цільова частота вибірки є раціональними числами . Оскільки вони є цілими числами, вони автоматично є раціональними числами. Якщо один з них не був раціональним числом, все-таки можна було б змінити швидкість вибірки, але це набагато інший процес і складніше.
Наступним кроком є розміщення двох вибіркових норм. Початкова швидкість вибірки в цьому випадку становить 44100, що дорівнює . Цільова частота вибірки, 16000, коефіцієнти до 2 7 ∗ 5 3 . Таким чином, для перетворення з початкової швидкості вибірки в цільову швидкість треба зменшити на 3 2 ∗ 7 2 та інтерполювати на 2 5 ∗ 522∗ 32∗ 52∗ 7227∗ 5332∗ 7225∗ 5 .
Попередні кроки потрібно виконати незалежно від того, як ви хочете переупорядкувати дані. Тепер поговоримо про те, як це зробити з FFT. Трюк у перекомпонуванні з FFT полягає в тому, щоб вибрати довжину FFT, завдяки якій усе гарно вийде. Це означає вибір довжини FFT, яка кратна швидкості децимації (у цьому випадку 441). Для прикладу виберемо FFT довжиною 441, хоча ми могли вибрати 882, 1323 або будь-який інший позитивний кратний 441.
Щоб зрозуміти, як це працює, допомагає візуалізувати це. Ви починаєте з звукового сигналу, який виглядає в частотній області щось на зразок малюнка нижче.
Завершивши обробку, ви хочете знизити частоту вибірки до 16 кГц, але ви хочете якомога менше спотворень. Іншими словами, ви просто хочете зберегти все з наведеного вище зображення від -8 кГц до +8 кГц і скинути все інше. Це призводить до малюнка нижче.
Зверніть увагу, що вибіркові показники не мають масштабу, вони просто є для ілюстрації понять.
25∗ 5 ), тому ми зберігаємо 160 зразків, які представляють частоти від -8 кГц до +8 кГц. Потім ми обертаємо FFT ці зразки та presto! У вас є 160 зразків часової області, які відбираються на частоті 16 кГц.
Як ви можете підозрювати, є кілька можливих проблем. Я перегляну кожен і поясню, як ви можете їх подолати.
Що ви робите, якщо ваші дані не є кратним кратним коефіцієнтом децимації? Ви можете легко подолати це, доповнивши кінець своїх даних достатньою нулями, щоб зробити їх кратним коефіцієнту децимації. Дані набиваються перед тим, як це FFT'ed.
лl - 1нулі (будь ласка, зверніть увагу, що кількість зразків даних та кількість проб підкладки повинні бути ВІДПОВІДНИМ кратним коефіцієнту децимації; ви можете збільшити довжину оббивки, щоб відповідати цьому обмеженню), FFT ', укладаючи дані, помножуючи частотну область даних та фільтр, а потім псевдонім високої частоти (> 8 кГц) призводить до низькочастотних (<8 кГц) результатів перед тим, як скидати результати високої частоти. На жаль, оскільки фільтрація в частотній області сама по собі є великою темою, я не зможу детальніше описуватись у цій відповіді. Однак я скажу, що якщо ви фільтруєте та обробляєте дані більш ніж однією частиною, вам потрібно буде реалізувати Overlap-and-Add або Overlap-and-Save, щоб фільтрування було безперервним.
Я сподіваюся, що це допомагає.
EDIT: Різниця між початковим числом зразків частотної області та цільовим числом зразків частотної області повинна бути рівним, щоб ви могли видалити ту саму кількість вибірок із позитивної сторони результатів, як і негативну сторону результатів. У випадку нашого прикладу початкова кількість зразків становила коефіцієнт децимації, або 441, а цільовим числом зразків була швидкість інтерполяції, або 160. Різниця становить 279, що не є рівним. Рішення полягає в тому, щоб подвоїти довжину FFT до 882, що призводить до того, що цільова кількість зразків також подвоїться до 320. Тепер різниця рівномірна, і ви можете без проблем скидати відповідні зразки частотної області.