将信号的特定值设置为零

setting specific values of a signal to zero

我有一个信号,我想将小于特定点的值设置为零(在我的示例中,该值为 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 的负值,任何想法如何修改我的代码?提前致谢。

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

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

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

如果您有一个数组 A 并且想要将一些特定值设置为零,请执行以下操作:

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

A(abs(A)<0.005)=0

如果您想创建一个没有这些值的新数组,请执行

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