2015-10-05 39 views
-1

我对信号处理和滤波进行了研究。我创建了一个嘈杂的信号,我想用带通滤波器来获得我想要的频率。 我产生噪声信号“Y”这段代码:在Matlab中对信号滤波产生的随机噪声效应

Fs = 16000;     % Sampling frequency 
fNy = Fs/2; 
T = 1/Fs;      % Sample time 
L = 60000;      % Length of signal 
t = (0:L-1)*T;    % Time vector 
% Sum of a 50 Hz , 5.8 , 12.6 , 120 Hz sinusoid 
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t) + sin(2*pi*5.8*t) + sin(2*pi*12.6*t); 
x1 = 15.3 * sin(2*pi*15.5 * t); 

a = 5.2; 
b = 35.5; 
r = a + (b-a).*rand(1,1); 
y = x + x1 + r*randn(size(t));  % Sinusoids plus noise 

和过滤我的信号通过像切比雪夫FIR算法得到15.5赫兹信号。我使用FDATool来设计带通滤波器。像这样:

Fs = 16000; % Sampling Frequency 

N    = 16 * 4096;  % Order 
Fc1   = 15.48; % First Cutoff Frequency 
Fc2   = 15.52; % Second Cutoff Frequency 
flag   = 'scale'; % Sampling Flag 
SidelobeAtten = 100;  % Window Parameter 
% Create the window vector for the design algorithm. 
win = chebwin(N+1, SidelobeAtten); 

% Calculate the coefficients using the FIR1 function. 
b = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag); 
Hd = dfilt.dffir(b); 

和使用MATLAB过滤功能,让我的愿望信号:

filteredSignal = filter(Hd.Numerator,1,y); 
max_amp = max(filteredSignal); 

和过滤后,我得到最大的信号幅度。它工作正常。但对我来说存在一个很大的问题。 由于随机噪声我有过滤信号最大值的不同值。 喜欢:10.552 , 10.493 , 10.876 , 10.524 , 10.617

,当我降低随机噪声值是这样的:

r = 0.001; 
y = x + x1 + r*randn(size(t));  % Sinusoids plus noise 

我得到filterd信号最大的这个值,如:

10.541 , 10.541 ,10.541 , 10.541, 10.541 

,现在我的问题是: 如何减少或减少对滤波信号的噪声影响?我应该怎么做才能在滤波后得到相同的最大信号幅值?

谢谢。

回答

0
Fs = 16000;     % Sampling frequency 
fNy = Fs/2; 
T = 1/Fs;      % Sample time 
L = 200000;      % Length of signal 
t = (0:L-1)*T;    % Time vector 
% Sum of a 50 Hz , 5.8 , 12.6 , 120 Hz sinusoid 
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t) + sin(2*pi*5.8*t) + sin(2*pi*12.6*t); 
x1 = 15.3 * sin(2*pi*15.5 * t); 

a = 5.2; 
b = 35.5; 
r = a + (b-a).*rand(1,1); 
y = x + x1 + r*randn(size(t));  % Sinusoids plus noise 

N    = 16 * 4096;  % Order 
Fc1   = 15.48; % First Cutoff Frequency 
Fc2   = 15.52; % Second Cutoff Frequency 
flag   = 'scale'; % Sampling Flag 
SidelobeAtten = 100;  % Window Parameter 
% Create the window vector for the design algorithm. 
win = chebwin(N+1, SidelobeAtten); 

% Calculate the coefficients using the FIR1 function. 
b = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag); 
Hd = dfilt.dffir(b); 

filteredSignal = filter(Hd.Numerator,1,y); 

Testim=1/15.5; 
t0=0; 
Ts=1/Fs; 

steadyData=filteredSignal(100001:200000); 

numAvr=100; 

samLen=length(steadyData)/numAvr; 

m=[]; 

for j=0:numAvr-1; 

    s0=steadyData(1+j*samLen:j*samLen+samLen); 

    Omega=fminbnd('jomega',(2*pi/Testim)*.9,(2*pi/Testim)*1.1, [0,1.0e-30 ], s0,t0,Ts); 
    [Amplitude,Theta,RMS]=sinefit2(s0,Omega,t0,Ts); 

    freq=Omega/(2*pi); 

    if 15.4<=freq & freq<=15.6 
     m=[m Amplitude]; 
    else 
    end 

end 


avrAmp=(1/length(m))*sum(m) 

我不知道你想要做什么,确切地说。但是,为了减少噪声影响,我们可以使用最小二乘法,如果我们知道一些信息,例如频率,采样率等,我给你举个例子。你可以在“ http://www.mathworks.com/matlabcentral/fileexchange/3730-sinefit“。我认为,在拟合之后,振幅通常会更相似,但并非总是如此。

+0

非常感谢您的建议。我之前使用这个样本。最终结果稍微改善一点,但这对我来说还不够。现在我正在寻找一些降噪或噪声估算算法。有没有关于它的任何信息?谢谢。 –

+0

我改了一点例子。降低噪音将与信息量有关。为了增加幅度信息,我分割了样本数据,分别得到了估计的幅度和平均幅度。如果你想得到更准确的结果,你需要更多地获取数据,并增加平均数。 – KKS

0

如果你想获得始终相同的幅度,你应该修复你的随机数。每当你运行你的代码时,matlab将生成不同的随机数,并且SNR将会改变。固定随机数的一种方法是初始化随机数发生器。

请尝试下面的代码。

Fs = 16000;     % Sampling frequency 
fNy = Fs/2; 
T = 1/Fs;      % Sample time 
L = 60000;      % Length of signal 
t = (0:L-1)*T;    % Time vector 
% Sum of a 50 Hz , 5.8 , 12.6 , 120 Hz sinusoid 
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t) + sin(2*pi*5.8*t) + sin(2*pi*12.6*t); 
x1 = 15.3 * sin(2*pi*15.5 * t); 

a = 5.2; 
b = 35.5; 
rng(0,'twister') 
r = a + (b-a).*rand(1,1); 
rng(0,'twister') 
y = x + x1 + r*randn(size(t));  % Sinusoids plus noise 

plot(y) 

有了这些代码,你可以看到总是相同的信号y。

+0

感谢您的重播,我想模拟嘈杂系统的真实情况并处理一些频率行为。 (如相位,幅度,...) 其实我的信号的SNR每次都会改变。我正在寻找一种解决方案来减少滤波信号的随机噪声影响。是否有任何想法获得信噪比或与滤波信号有关的任何噪声信号参数?另一方面,我如何计算与其他正弦信号相关的单个噪声信号(如snr或psnr,...)的参数? 谢谢。 –

+0

没有什么'魔术'技巧会总是将嘈杂的信号转化为原始信号。算法非常高效,但是,随着噪声的幅度相对于信号的幅度增加,您将会有损失。告诉我,如果你想让我更详细地解答 – BillBokeey

+0

非常感谢。我正在寻找降噪算法来提高我的计算精度。你能告诉我该怎么办?滤波信号的幅度精度非常重要。我从振动系统得到这个信号。你有什么想法?谢谢。 –