Я пишу приложение, в котором я должен обрабатывать цифровой сигнал — массив 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
Мне нужен сигнал с искажением (например, от 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
Дам тебе: