gammatone滤波器 matlab,Sleepwalking_新浪博客

标签:

octave

dsp

在Octave

3.6以上的版本中使用fir1设计低通/高通/带通/带阻滤波器时,往往发现通带增益不正常,严重影响滤波器性能。例如以下代码设计一个20阶的低通滤波器并绘制出它的频率响应:

freqz(fir1(20,

0.5))

然而Octave绘制出的图像如下:

8b0df11744b64eae020f7d0332c4ab61.png

可以看到在远离截止频率0.5pi的地方,增益已经出现了严重的偏移。使用加窗法设计的20阶FIR滤波器的性能应该比这好很多,所以能够断定这是Octave的bug导致的。

尽管目前在savannah上的代码仓库中,这个bug已被修复,然而到写这篇博客时还没有正式的发布版包含修复后的代码。你若嫌麻烦,可以直接在octave-signal安装所在目录的fir2.m文件中函数开头处,加入一段:

f += linspace(0, eps *

length(f), length(f));

标签:

matlab

gammatone

dsp

本文是一篇对Gammatone滤波器组(Gammatone Filter

Bank)的介绍,总结了此主题下的几篇重要论文(Darling-1991, Slaney-1993, Ellis-2009,

见末尾的引用部分)。

因为在这里排版不便,我把这篇文章写在Github上,请参阅:

---

第一次尝试Markdown + LaTeX,结果相当漂亮呢。

(2015-01-11 12:57)

标签:

praat

octave

matlab

Octave是一个很好用的数值计算软件,Matlab的绝佳替代;Praat是一个很棒的语音分析软件。在语音科学实验中我们常需要提取语音特征,并进行数值处理,然而Praat本身(Praat脚本)的数值计算不太方便,若能将两者结合会带来许多便利。这个简短的例子介绍如何从Octave调用Praat,对音频文件进行分析,并将结果返回到Octave。

假设的应用场景:我们要打开特定的语音文件,分析Pulses(PointProcess),存到vector里。

基本思想是,用system()带上参数启动Praat,执行一段事先写好的Praat脚本,分析结果输出到stdout,被Octave以字符串形式读取,再把字符串转换成向量类型。

先写出一个从打开文件到转换成PointProcess的Praat脚本:

min_freq = 75

max_freq =

600

sound =

do('Read from

file...', file_name$)

(2014-11-12 14:29)

标签:

utau

utau社区

praat

歌声合成

分类:

反思

(这篇文章完全基于我的个人观点,不代表Rocaloid开发组的立场。)

UTAU是一个在歌声合成领域很有建设性的软件,它的开放架构促进了一个活跃的用户社区的形成,并鼓励用户进行相关的探索和尝试,这无疑是值得肯定的。但是,请允许我指出UTAU社区一直存在的一些问题,这也是同类软件(包括Rocaloid)的用户群体的问题。

我观察到UTAU社区提出过许多歌声合成相关的概念(例如“连续音”、“syo/B-HM/芳梅式”、“多音高”),然而这些概念早在十几年前就有人提出过。

这个请求看上去是很滑稽的。作为歌声合成软件的开发者,我的义务是提供给用户最好最易用的软件(“客户是上帝”),而不是去给用户挑错。但是上述问题的确造成了用户的大量重复劳动。鉴于此类软件的发展现状,我们很难将理论基础和操作方式分离(这也是我们的目标)。因此为了UTAU社区在未来的良好发展,我有必要明确指出这个问题,并提供可能的解决方案。

好在UTAU社区的用户构成比较清晰。除了负责调教的最终用户外,还有音库制作者,录音表设计者,以及合成引擎(resampler,

wavtool)和工具的开发者,有时一人身兼多职。如果能让最终用户

(2014-10-18 06:42)

标签:

rocaloid

重写

这篇文章作为昨天一些讨论的总结,希望能产生出一些有用的东西,方便日后查阅。

Rocaloid这整个项目,从开始到现在已经重写过四五次了,平均半年重写一次。造成这个现象的一个原因是项目使用的算法在不断更新换代,而且这个问题无法避免。而另一方面,freenode/#c_lang_cn的羊驼说得很有道理:这一定还和我本人的某些想法有关,更具体是在重写初期,我不知道自己需要什么。

从Rocaloid1.6开始我注意到在引入对象体系后,一些信号处理相关的代码能被更好地组织起来。例如“波形”对象、“正弦信号”对象等等。然而Rocaloid3开始,编程语言改为C,本身并没提供相关的功能。于是我写了RUtil,一个数据聚合式的C的对象模型。后来Rocaloid3因为算法问题又被废弃了。在Rocaloid3.5阶段的开发初期,我试图增强RUtil的功能,产生了RUtil2。当初并没有预料到未来会用什么功能,所以干脆用一大堆宏能凑出什么凑什么,然而半年后现在看来,有些功能是不需要的,还有些需要的功能没有。

但这些功能的缺失不是主要问题。羊驼认为数据聚合式的对象模型很难看,我自己倒觉得没什么(当然这会带给其他开发者一些上手困难)。更关键的是,现在

(2014-10-10 17:47)

分类:

反思

因为那次CSDN事件,我就没再更新过博客。直到最近发现只是当时忘记密码,我竟找回了这个号。

我已经三年没写过博客了。看了看以前我还在玩Flash那会儿写的东西,真得很幼稚。现在也很幼稚——以后我也许仍会这么觉得。

说透了那只是想着也许有人会看这个博客,就在这装装逼,又能摊上个技术交流的名义,多好。

我不知道我是否还会写下去(以及是否还有时间写下去)。但如果在写这篇流水帐的同时,我自己能知道下一步究竟要干什么,那真是太好了:

将博客打回最原始的形式无非是一个可以随时间推移增加信息的网页而已,甚至评论都不是必要的功能。那它和一个文件的根本区别就是可以分享。

所以为了有效利用博客,就应该往上放值得分享的东西。

如果你的观点别人早就有过,那么你所做的只是把它的时间戳更新了一下,没什么价值。所以我假定分享的内容要具有新的观点。

是的,新的观点,一切有分享价值的新的观点。写博的最高境界或许是“即使没人看,自己也能写下去”,但初衷应该建立在分享观点的基础上。

但愿今后有时间能继续写下去吧。

标签:

杂谈

博客木人气,很不蛋定地先转到了百度贴吧继续奋斗

在贴吧里遇到了不少高手 意识到自己实力还不够 闭门修炼了半年,终于有了不少长进 主要习得了不少系统底层的知识

嗯 果然正如某高手说的 等学会了汇编就发现神马都是浮云了 flash还是C++终归是编译成了汇编(虽然as

是解释型语言 但到了内存里运行的时候还不都变成一条条汇编了)

此外对Yamaha出的Vocaloid语音合成软件起了很大兴趣 决定研究研究语音合成

这半年间还学会了手工数据恢复 就是那种靠直接读取硬盘扇区恢复数据的方法

此外还尝试着修改掉了一个山寨ipod的固件 这下好歹俺也算个高手了(好吧我开玩笑的)

以上,完毕.

(2011-01-12 15:05)

标签:

下载整个网站

下载网站

it

我们经常需要查阅网络资料(这是废话),但很多时候无法上网,带来一大堆麻烦。尤其是用本本的用户,无法一直上网是最头疼的问题。这时,你一定会想:要是能把整个网站下载到硬盘就好了!本文教你把指定网站下载到硬盘的方法。

【不罗嗦了,正文开始】

Windows自带的IE从很早的版本起就支持下载网页了。具体方法是文件->另存为(ie8是页面->另存为)。但是请你注意——这样只能存储你当前的页面,而不能存储由N千个页面组成的整个网站。理论上说,只要你不怕累,一个一个页面地下载是完全可行,但是这样的工作量相当惊人(经计算,下载一个10000个页面的小网站需要1.73天的时间,而且不睡觉、吃饭、休息、工作)。我们需要的是便捷、高速、自动化的方法。

你可能知道有一种软件,用于模拟用户的鼠标操作,把录制好的机械性操作快放N倍完成。但是下载网站是一个十分灵活的工作,机器不能自动分辨什么是正文,什么是广告。而且还不能保证每次都点到正确的位置上。所以说,要下载整个网站必须用分析文件内容的高级方法。

于是,出现了令

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

(2010-11-14 16:33)

标签:

杀戮区

murderdistrict

游戏

游戏设计

flash

(转载请注明出处,谢谢合作)

经过大半年后,杀戮区(MurderDistrict)1.0终于制作完成了,似乎是比计划的晚了点儿(好吧,不是一点48f1e44202000n9k.gif

)。主要是因为这段时间一直是笔者一人制作,事情有比较多。总之是达到了预计效果。什么都不说了,先发图:

a4c26d1e5885305701be709a3d33442f.png

这是主界面

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

(2010-07-27 11:22)

标签:

murderdistrict

程序设计

break

循环

it

谁都有犯此类错的时候——漏写了“Break ;”、“Continue

;”、“Stop();”此类小语句的时候,笔者也不例外。前几天在对MurderDistrict怪物喷血的性能优化时,发现了一个奇怪的现象:在秒杀了大批由制造机(游戏引擎Demo

0.7版本的新种类怪物,可以制造蜘蛛)量产的怪物后,从制造机内突然在一瞬间跑出了几十个怪,密密麻麻的,导致CPU使用率垂直上升,帧率垂直下降!!

(为了给下文做铺垫),先说明一下游戏的框架设计:为了使玩家的内存不至于崩溃,笔者对怪物的产生采用了“生死轮回”制:

a4c26d1e5885305701be709a3d33442f.png

可见,False后“跳出循环”需要有一个Break,结果笔者漏写“Break”,导致所有怪物起死回生(诈尸?!)Break的威力实在了得!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值