【问题标题】:Digital signal decimation using gnuradio lib使用 gnuradio lib 进行数字信号抽取
【发布时间】:2014-11-15 14:25:45
【问题描述】:

我编写了必须处理数字信号的应用程序 - 双数组。我必须对信号进行抽取、过滤等。我找到了一个项目 gnuradio,其中有解决此问题的功能。但我不知道如何正确使用它们。

我需要抽取信号(例如从 250Hz 到 200Hz)。该函数应该类似于 Matlab 中的 resample 函数。我发现,它的类是:

  • rational_resampler_base_fff 类source
  • fir_filter_fff 类source
  • ...

很遗憾,我不知道如何使用它们。

我已经安装了 gnuradio 和共享库

感谢您的建议

编辑@jcoppens

非常感谢您的帮助。 但我必须在我的代码中处理信号。我在 gnuradio 中找到了可以解决我的问题的类,但我需要帮助如何设置它们。

我必须设置的函数是:
low_pass(双增益,双采样频率,双截止频率,双转换宽度,窗口,测试版)
其中:

使用“窗口法”设计低通 FIR 滤波器
gain:滤波器的整体增益(通常为 1.0)
sampling_freq:采样频率(Hz)
cutoff_freq:过渡带的中心 (Hz)
transition_width:过渡带的宽度 (Hz)。
过渡带的归一化宽度决定了所需的抽头数。 Narrow –> more taps
window_type:使用什么样的窗口。确定最大衰减和通带纹波。
beta:Kaiser 窗口的参数

我知道,我必须使用 window = KAISER 和 beta = 5,但其他的我不确定。

我使用的函数是:low_passpfb_arb_resampler_fff::filter

更新:

我使用libsamplerate解决了重采样问题

【问题讨论】:

    标签: c++ signal-processing gnuradio


    【解决方案1】:

    我需要抽取信号(例如从 250Hz 到 200Hz)

    警告:我错误地表达了最初的介绍性段落 - 抱歉。

    由于 250 Hz 与 200 Hz 没有直接关系,因此您必须采取一些技巧将 250Hz 转换为 200Hz。在 250Hz 样本之间插入 4 个插值样本,将频率降低到 50Hz。然后,您可以通过因子 4 抽取再次将频率提高到 200Hz。

    为此,您需要“Rational Resampler”,您可以在其中定义子样本和抽取因子。像这样的:

    这意味着如果您使用该库,您将不得不做类似的事情。没有图书馆可能会更简单。在 250 Hz 样本之间进行线性插值(即在每个样本之间插入 4 个额外样本),然后通过选择每个第 4 个样本进行抽取。

    注意:stackexchange 上有一个信号处理论坛 - 也许这个问题可能属于该类别...

    更多信息:如果您只需要重新采样输入数据,并且不需要实际的 gnuradio 程序,请查看此文档:

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

    有几个指向其他文档的链接,以及指向libresamplelibresample4 和其他文档的链接,它们可能对您有用。另一个非常有趣的页面是:

    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
    

    会给你:

    【讨论】:

    • 谢谢,很遗憾我对 DSP 没有任何经验。我会找出我必须执行多少次插值和抽取。之后我可以使用rational_resampler_base_fff 类link。你知道如何在代码中使用它吗?
    • 谢谢,我浏览了链接。
    • 谢谢,你能帮我设置一些我不知道它们是什么意思的变量吗?
    • 如果我是你,我会在lists.gnu.org/mailman/listinfo/discuss-gnuradio 列表中提问。你会发现那里有很多知识渊博的人。我也会考虑上面的另一个答案 - libresample。
    • 谢谢。我会在那里寻求建议。但我尝试使用 libresample,它似乎有效。
    猜你喜欢
    • 1970-01-01
    • 2017-02-28
    • 2019-01-16
    • 1970-01-01
    • 2020-03-23
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多