Как контролировать микрофон для шумового звука?

Вот рефакторинг с использованием вложенного try/except, который решает проблему несколько лаконичнее и питоннее.

#!/usr/bin/env python3

nums = list()
while True:
    # Usability tweak: Trim surrounding whitespace
    a = input("Enter number: ").strip()
    try:
        t = int(a)
    except ValueError:
        try:
            t = float(a)
        except ValueError:
            if a in ('q', 'Q'):
                break
            print("Invalid data entered. Please enter a number or q/Q to quit.")
            continue
    nums.append(t)
print("You have entered {0} numbers and their sum is {1}".format(
    len(nums), sum(nums)))
6
задан Nik Reiman 14 February 2009 в 15:11
поделиться

5 ответов

Если бы я должен был заняться проблемой, то я унес бы в микрометр и запись это. Затем выполните FFT на волновых данных для получения основной частоты (или некоторые). Я сделал бы это для нескольких "ударов", чтобы видеть, приводят ли они к подобным результатам. Если бы они делают (и я абсолютно уверен, что они будут), затем, я использовал бы алгоритм для поиска той же самой частоты.

Это не тривиальная задача, но начиная с большой записи, и математическая работа сделана, Вы могли, вероятно, заставить это работать без слишком большого количества боли.

4
ответ дан 9 December 2019 в 20:50
поделиться

ответ sthg упоминает искажение как вероятный результат выдувания в микрометр. Я просто сделал быстрый тест, и моя запись выдувания (на дешевом микрофоне) отобразила большое количество образцов в минимальных и максимальных значениях (например, 32767 и-32768 на 16-bits-per-sample файле WAV), который похож на стрижку под ежика, был применен к каждому из пиков. Очень простой способ обнаружить дующий звук мог бы быть, чтобы просто подсчитать все образцы, которые являются в минимальных значениях / макс. значениях, и если они представляют больше чем 5% общего количества (или некоторый другой порог) предполагают, что выдувание происходит.

3
ответ дан 9 December 2019 в 20:50
поделиться

Удар в микрометр не обязательно покажет основные частоты в высоком диапазоне (10,00 Гц +). Выдувание в микрофоне ПК, скорее всего, вызовет сигнал staturation и искажение, которое имеет много частот низкого диапазона также. Получающийся сигнал просто будет большим пакетом насыщенности.

Я должен был сделать подобный проект несколько лет назад, и что я сделал был, просто ищут пики объема много больше нормальных говорящих уровней. Хорошо работавший.

3
ответ дан 9 December 2019 в 20:50
поделиться

Это не точно то же, но здесь является моим ответом на вопрос об обнаружении начала примечания:

Отметьте обнаружение начала

Ответ описывает подход, который полагается на мощность сигнала, возрастающую выше данного порога. Этот подход работал бы для обнаружения дующего шума, хотя он также ответит на любой шум вообще, таким образом говорить и т.д. также инициировало бы его.

Вы могли использовать FFT, но я думаю, что это также не спешило бы использовать в в реальном времени, особенно на устройстве Windows Mobile (это могло бы быть достаточно быстро, хотя). Однако дующий шум вряд ли будет иметь основную частоту, если вентилятор не будет свистеть конкретное примечание. Если FFT достаточно быстр, Вы могли бы на самом деле хотеть искать шумы, которые не имеют основной частоты (Вы предположили бы, что что-либо с основной частотой или частотами было речью или каким-то инструментом), и которые в большой степени взвешиваются к верхнему концу слышимого диапазона (выше приблизительно 10,000 Гц).

1
ответ дан 9 December 2019 в 20:50
поделиться

Я не посмотрел на спектр этого, но я думаю, что необходимо видеть ограниченный полосой спектр шума с большей частью энергии ниже нескольких сотен Гц. Это означает, что Вам не нужна полная ширина полосы звуковых частот FFT, и точки 16K являются излишеством. Даже на 256 точках FFT по маленькой пропускной способности необходимо смочь сказать шум от выдувания в микрофоне кроме речи.

1
ответ дан 9 December 2019 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: