2015-10-05 134 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

非常感謝。我正在尋找降噪算法來提高我的計算精度。你能告訴我該怎麼辦?濾波信號的幅度精度非常重要。我從振動系統得到這個信號。你有什麼想法?謝謝。 –