我有一个信号,我想将小于特定点的值设置为零(在我的示例中,值为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 :(得分:3)
如果您有一个数组A
并且想要将某些特定值设置为零,请执行以下操作:
A=rand(100,1)-0.5; % example array
A(abs(A)<0.005)=0
如果要创建没有这些值的新数组,请执行
B=A(abs(A)>0.005);
答案 1 :(得分:2)
只需使用布尔索引和绝对值:
sig(abs(sig) < 0.005) = 0;
这会就地修改信号。如果您不想修改原始矢量,只需复制它并在副本上进行就地操作。