fuck the function “reshape” in matlab

题目:fuck the function “reshape” in matlab

=====================引言=======================

用Matlab编一个基于LPC编码的语音信号压缩与恢复的小程序,程序很快,只是到最后的结果始络不对,一下子耗费了我一晚上的时间,现在查出来原来是reshape函数用错了,气愤到了极点,也怪自己没有注意……

一段语音信号,以30ms为基本单位进行无重叠分段,然后对每一段求LPC系数,求平均能量,求过零点个数……

然后以过零点个数判断是voiced还是unvoiced,如果是voiced,就产生一个脉冲串,使用前面对应求得的LPC系数进行重建,如果是unvoiced,就产和一个正态分布白噪声,使用前面对应求得的LPC系数进行重建,然后分别再用前面求得的平均能量对重建的信号幅度进行scale,最后把重建的每一段拼在一起就是恢复的信号了。

本身这就是一个最简单的LPC语音合成而已:


虽然是第一次接触,但原理如此简单,不应该不出结果的啊。

再说一点背景,以语音信号以30ms为基本单位进行无重叠分段后使用一个reshape函数将其由一个行向量(或列向量)变为一个M*N的矩阵,没想到就栽这儿了……

=====================正文=======================

举个简单例子看一下reshape函数的用法吧:

>> x=1:20;
>> y=reshape(x,4,5)


y =


     1     5     9    13    17
     2     6    10    14    18
     3     7    11    15    19
     4     8    12    16    20


从上面可以很清楚的看出来,将一个1*20的行向量通过reshape变成一个4*5的矩阵,注意新得到的矩阵中元素的顺序,是先填满第一列再填满第二列。。。

而我默认以是是先填满第一行再填满第二行。。。

也就是我心里一直想的结果应该是这是这样子的:

y =


     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
    16    17    18    19    20

因为我在程序中是取第一行为头30ms数据,第二行为第二个30m数据的,但实际上不是我想的那样子……


一晚上时间啊……

使用matlab自带的函数时Help它一个固然重要,要不你不知道怎么用,但还是用一个简单的例子看一下结果为好,比如这个reshape函数,如果我早一点运行这么一个简单的结果就不会耗一晚上的时间了……

教训啊教训……

满眼都是泪啊……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值