audio – 解释这个DSP表示法
我正在尝试实现
this extenstion的Karplus-Strong弹拨字符串算法,但我不明白那里使用的符号.也许它需要多年的学习,但也许它不会 – 也许你可以告诉我.
我认为下面的等式在频域或其他东西.刚开始使用第一个等式Hp(z),拾取方向低通滤波器.对于一个方向,你使用p = 0,对另一个方向,可能是0.9.在第一种情况下归结为1,或在第二种情况下归结为0.1 /(1 – 0.9 z-1). alt text http://www.dsprelated.com/josimages/pasp/img902.png 现在,我觉得这在编码方面可能意味着: H_p(float* input,int time) { if (downpick) { return input[time]; } else { return some_function_of(input[t],input[t-1]); } } 有人能给我一个暗示吗?或者这是徒劳的,我真的需要所有的DSP背景来实现这一点?我曾经是一名数学家……但这不是我的领域. 解决方法
所以z-1只意味着一个单位的延迟.
我们取Hp =(1-p)/(1-pz-1). 如果我们遵循输入的“x”和输出的“y”的约定,传递函数H = y / x(=输出/输入) 所以我们得到y / x =(1-p)/(1-pz-1) 或(1-p)x =(1-pz-1)y (1-p)x [n] = y [n] – py [n-1] 或:y [n] = py [n-1](1-p)x [n] 在C代码中,这可以实现 y += (1-p)*(x-y); 除了使用输出“y”作为状态变量本身之外没有任何其他状态.或者你可以采用更直接的方法: y_delayed_1 = y; y = p*y_delayed_1 + (1-p)*x; 就其他方程式而言,它们都是典型的方程式,除了第二个方程式,看起来可能是选择HΒ= 1-z-1 OR 1-z-2的方式. (什么是N?) 过滤器有点模糊,除非你能找到一些预先包装好的过滤器,否则你会更难处理.一般来说,它们都是形式 H = H0 *(1 az-1 bz-2 cz-3 …)/(1 rz-1 sz-2 tz-3 ……) 你要做的就是写下H = y / x,交叉乘以得到 H0 *(1 az-1 bz-2 cz-3 …)* x =(1 rz-1 sz-2 tz-3 …)* y 然后单独隔离“y”,使输出“y”成为其自身和输入的各种延迟的线性函数. 但是设计滤波器(选择a,b,c等)比实现它们更困难. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |