恩.我不是搞电子的. 我做了个程序,是3d声音的.我是把声音数据放到一个双缓冲里面.然后每个插件读他输入的缓冲数据,然后把数据输出到自己的缓冲.然后每个周期交换一次缓冲.我现在已经实现了,延时的插件,数据类型转换,录音,输出,读文件,写文件的插件. 我没上过数字信号处理的课程.只有书. 3d声音的话,我是照书搞的.但是我有个地方看不明白.就是同一个声音,到达人的耳朵的时候,因为左右耳朵之间隔着一个脑袋,如果声音来自左边,右边的耳朵听到的声音就经过了一个变化.(当然还有许多其他的变换).只考虑这个. 传送函数是 h(s)= (as+b)/(s+b); 左边a=1+sin(thita) 右边a=1-sin(thita). (thita是音源相对人脑袋的角度,水平的)
b= 2c/r;r是脑袋的半径.c是声音的速度340m/s
就是左右两个声道的数据经过各自的这样的变换.我用的计算数据类型是32位的浮点数.声音是 16位有符号的整数.声音源是16000hz,单声道.输出是 16000hz,双声道.然后每个缓冲256个取样.
我搞这个是现学现卖.照数字信号处理的书来的.是一知半解.
我想这个是个iir滤波器.开始的时候,我不明白这个函数里面s是什么,我把他当z用.然后按照书上的,转成滤波器啦.就是把,数据延时1个hz,然后把当前的插件的结果延时一个hz,作为自己的输入.3个输入,然后混合起来输出,中间的计算是浮点的.结果肯定是错的.
我知道书上有从模拟的传递函数变成数字的的函数的方法.但是这个函数不符合冲激响应不变法的那个规则.因为分子和分母次数一样.我就不知道怎么变换了.因为是照书搞的.
然后不知道有没用什么这个方面速成的数学书籍没有. 然后这个形式的该怎么转换成Z的,然后其余应该就好说了.因为他比较简单,然后后面我自己套套公式,应该可以搞定.如果能表示成延时和加,乘法,那样的也好哦. 专家们帮我看看这个题目啊. 谢谢啦.
|