2015-01-14 47 views
0

我有一个信号,我想设置小于特定点的值为零(在我的示例中,值为0.005),我知道它与滤波过程类似但我想彻底清理从静态噪声信号,所以我的代码是:设置信号的具体值为零

close all;clear all;clc; 
sig=audioread('sp1.mp3'); 
N=length(sig); 
n_sig=zeros(N,1); 
for i=1:N 

    n_sig= sig((sig>0.005)); %the new signal 

end 

的问题是,它创建了一个无限循环,我必须手动停止码,也它给了我只有正面的价值观,但我也想要小于-0.005的负数,任何想法如何修改我的代码?提前致谢。

+0

了” “你用过的循环,它是为了什么? – mehmet

+3

忘记for循环:'n_sig = sig; n_sig(abs(n_sig)<0.005)= 0;' – Hoki

+0

以及for循环是为了搜索信号的每个元素 –

回答

3

如果你有一个数组A并要设置一些特定的值为零,这:

A=rand(100,1)-0.5; % example array 

A(abs(A)<0.005)=0 

如果你想创建一个没有这些值的新数组,做

B=A(abs(A)>0.005); 
2

只需使用布尔检索和绝对值:

sig(abs(sig) < 0.005) = 0; 

此修改就地信号。如果您不想修改原始矢量,只需复制它,然后在副本上执行这个就地操作。