打印

h(s)=( as + b) /(s+b) ,(a,b常数).怎么做成数字的?

[复制链接]
1921|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tscmga|  楼主 | 2007-5-17 15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
恩.我不是搞电子的.
我做了个程序,是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的,然后其余应该就好说了.因为他比较简单,然后后面我自己套套公式,应该可以搞定.如果能表示成延时和加,乘法,那样的也好哦.
专家们帮我看看这个题目啊.
谢谢啦.

相关帖子

沙发
tscmga|  楼主 | 2007-5-17 16:19 | 只看该作者

我只会套公式.

书上没现成的,我就不会

使用特权

评论回复
板凳
tscmga|  楼主 | 2007-5-17 17:58 | 只看该作者

怎么把那个公式变成有个z来表示的.

变成z来表示我就知道怎么编程了

使用特权

评论回复
地板
tscmga|  楼主 | 2007-5-17 18:44 | 只看该作者

是不是代换一下就可以了

h(s)= (as+b)/(s+b);
我知道用拉普拉斯变换表示的是连续的那种
用z
表示的我知道是用z变换表示的,是取样了的.

我看了一下有个公式是

s=2/T  *(1-1/z)/(1+1/z)

是不是把这个公式代换一下就可以了.

使用特权

评论回复
5
lbx_00| | 2007-5-17 20:51 | 只看该作者

用冲激响应不变法或者是双线性变换法

用这两个方法中的一个把传递函数变成z域的传递函数,然后,把这个新的传递函数转化成差分方程。

以上的知识,可以买一本《数字信号处理》,它就是专门讲这些的

使用特权

评论回复
6
tscmga|  楼主 | 2007-5-17 23:50 | 只看该作者

谢谢大侠

谢谢大侠.我从来都没上过这个方面的课.刚刚接触这些.

我推导了一下:
h(s)=(a*s+b)/(s+b)
s= c*(1-1/z)/(1+1/z)   ----c=2/T

得到结果是

y=( (ac+b)x+(b-ac)x/z -(b-c)y/z   ) /( c + b )

然后我计算的
T= 1/16000 吧.
最后结果是和thita有关系的.

a=1+- sin(thita) b= 2c/r;

thita=pi/3;

y=(7695.685547*x(n) -895.685486*x(n-1)+28599.998047*y(n-1))/ 35400.000000 
y=(63104.312500*x(n) -56304.312500*x(n-1)+28599.998047*y(n-1))/ 35400.000000  

我不知道计算是不正确的.只不过,计算后声音沙得厉害.
 耳机里面有一边的声音很沙沙的.感觉就像耳机破了一样.

使用特权

评论回复
7
tscmga|  楼主 | 2007-5-18 00:14 | 只看该作者

补充

thita pi/3
的时候
y=1.782608*x(n) -1.590517*x(n-1)+ 0.807910*y(n-1) 
y= 0.217392*x(n) -0.025302*x(n-1)+ 0.807910*y(n-1)

书上说,那个系统函数是一个一个零点一个极点的系统.然后极点是不变的,通过移动零点来改变评论响应.
然后他说要是声音直接对着哪个耳朵,哪边的声音的高频就会有6db的提高.

我看不出来这个函数对频率有什么影响,

使用特权

评论回复
8
tscmga|  楼主 | 2007-5-18 07:37 | 只看该作者

是声音转换的问题的.

我从44khz的mp3,转换成8000khsz,然后又换成16000hz,所以有这个问题.

使用特权

评论回复
9
tscmga|  楼主 | 2007-5-18 07:56 | 只看该作者

哈哈.有点感觉了.

感觉和hrtf差不多的效果了.就是感觉有个东西在脑袋边上放歌.

使用特权

评论回复
10
tscmga|  楼主 | 2007-5-18 08:28 | 只看该作者

哈哈.自动移动声源的位置的时候,背心都麻了.

只有在移动的那个瞬间定位清楚.然后感觉声源是在后背.声源变换位置的时候,位置感最强.然后背心都麻了,呵呵.现在还没添加延时,耳廓什么模型的.只有一个头部的模型.

使用特权

评论回复
11
杨真人| | 2007-5-18 11:18 | 只看该作者

这个可真是高科技!

使用特权

评论回复
12
shashi5752| | 2007-6-2 23:02 | 只看该作者

不知所云

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

15

帖子

0

粉丝