Субдискретизация и применение фильтра низких частот к цифровому аудио

В Xaml вам необходимо привязать свойство SelectedItem к строке (не списку / коллекции)

<ListBox SelectedItem="{Binding SelectColor}" ItemsSource="{Binding ColorList}"/>
<ListBox ItemsSource="{Binding ItemList}"/>

ViewModel,

private string _selectedColor;
public string SelectedColor
{
    get => _selectedColor;
    set
    {
        _selectedColor = value;
        ItemList.Clear();

        switch (_selectedColor)
        {
            case "red":
               ItemList.Add("apple");
               ItemList.Add("sun");
               break;
        …

   }
   NotifyPropertyChanged(nameof(SelectedColor));
}

Также я бы предложил использовать [112 ] вместо ItemListVal (вспомогательное поле) при добавлении / удалении элементов из коллекции.

13
задан Jon Seigel 26 March 2010 в 17:18
поделиться

7 ответов

Читайте на БИХ-фильтрах и FIR. Это фильтры, которые используют массив coefficent.

Если Вы делаете поиск Google на "FIR или БИХ фильтрует разработчика", Вы найдете много программного обеспечения и апплетов онлайн, который делает трудную работу (получение коэффициентов) для Вас.

Править:

Эта страница здесь (http://www-users.cs.york.ac.uk/~fisher/mkfilter/) позволяет Вам ввести параметры своего фильтра и выложит готовый использовать C-код...

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

Вы правы в этом, Вы должны применить фильтрацию низких частот на свой сигнал. Любые более чем 5 500 Гц сигнала будут присутствовать в Вашем субдискретизируемом сигнале, но 'искаженный' как другая частота, таким образом, необходимо будет удалить тех перед субдискретизацией.

Это - хорошая идея сделать фильтрацию с плаваниями. Существуют алгоритмы фильтра фиксированной точки также, но у этого обычно есть качественные компромиссы для работы. Если у Вас есть плавания, затем используют их!

Используя DFT для фильтрации обычно излишество, и это делает вещи более сложными, потому что обвиняемый не является процессом contiuous, но работой над буферами.

Цифровые фильтры обычно прибывают в два вкуса. FIR и БИХ. The're обычно та же идея, но IIF фильтрует обратную связь использования для достижения более крутого ответа с намного меньшим количеством коэффициентов. Это могло бы быть хорошей идеей для субдискретизации, потому что Вам нужен очень крутой наклон фильтра там.

Субдискретизация является видом особого случая. Поскольку Вы собираетесь выбросить 3 из 4 образцов нет никакой потребности вычислить их. Существует специальный класс фильтров для названного многофазными фильтрами.

Попытайтесь гуглить для многофазного БИХ или многофазного FIR для получения дополнительной информации.

5
ответ дан 1 December 2019 в 22:24
поделиться

Я попытался бы применить DFT, прервав 3/4 результата и применив обратный DFT. Я не могу сказать, будет ли это звучать хорошим, на самом деле не пробуя жесткий.

0
ответ дан 1 December 2019 в 22:24
поделиться

Необходимо применить фильтр низких частот перед субдискретизацией сигнала постараться не "искажать". Критическая частота фильтра низких частот должна быть меньше, чем частота Найквиста, которая является половиной частоты замеров.

1
ответ дан 1 December 2019 в 22:24
поделиться

"Лучшим" возможным решением является действительно DFT, отбрасывая вершину 3/4 частот, и выполняя обратный DFT, с доменом, ограниченным 1/4-й нижней частью. При отбрасывании вершины 3/4ths является фильтром низких частот в этом случае. Дополнение к питанию 2 количества образцов, вероятно, принесет Вам пользу скорости. Знайте как Ваши образцы винных магазинов FFT все же. Если это будет сложный FFT (который намного легче проанализировать и обычно имеет более хорошие свойства), то частоты или пойдут от-22 до 22, или от 0 до 44. В первом случае Вы хотите 1/4-ю середину. В последнем, наиболее удаленном 1/4-м.

Можно сделать соответствующее задание путем усреднения демонстрационных значений вместе. Наивный способ захватить образцы четыре за четыре и сделать равное взвешенное среднее работает, но не является слишком большим. Вместо этого Вы захотите использовать функцию "ядра", которая составляет в среднем их вместе неинтуитивным способом.

Mathwise, отбрасывая все вне низкочастотной полосы является умножением функцией поля в разносе частот. (Обратное) преобразование Фурье поворачивает точечно умножение в свертку (обратных) преобразований Фурье функций, и наоборот. Так, если мы хотим работать во временном интервале, мы должны выполнить свертку с (обратным) преобразованием Фурье функции поля. Это оказывается пропорциональным функции "sinc" (грех в) / в, где ширины поля в разносе частот. Таким образом в каждом 4-м местоположении (так как Вы субдискретизируете фактором 4) можно сложить точки около него, умноженный на sin(dt) / dt, где dt является расстоянием вовремя до того местоположения. Как поблизости? Ну, это зависит от того, как хороший Вы хотите, чтобы это звучало. Распространено проигнорировать все вне первого нуля, например, или просто взять число очков, чтобы быть отношением, которым Вы субдискретизируете.

Наконец существует плохое мочой (но быстро) способ просто отбрасывания большинства образцов, хранения просто нулевое, четвертое, и так далее.

Честно, если бы это умещается в памяти, я рекомендовал бы просто идти путем DFT. Если это не использует один из блоков фильтра программного обеспечения, что другие рекомендовали создать фильтр для Вас.

1
ответ дан 1 December 2019 в 22:24
поделиться

Недавно я наткнулся на BruteFIR , который может уже делать то, что вам интересно?

0
ответ дан 1 December 2019 в 22:24
поделиться

Заметьте (в дополнение к другим комментариям), что простой-интуитивный подход "downsample by a factor of 4 by replacing every group of 4 consecutive samples by the average value", не является оптимальным, но тем не менее не является неправильным, ни практически, ни концептуально. Потому что усреднение равносильно фильтру низких частот (прямоугольное окно, которое соответствует sinc по частоте). Что было бы концептуально неправильно, так это просто понизить дискретизацию, взяв одну из каждых 4 выборок: это определенно внесло бы алиасинг.

Кстати: практически любое программное обеспечение, которое делает некоторую передискретизацию (аудио, изображения или чего-либо еще; пример для аудио: sox), учитывает это, и часто позволяет вам выбирать лежащий в основе фильтр низких частот.

4
ответ дан 1 December 2019 в 22:24
поделиться
Другие вопросы по тегам:

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