1

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

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

  • rational_resampler_base_fff 类
  • fir_filter_fff 类
  • ...

不幸的是,我不知道如何使用它们。

我安装的 gnuradio 和共享库

感谢您的任何建议

编辑@jcoppens

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

我必须设置的函数是:
low_pass(doub gain, doub sampling_freq, doub cutoff_freq, doub transition_width, window, beta)
其中:

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

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

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

更新:

我使用libsamplerate解决了重采样

4

1 回答 1

2

我需要信号抽取(例如从 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

会给你:

在此处输入图像描述

于 2014-09-21T14:48:40.927 回答