低通滤波 高通滤波matlab,在C中实现简单的高通和低通滤波器

尝试使用portaudio记录一些数据,然后使用算法过滤器更改录制的语音,然后播放.我已经验证了很多(来自示例),但我对C很新,我认为在我的过滤器实现中我做了一些愚蠢的事情.

#if LOW_PASS

{

float RC = 1.0/(CUTOFF*2*3.14);

float dt = 1.0/SAMPLE_RATE;

float alpha = dt/(RC+dt);

float filteredArray[numSamples];

filteredArray[0] = data.recordedSamples[0];

for(i=1; i

filteredArray[i] = filteredArray[i-1] + (alpha*(data.recordedSamples[i] - filteredArray[i-1]));

}

data.recordedSamples = filteredArray;

}

#endif

#if HIGH_PASS

{

float RC = 1.0/(CUTOFF*2*3.14);

float dt = 1.0/SAMPLE_RATE;

float alpha = RC/(RC + dt);

float filteredArray[numSamples];

filteredArray[0] = data.recordedSamples[0];

for (i = 1; i

filteredArray[i] = alpha * (filteredArray[i-1] + data.recordedSamples[i] - data.recordedSamples[i-1]);

}

data.recordedSamples = filteredArray;

}

#endif

当录制的信号试图通过这些过滤器时,我得到以下错误:

*** glibc detected *** ./paex_record: free(): invalid pointer: 0xbfd68600 ***

======= Backtrace: =========

/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb75e2ee2]

./paex_record[0x8048fe5]

/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75864d3]

./paex_record[0x80487f1]

======= Memory map: ========

08048000-0804a000 r-xp 00000000 08:05 2363767 /home/svictoroff/Documents/CompArch/portaudio/examples/paex_record

...

bfd68000-bff1a000 rw-p 00000000 00:00 0 [stack]

Aborted (core dumped)

我真的不确定这里发生了什么.有什么想法吗?

在脚本终止时从此处调用Free:

Pa_Terminate();

if( data.recordedSamples ) /* Sure it is NULL or valid. */

free( data.recordedSamples );

if( err != paNoError )

{

fprintf( stderr, "An error occured while using the portaudio stream\n" );

fprintf( stderr, "Error number: %d\n", err );

fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );

err = 1; /* Always return 0 or 1, but no other return codes. */

}

return err;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值