#matlab #signal-processing #fft #dtmf
#matlab #обработка сигналов #БПФ #dtmf
Вопрос:
Я студент-инженер, и мне нужно решить академическую задачу, касающуюся обработки сигналов.
В принципе, учитывая сигнал DTMF в формате wav, я должен идентифицировать числовую последовательность, которую он закодировал. Я должен сделать это, используя анализ дискретного преобразования Фурье в среде Matlab, чтобы создать скрипт, который считывает файл wav и в процессе идентифицирует номера в звуковом сигнале набора номера.
У меня возникли проблемы в том смысле, что я не очень доволен средой Matlab, и весь дискретный анализ Фурье также очень нов для меня, поэтому я чувствую себя немного потерянным.
У кого-нибудь есть несколько полезных советов, которыми они могут поделиться?
Комментарии:
1. После некоторого поиска в Google я нашел упоминания об алгоритме, который может быть реализован в отношении этой проблемы, алгоритме Гертцеля. Мне было довольно сложно это воспринять, потому что я не могу найти связь с моими проблемными данными. Я уже знаю, что мне нужно использовать 256-точечный DFT в моей вычислительной процедуре, чтобы определить, какой номер телефона закодирован в файле, но я понятия не имею, как туда добраться.
Ответ №1:
DFT (или БПФ) является излишеством для обнаружения DTMF. Вам просто нужно 2 x 4 фильтра Герцеля для обнаружения низких и высоких тонов. Выходные данные каждого фильтра Гертцеля должны быть отфильтрованы по нижним частотам, чтобы предотвратить обнаружение шума, но в остальном это довольно просто.
Если использование DFT / FFT является обязательным, то общий подход был бы:
- для каждого блока входных выборок
- применить подходящее окно (например, Hanning)
- выполнить DFT
- вычислите величину каждой ячейки DFT (re * re im * im)
- измерьте величину в каждом из 8 бинов, которые соответствуют 2 x 4 тонам DTMF
- если у вас есть один высокий групповой тон и один низкий групповой тон, которые имеют значительно большую амплитуду, чем другие тона в группе, то обнаружена пара тонов DTMF
Комментарии:
1. спасибо за ответ, но использование DFT является обязательным условием, а не опцией.
2. большое вам спасибо за быстрый ответ! после консультаций с некоторыми сокурсниками мы в значительной степени согласились с тем же подходом. основным препятствием сейчас является программный аспект этой проблемы, но мы уже работаем над этим. позже я попытаюсь опубликовать код здесь для справки. спасибо всем!
Ответ №2:
Величина DFT реальных данных в значительной степени эквивалентна N / 2 ортогональным фильтрам Гертцеля длины N. А БПФ — это просто быстрый алгоритм DFT.
Если вам нужно использовать FFT, потому что это часть спецификации, просто обратите внимание на ячейки FFT, которые соответствуют частотам фильтров Гертцеля, необходимым для захвата требуемых тонов DTMF, и преобразуйте комплексный результат в величины.
fft_bin_frequency = fft_bin_number * sample_rate / fft_length ;
Проверка работоспособности любого подозрительного тона на соответствие общей энергии амплитуды БПФ. Если соотношение «мало», это может быть просто шум в ячейке БПФ вместо сигнала DTMF.