录音/制作/创作 吉他 扩声技术 视频技术 作品展示 生活 信息 更多... | 音频应用专卖店

肤浅揭秘软件录音和DSP编程

( 69 )
 
[收藏]
-  第 4 页  -

324
#46 11-4-8 18:30
原帖门子 于 11-4-8 04:32 发表
...
门子,你的那几个问题,我这几天一直在查阅资料和思考。依我目前的水平,不能给你很好的答复。非常抱歉。
我有一种感觉,是不是你考虑问题的出发点和思路有误?而且非常模糊和笼统。


昨天,在我上个回复(32楼)的差不多同一时间,我给Julian等几位大师发了求助信,把你的问题复述了一遍,信的内容我抓个图吧:

今天上网以后,我收到了Julian的回复。事实上他很快就回复了,我昨天没看到。




看来,他的意见和建议与我基本一致。呵。这些东西,已经远远超出了普通的编程范畴,即便是Julian这样的大师级程序员,也无能为力。他的建议,你可以尝试一下。我就不出面了吧?呵。

昨天给另外一位高手也发了求助信,内容基本一致。这个人是业内搞数字音频IIR滤波编程方面公认的杀手级人物,今天也收到了他的回复。也许是比较谦虚,也许是防着我一手,他的回复如下:



我还给另外两三位大师发了求助信,但是目前还没收到。个人估计,也是凶多吉少。否则,他们一定会及时回复我。

综上。我感觉你遇到的问题,最好换个思路,从最基本的开始,一层层往上捋。也许,捋到某个程度时,就会豁然开朗。在具体编程时,这种情况是很经常的。往往,最后解决了一个很高难的问题,自己都不知道如何一点点弄出来的。可能我的出发点只是站在程序员和项目管理的角度。有时间我尝试换个思路继续思考一下。如有心得体会,一定及时通知你。如果没有,你也别埋怨我。毕竟我有很久没做过一线Coder了,而且高数功底肯定不如你。:)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

324
#47 11-4-8 18:34
谢谢以上各位的点击和评论。

1278
#48 11-4-8 22:12

回复 狗公腰 在 #18 的 pid=3041306 的贴子

狗哥……

5395
#49 11-4-8 22:24
再次感谢您想着我的问题!  真的非常感谢!
其实,这回比较激动主要是因为我编着曲,潜着水,吃着火锅唱着歌,
突然就见到了这么漂亮的IIR代码,中文世界里大多数能下到的IIR函数都是直接给几个参数就用去了...这个代码对我帮助很大
.... 所以一激动就问了一下那个问题,
希望这个问题不要干扰您的生活~

我的这个问题,其实最开始是来自最近做的一个项目:

考虑一个简单的问题,一个自适应滤波器,根据输入信号的不同得到不同的滤波曲线,一个简单的想法
是首先使用FFT分析其频谱,再根据其频谱调整滤波的频响.但首先,假如是使用了FFT进行了
频谱分析,再通过某个函数(我指的是数学函数)变为滤波器的响应曲线,一定得到的是一个FIR滤波器的频响,
而且,既然已经得到了信号的频谱,甚至无需ifft将滤波器的频谱转化为冲击的卷积形式,而直接在频域上相乘就行了.
以上看起来很圆满,但问题是这样计算不是实时的,首先FFT没有时域信息,无法得到实时频域信息
,其次使用频域频谱相乘来滤波,无法完成动态的卷积

那么,可以考虑使用Gabor变换得到实时频域信息,但冗余度太大,于是便考虑使用小波分析来进行处理,
可是使用离散小波分析本质上和使用了一个滤波器组是完全一样的,所以使用连续小波离散化会更好一点,
但这个项目又要求极强的实时性,连续小波基要么是检测实时,处理及其不识时,要么就是反之,于是将
实时检测和实时处理分开计算,使用实时检测的小波分析系数,换算成普通的卷积形式就可以了.
但您知道的,FIR直接计算不能太长,太长CPU一定算不动的,但又不能用快速傅里叶变换计算,因为这里使用得是动态卷积,
FIR滤波的各个系数每时每刻都在变.这时使用无快速算法的IIR滤波反倒更加完美(即保证了无限长的窗,又能以采样点的精度进行
系数的变化).结果就产生了最开始的问题------连续小波离散化得到的系数们可以通过变化转换为普通的离散频谱,
但离散频谱我不知道如何转换为IIR的系数......

目前只好使用非线性的FIR滤波来处理,只能在每个sampleframe实现双声道各8192点的FIR,也算可以吧...行倒是也没什么不行,
不过不太完美,唉....    (其实本可以问问我以前的老师,但据说他听说我搞音乐后连连摇头..我也没好意思见他....)

其实不用intel编译器,直接#include<xmmintrin.h>也能用SSE,但我比较完美主义,
这几天受您点评,还是自己用内联汇编写了SSE的FFT和iFFT,性能还可以..
这下用不着intel编译器了,

还想请教您一个问题,不知您是否了解cuda?我最近刚刚听说这玩意,发现利用显卡,计算能力太强了
可是为什么几乎没见到任何主流插件或者音频处理软件使用显卡运算呢?(uad-1不算....)

1278
#50 11-4-8 22:24
特别想知道发生什么了,门子都出现了……
我以前上大学的时候也学习过一段时间Matlab,关于巴特沃斯滤波器,不就是一个直接的函数Butterworth么……
还有,iir是无限冲击的序列,fir单位相应有限,就是相位误差不同吧?现在算法不都是完全的么……不好意思,您这文章太“肤浅”导致我没怎么看明白……
翻了压箱底的大学教科书后,发现一切都是幻觉,现在的工作跟这些完全没关系。
另外,想知道liyan的class都是可以继承的?


5395
#51 11-4-8 22:28
看来连大牛们都没想过这个问题,那我也放弃了....下一次直接用morlet小波算了.....
没想到为了我这个问题,您居然还特意发信来问~真的很激动,这年头搞这个的不多,非常感谢您

5395
#52 11-4-8 23:09
原帖800ci 于 11-4-8 22:24 发表
特别想知道发生什么了,门子都出现了……
我以前上大学的时候也学习过一段时间Matlab,关于巴特沃斯滤波器,不就是一个直接的函数Butterworth么……
还有,iir是无限冲击的序列,fir单位相应有限,就是相位误差不同 ...


又是一个学理工的兄弟,欢迎~~~
对的,matlab里面有各种fir和iir的设计工具,而且非常好用,但matlab里面滤波工具箱主要功能不是干这个的,
比如说去年搞个股票曲线的滤波,直接matlab算出几个IIR系数一套就行了,但对于音频处理,matlab的
滤波工具箱不能导出算法.....总不能做固定参数的EQ效果器啊......

而燕子李三大师的代码,可以参考iir那段,完整的再现了iir的系数算法,不过我还没看完....
但即使是这段代码,虽然我还没有看完,但基本应该是基于一个模拟系统的响应给出的,
数字IIR基于模拟系统的变换算法很成熟,基本来说,某个大师在某个时候设计了个模拟滤波器,
然后某个人了解了这位大师的意图,一算~得到的直接就是非常牛的数字滤波器,误差几乎仅发生在频谱层叠.
这也就是说,没有牛的模拟滤波大师,设计团队也很难得到牛的数字滤波.这也是为什么很多新的效果器公司做出来的EQ
反倒是FIR滤波,而且实际上,线性相位的FIR的算法是最简单最直接的.....一点都不难...


对于FIR和IIR来说,相位的问题只是问题之一,我没有学过单位圆,零极点相关的滤波设计,但从小波分析上说,
一个滤波,或者说频谱分析的精度与时间精度是成反比的,满足测不准原理,比如,在44100采样率下,
要满足1Hz的频谱处理精度,FIR滤波器至少长度要达到44100个点.这对于CPU来说几乎是不可能的.
而IIR由于本身就是无限冲击响应,因此长度天然地无穷大(数学上,计算机中不是),所以可以实现任意尺度的
频率分析或者EQ.可以做一个实验,白噪音+sine波,使用waves Q10可以完全消除sine波而几乎不破坏白噪音的频谱,
但同样线性相位EQ(线性相位EQ几乎只能是FIR),就根本达不到.这与EQ本身的Q值调整没有关系.
至于算法上,IIR没有简便算法,但精度强大,FIR用快速FFT变换来做,也说得过去,但依然比较费资源.


其实来说,最强的滤波是小波滤波,根据需要的频域尺度自动调整时域长度.
最近刚看了一个用数论变换计算FFT的快速算法,巨强!

对了,说到这个,前几天和KVR上的几个人讨论了一下关于卷积混响的计算问题,一个10s的卷积混响采样计算,
即便是使用分段快速FFT,也根本不可能计算441000个点的卷积! 后来有高手想到由于混响采样的高频衰减规律
有可能是在最后几秒时,降低了采样率,甚至由于混响很少有10000以上的声音,有可能一开始就降采样一倍来计算.
所以说.....音频DSP这水太深.........太深..............

1278
#53 11-4-9 11:51
我记得当时老师跟我们说IIR线性问题的解决方法有两个,一个是加一个基于时间的全通网络来实现(当年笔记……)第二个是反馈环路上进行矫正。(但是据说还没设计出来,那是03年的事了,不知道现在有没有成熟的算法)

还有,笔记上写着,对于敏感的信号,比如音乐视频,应该选用FIR做多分段快速傅立叶,利用多处理器处理……

门子老大……见到你真激动,传说中的人物啊……

5395
#54 11-4-9 13:28
两年不冒泡..已经变成传说了吗........

要搞线性相位,还是FIR经济一些,IIR线性相位我没怎么学过,全通滤波和全通网络说的应该是一回事吧,我看过的教材
写的是全通滤波....
分段FFT确实非常不错!但cpu性能不给力...几万点的FIR顶不住啊...

5395
#55 11-4-9 13:29
PS:你居然还记笔记....好勤奋,我以前要是有你一半认真就好了

324
#56 11-4-9 16:26
原帖门子 于 11-4-8 22:24 发表
...
Cuda了解一点点,NVIDIA图形处理器专用的工具包。相当于开辟一个新的线程,将一部分密集型的计算处理交给它来协助完成。但是这个技术能否在各个领域大范围普及,我个人不抱太乐观的态度,也不好预计。游戏领域可能很适合,普及会很快。

这类新技术有较强的依赖性,开发和应用时,会有更多的未知因素,延长开发周期,增加成本,而很多行业软件的开发,都力求最小程度的硬件依赖或环境局限(设备无关性)。可能对职业程序员来说,一般都是在万不得已,不用不行的前提下才学习并运用新的东西。比如Steinberg的ASIO和微软的某些东西,大家都在骂,但不用不行,它们基本上都成了数字音频领域的规范,你不采用,用户就不认可……

213
#57 11-4-9 16:34
这文章 很勃起

324
#58 11-4-9 16:40
原帖800ci 于 11-4-8 22:24 发表
特别想知道发生什么了,门子都出现了…… 想知道liyan的class都是可以继承的?
...
谢谢点击和讨论。

DSP和计算机语言的DSP编程是两码事。这也是本帖主题没有冠名“DSP揭秘”或“DSP原理”的原因。这两者之间的东西,门子说了一些。他的看法和观点,除了一点,其余我都同意。有一句话我很认同:DSP的水确实太深。别说我们几个,就是这个行业的大师们过来,几年时间也说不完,扯不清。大家打成一团的时候,可能无数新玩法都出现了。

第二个问题:你能用C++给我写一个无法被继承的class吗?当然,你全部都弄成private我也无话可说,这不成抬扛了嘛。呵……

324
#59 11-4-9 16:43
谢谢以上各位的点击和评论。

324
#60 11-4-9 17:59
朋友们,我在第43楼上传了3副图片,不知道为什么,昨天还可显示,今天看不到了,变成了UBB代码。不知道你们能否看到?还是我上传错误?

这样吧,我再上传一次。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

搜索