模拟升余弦滤波器

信息处理 matlab 过滤器 数字通讯 C 参考实现
2022-01-28 17:52:32

我正在将用 Matlab 编写的模拟重写为 C。我的传输数据有问题。数据由升余弦滤波器过滤。在 Matlab 中,它是通过使用以下函数firrcos实现的:

h = firrcos(20,0.25,0.25);

有谁知道我如何找到这个函数的文档(matlab 代码实现)?有没有人在 Matlab 或 C 中模拟过这样的过滤器?

编辑1

给定滤波器的阶数 N=20,载波频率 Fc=0,25,过渡带 tbW=0,25,采样频率为 8。

我需要在 Simulink 中初始化这样的过滤器。

如何确定仅知道上述参数的滤波器跨度和滚降因子?

编辑2

为什么 Simulink 中滤波器的滤波器脉冲响应与 Matlab 中的实现看起来不同?

在 matlab 中上限为 0,在 Simulink 中为 10

编辑 3

如何初始化 h = firrcos(20,0.25,0.25); 在模拟?

2个回答

MATLAB 的文档不建议使用firrcos,而是建议使用rcosdesign在你的命令窗口中输入doc firrcos ,这里是第一行:

firrcos升余弦 FIR 滤波器设计。

警告:firrcos不推荐。改为使用RCOSDESIGN

我的猜测是,这firrcos实际上在新版本中已停产。为了更好地帮助您,请尝试rcosdesign按照建议使用。您实际上可以通过在 MATLAB 的命令窗口中键入以下行来获取此函数的实际 MATLAB 代码:(edit rcosdesign您也可以检查edit firrcos)。这将打开一个新的编辑器窗口,其中包含该函数的实际代码。这可以帮助你。

请注意,在您的EDIT1中,Fc如果您仔细检查文档,实际上是截止频率(不是载波),并且使用三个输入参数作为默认值Fs=2. 滚降因数是衡量多余带宽的一个指标,以分数表示。符号中过滤器的跨度由您定义。

除了@MBaz 提到的内容之外,您在发射机处需要的是根升余弦滤波器这样一来,在接收器端,您还可以放置一个根升余弦,两者一起产生一个升余弦滤波器,这是一个具有零ISI的奈奎斯特滤波器,而根升余弦不显示零(幅度)在符号时间。

编辑:

要查看两个函数之间的等价性,您必须为这两个函数提供正确的输入参数。如前所述,首先要做的是求根升余弦。您可以通过将 和 的第 6 个和第 4 个输入分别设置为 来做到firrcosrcosdesign一点sqrt其余参数的等价物如下:

beta = R;
sps = Fs/(2*Fc);
span = N / sps;

然后你有非标准化的两个过滤器:

h1 = firrcos(N, Fc, R, Fs, 'rolloff', 'sqrt');
h2 = rcosdesign(R, N/(Fs/Fc/2), Fs/Fc/2, 'sqrt');

有关这方面的更多信息以及所需的规范化,可以在 MATLAB 的Communications Toolbox™ Release Notes for R2020b中找到关于 R2013b的章节(我猜它在那之后就停止了),标题为Functionality Being Changed or Removed

对于您的 Simulink,单击Simulink Library Browser,然后在左侧列表中选择Communications Toolbox,然后选择Comm Filters那里你有你所有的过滤器,你可以设置选择的升余弦过滤器,如前所述。

许多教科书和维基百科都记录了升余弦滤波器脉冲响应您需要做的就是在您的 C 程序中实现该脉冲响应。

如果您正在传输数据,您应该真正使用根升余弦滤波器(升余弦脉冲不是正交的)。他们的脉冲响应在这里