[心得经验] 打造基于FIR滤波器的数字分频器

  [复制链接] 查看: 197002|回复: 396

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-12 20:26 | 显示全部楼层
前面提到过在你日常使用的电脑上安装PuTTY和filezilla,现在启动PuTTY,输入刚才找到的ip地址,如下图:

PuTTY.png

点击open,弹出下面的对话框:

putty2.png

输入linux电脑的用户名,按回车,再输入密码,回车。就可以远程登录到你的linux电脑了。界面与在本地登录所看到的完全一样。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-13 00:15 | 显示全部楼层
接下来先利用rephase软件制做分频器文件,请参考前面30至34楼,注意,在这里需要的分频器文件不是wav格式的文件而是text格式的文件,因此在生成滤波器文件时需要选择text输出格式,参考下图:
低通:
Low.png

带通:
Mid.png

高通:
High.png

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-13 00:22 | 显示全部楼层
生成的三个文件:Low.txt, Mid.txt, High.txt 可以存放在任何方便的位置,记住路径,以后需要把这三个文件上传至linux电脑。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-13 00:56 | 显示全部楼层
现在远程登录linux电脑。首先可以查看一下linux电脑资源情况。
登录后,输入htop命令,回车。可以看到下面的界面:

htop.png

可以看到,双核的cpu占用率很低,内存占用也很低,2G的内存只用了不到77M。
最下面的一行是功能键说明。按q或F10可推出这个程序。


6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-13 01:12 | 显示全部楼层
推出htop后,输入mc命令,回车。可以看到linux电脑的文件目录,类似下图:

mc.png

其中最后的五个文件中有四个是分频器设置完成以后才会存在的,另外一个是声卡驱动文件。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-13 03:58 | 显示全部楼层
错字:“推出”应为“退出”。

1

主题

1

好友

237

积分

业余侠客 当前离线

Rank: 4

UID
18742
帖子
197
精华
0
经验
237 点
金钱
187 ¥
注册时间
2007-2-10
发表于 2018-3-13 09:11 | 显示全部楼层
谢谢楼主的详细指导,同时请教能否把HQplayer类似的升频组件加进去,先升频后分频

90

主题

11

好友

3625

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
5869
帖子
6429
精华
0
经验
3625 点
金钱
2638 ¥
注册时间
2005-10-10
发表于 2018-3-13 11:05 | 显示全部楼层
先记号一下,暂时没时间看呢

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-28 20:47 | 显示全部楼层
sunjl6113 发表于 2018-3-13 09:11
谢谢楼主的详细指导,同时请教能否把HQplayer类似的升频组件加进去,先升频后分频

我没有用过HQplayer,不了解这个软件和它的组件。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-28 21:12 | 显示全部楼层
现在启动FileZilla,远程联接Linux电脑,把前面的三个txt文件上传到Linux电脑,
filezilla1.png

filezilla2.png


6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-28 21:22 | 显示全部楼层
接下来在Linux电脑上运行brutefir软件,远程或本地都可以:输入命令brutefir即可。第一次运行brutefir后会在目录下产生一个文件.brutefir_defaults,同时会看到显示brutefir不能继续运行的提示,这是因为brutefir的运行文件还没有设置的缘故。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-28 21:27 | 显示全部楼层
关于brutefir的相关信息,可以参考这个网站:https://www.ludd.ltu.se/~torger/brutefir.html

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-28 21:33 | 显示全部楼层
本帖最后由 dahe 于 2018-3-28 21:37 编辑

最后的一项工作就是设置brutefir,这个实际上就是编写一个txt文件,这个文件的名称我用brutefir.txt,只需要在它的标准模板上改动相关是内容就可以了。

37

主题

8

好友

1558

积分
     

侠之大者 当前在线

Rank: 6Rank: 6

UID
156838
帖子
1484
精华
0
经验
1558 点
金钱
1420 ¥
注册时间
2009-12-19
发表于 2018-3-28 22:05 | 显示全部楼层
才看到,真好,又多了一种玩法,容后慢慢消化实践!!

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-30 02:41 | 显示全部楼层
设置文件的内容主要包含四个部分:
1, 基本设置(default general settings)
2, 参数设置(Coeff defaults)
3, 输入输出端口设置(Output Input Defaults)
4, 滤波器设置(Filter Defaults)
各部分设置中有些项可以忽略不写入设置文件。下面的设置文件和注解供有需要的人参考:

## DEFAULT GENERAL SETTINGS ##



float_bits: 32;             # 浮点精度(32 或 64)

sampling_rate: 96000;       # 取样频率(Hz)

filter_length: 2048,32;      # 滤波器长度,个数(这两个数的设置影响到分频器的系统延时)

#config_file: "~/brutefir.txt"; # 设置文件位置

overflow_warnings: true;    # echo warnings to stderr if overflow occurs

show_progress: false;        # echo filtering progress to stderr

max_dither_table_size: 0;   # maximum size in bytes of precalculated dither

allow_poll_mode: false;     # allow use of input poll mode

modules_path: "/usr/lib/brutefir";   # extra path where to find BruteFIR modules

monitor_rate: false;        # monitor sample rate

powersave: true;           # pause filtering when input is zero

lock_memory: true;          # try to lock memory if realtime prio is set

convolver_config: "~/.brutefir_convolver"; # location of convolver config file



## LOGIC ##






## COEFFS ##


coeff "c-low" {                           #滤波器参数名称(低通)

       filename: "low.txt";        #滤波器文件名称

       format: "text";                 #滤波器文件格式


};



coeff "c-mid" {                     #滤波器参数名称(带通)

       filename: "mid.txt";

       format: "text";

};


coeff "c-high" {            #滤波器参数名称(高通)

       filename: "high.txt";

       format: "text";

};



## INPUT, OUTPUT ##



input "left", "right" {         #输入端口定义

        device: "alsa" { device: "hw";}; # ignore_xrun: true; };       #输入设备

        sample: "S32_LE";     #取样信号格式

        channels: 4/0,1;       #可用输入端口数/使用端口

        delay: 0,0;      #通道延时

};



output "llow", "rlow", "lmid", "rmid", "lhigh", "rhigh" {      #输出端口定义

       device: "alsa" { device: "hw";};  # ignore_xrun: true; };    #输出设备

       sample: "S32_LE";      #取样信号格式

       channels: 6/0,1,2,3,4,5;  #可用输出端口/使用输出端口

       delay: 0,0,0,0,0,0;  #通道延时

       dither: false;

};





## FILTERS ##


filter "l-low" {    #左通道低通滤波器名称

       from_inputs: "left"/0;    #输入端口

       to_outputs: "llow"/0;    #输出端口

       coeff: "c-low";       #使用的滤波器参数名称

};



filter "r-low" {        #右通道低通滤波器名称

       from_inputs: "right"/0;     #输入端口

       to_outputs: "rlow"/0;       #输出端口

       coeff: "c-low";         #使用的滤波器参数名称,左右通道使用同一个参数

};



filter "l-mid" {      #左通道带通滤波器名称

       from_inputs: "left"/0;      

       to_outputs: "lmid"/0;

       coeff: "c-mid";

};



filter "r-mid" {      #右通道带通滤波器名称

      from_inputs: "right"/0;

      to_outputs: "rmid"/0;

      coeff: "c-mid";

};



filter "l-high" {      #左通道高通滤波器名称

      from_inputs: "left"/0;

      to_outputs: "lhigh"/0;

      coeff: "c-high";

};



filter "r-high" {     #右通道高通滤波器名称

      from_inputs: "right"/0;

      to_outputs: "rhigh"/0;

      coeff: "c-high";

};

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-30 02:57 | 显示全部楼层
编辑设置文件时,需要特别留意的地方是输入输出端口的定义和相应设备的选用。
把设置好的文件保存为txt格式文件,比如brutefir.txt,然后上传至Linux电脑。在Linux电脑中,再把 .brutefir_defaults文件中的config_file:"~/brutefir_config"改为 config_file:"~/brutefir.txt"
到此,所有设置完毕。如果没有意外的话,以管理员身份输入命令brutefir,回车,就可以运行了。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-30 03:12 | 显示全部楼层
下面这个界面是程序运行后的样子: 2018-03-29 15:08:16的屏幕截图.png

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-30 03:23 | 显示全部楼层
可以看到,输入输出延时2048 samples,即是96000Hz/2048=46.875(ms),延时47毫秒。改变滤波器长度和个数设置,可以改变其延时时间。但延时太短会工作不稳定而自动退出运行。
这个Linux版的分频器最大的好处是消除了windows版中时不时出现的断音情况。

6

主题

1

好友

261

积分

业余侠客 当前离线

Rank: 4

UID
254029
帖子
204
精华
0
经验
261 点
金钱
198 ¥
注册时间
2010-10-25
 楼主| 发表于 2018-3-30 07:44 | 显示全部楼层
现在看看分频器软件运行后,电脑的资源使用情况:

htop2.png

可以看到。cpu占用率在20%左右,内存使用不到100M。这份工作对这个旧电脑和Linux操作系统来说是非常轻松的。
如果你想要不同的分频器特性,只需要用rephase生成不同的txt文件替换原来相应通道的就可以了。
最近我看到了另外一个开源软件,在Linux系统上可以和brutefir结合用做自动房间听音矫正,实际上就是通过改变分频器特性来适应听音环境的。我正在努力学习,希望能学懂试用。

18

主题

2

好友

950

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
126196
帖子
1586
精华
0
经验
950 点
金钱
931 ¥
注册时间
2009-8-20
发表于 2018-3-30 11:08 | 显示全部楼层
楼主有没有对比过普通模拟电分的声音区别?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部