关于Borland C++ Builder 奇怪的问题

XIAOQI809 2010-10-23 03:34:12
用Borland C++ Builder 6 用了两年了,一直有很奇怪的情况发生。之前的先不说了,就说这两天发生的情况
我是做audio coding的,想通过filter把输入信号变小。问题来了,有的时候滤波之后的信号是变小的,有的时候不是。我就在查,然后发现:在文件开头,
#define N 2048 /* frame shift */
#define W N+1024 /* frame size */
这样写,滤波之后信号energy变小
#define N 2048 /* frame shift */
#define W 3072 /* frame size */
这样写,滤波之后信号energy变大
其他地方都没有改,请问这个是Borland C++ Builder 6的问题,还是我程序写的时候有问题?我不知道为什么我写的程序会跟预定义的W的值有关系
再有就是,在后面的程序里,如果我写
for (j=0;j<W-NN;j++)
winbuf[j]=winbuf[NN+j];
for (j=W-NN;j<W;j++)
winbuf[j]=nbuf[(W-N)/2+subframe+j-W+NN];
滤波之后信号energy变小,

如果写
for (j=0;j<N-NN+1024;j++)
winbuf[j]=winbuf[NN+j];
for (j=N-NN+1024;j<N+1024;j++)
winbuf[j]=nbuf[(W-N)/2+subframe+j+NN-N-1024];
滤波之后信号energy变大

如果把上面的改成
for (j=0;j<N-NN+1024;j++)
winbuf[j]=winbuf[NN+j];
for (j=N-NN+1024;j<N+1024;j++)
winbuf[j]=nbuf[(W-N)/2+subframe+j+NN-W];
滤波之后信号energy变小,

再如果把上面的改成
for (j=0;j<N-NN+1024;j++)
winbuf[j]=winbuf[NN+j];
for (j=N-NN+1024;j<N+1024;j++)
winbuf[j]=nbuf[(W-N)/2+subframe+j+NN-(W)];
滤波之后信号energy变大


包括之前遇到过一些问题,更改文件名或者某个函数名以后,就解决了。。。

到底是为什么呢,请教各位大虾了!!!
...全文
251 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
XIAOQI809 2010-11-02
  • 打赏
  • 举报
回复
谢谢楼上几位,加括号确实是应该加的
关于其他问题呢,还请有经验的朋友帮忙解答一下啊!
bigfog 2010-11-01
  • 打赏
  • 举报
回复
#define W (N+1024) /* frame size */
lhy 2010-10-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kerbcurb 的回复:]
NN是不是被替换成:20482048?
[/Quote]
不会的预定义转换是对整个标识符,不会将标识符的一部分转换。
CCED136 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xili 的回复:]
呵呵

#define W (N+1024)
[/Quote]

好,注意使用括号
GoAwayZ 2010-10-26
  • 打赏
  • 举报
回复
细致细节
xili 2010-10-23
  • 打赏
  • 举报
回复
呵呵

#define W (N+1024)
XIAOQI809 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kerbcurb 的回复:]
NN是不是被替换成:20482048?
[/Quote]

应该不是这个问题,我有#define NN 16 而且有输出过来看,NN确实是16
kerbcurb 2010-10-23
  • 打赏
  • 举报
回复
是你的问题
#define N 2048 /* frame shift */
#define W N+1024 /* frame size */
这样写,滤波之后信号energy变小
#define N 2048 /* frame shift */
#define W 3072 /* frame size */

这里的for (j=0;j<W-NN;j++)
winbuf[j]=winbuf[NN+j];
NN是不是被替换成:20482048?
你把NN换成nn看看
XIAOQI809 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lhylhy 的回复:]
按照C语言,预定义好像是直接代入
subframe+j-W+NN会被替换成subframe+j-N+1024+NN,
所以被改变了。
[/Quote]
你说的确实是一个问题,我再看看我程序还有类似的问题没有,因为现在的情况是,写正确的预定义,结果是错误的,写错误的预定义,结果更好

麻烦看一下http://topic.csdn.net/t/20040404/14/2923532.html的74楼
[Quote:]

我用BCB6,有些奇怪的问题让我百思不得其解:

1、我有两个计算语句,如果在这两句之前加一句ShowMessage语句,随便show什么内容,那么计算语句就会正确,否则计算就会经常出错,当然偶尔也会对。真不明白ShowMessage语句怎么会对计算语句造成影响?

2、我的Form上有两个button,按button1进行计算,按button2把计算数据写到文件中,也就是普通的 "fprintf "写文件语句,令人奇怪的是我对fprintf语句注释掉后,居然会对button1里面的计算造成影响。

怪!!!请高手指点!
[/Quote]
请问这又是为什么呢,第一个问题我也遇到过
lhy 2010-10-23
  • 打赏
  • 举报
回复
按照C语言,预定义好像是直接代入
subframe+j-W+NN会被替换成subframe+j-N+1024+NN,
所以被改变了。
XIAOQI809 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wewaa 的回复:]
帮你顶,是不是预定义顺序的问题?
[/Quote]
可是先定义的N后定义的W啊
而且不是因为W=N+1024有问题,是直接写W=3072有问题
先谢谢你哈
laowang2 2010-10-23
  • 打赏
  • 举报
回复
帮你顶,是不是预定义顺序的问题?

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧