Прореживание цифрового сигнала с использованием gnuradio lib

Я пишу приложение, в котором я должен обрабатывать цифровой сигнал — массив double. Я должен удалить сигнал, фильтр и т. Д. Я нашел проект gnuradio, где есть функции для этой проблемы. Но я не могу понять, как правильно их использовать.

Мне нужно разрешение сигнала (например, от 250 Гц до 200 Гц). Функция должна быть похожа на функцию повторной выборки в Matlab. Я нашел, классы для этого:

К сожалению, я не могу понять, как их использовать.

gnuradio и общая библиотека, которую я установил

Спасибо за любой совет

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

Функции, которые я должен установить:
low_pass (сомнение усиление, сомнение sampling_freq, сомнение cutoff_freq, сомнение transition_width, окно, бета)
где:

использовать «метод окна» для разработки низкочастотного FIR-фильтра
усиление: общий коэффициент усиления фильтра (обычно 1,0)
sampling_freq: частота дискретизации (Гц)
cutoff_freq: центр переходной полосы (Гц)
transition_width: ширина полосы перехода (Гц).
Нормализованная ширина полосы перехода определяет количество требуемых отводов. Узкий -> больше кранов
window_type: Какое окно использовать. Определяет максимальное ослабление и пульсации полосы пропускания.
бета: параметр для окна Kaiser

Я знаю, я должен использовать window = KAISER и beta = 5, но в остальном я не уверен.

Я использую следующие функции: НЧ а также pfb_arb_resampler_fff :: фильтр

ОБНОВИТЬ:

Я решил пересчет, используя libsamplerate

1

Решение

Мне нужен сигнал с искажением (например, от 250 Гц до 200 Гц)

ВНИМАНИЕ: Я неправильно изложил первоначальный вступительный абзац — мои извинения.

Поскольку 250 Гц не имеет прямого отношения к 200 Гц, вам необходимо выполнить некоторые приемы для преобразования 250 Гц в 200 Гц. Вставка 4 интерполированных выборок между выборками 250 Гц понижает частоту до 50 Гц. Затем вы можете снова поднять частоту до 200 Гц, уменьшив ее в 4 раза.

Для этого вам нужен «Rational Resampler», в котором вы можете определить подвыборку и десятичные факторы. Что-то вроде этого:

введите описание изображения здесь

Это означает, что вам придется делать нечто подобное, если вы используете библиотеку. Может быть, это еще проще сделать без библиотеки. Линейная интерполяция между выборками 250 Гц (то есть вставка 4 дополнительных выборок между каждой), затем децимация путем выбора каждой 4-й выборки.

Примечание: на stackexchange есть форум по обработке сигналов — возможно, этот вопрос может попасть в эту категорию …

Дополнительная информация: Если вам нужно только пересчитать свои входные данные и вам не нужна сама программа gnuradio, взгляните на этот документ:

https://ccrma.stanford.edu/~jos/resample/resample.pdf

Есть несколько ссылок на другие документы и ссылка на libresample, libresample4и другие, которые могут быть вам полезны. Еще одна очень интересная страница:

http://www.dspguru.com/dsp/faqs/multirate/resampling

Наконец, из того же источника, что и в PDF-файле выше, проверьте их snd программа. Это может решить вашу проблему без написания любой программного обеспечения. Он может загружать сэмплы с плавающей запятой, пересэмплировать и снова сохранять:

http://ccrma.stanford.edu/planetccrma/software/soundapps.html#SECTION00062100000000000000

РЕДАКТИРОВАТЬ: И еще одно решение — возможно, самое простое из всех: использовать Matlab (или бесплатную версию Octave):

pkg load signal
t = linspace(0, 10*pi, 50);  % Generate a timeline - 5 cycles
s = sin(t);                  % and the sines -> 250 Hz
tr = resample(s, 5, 4);      % Convert to 200 Hz
plot(t, s, 'r')              % Plot 250 Hz in red
hold on
plot(t, tr(1:50))            % and resampled in blue

Дам тебе:

введите описание изображения здесь

2

Другие решения


По вопросам рекламы [email protected]