我對信號處理和濾波進行了研究。我創建了一個嘈雜的信號,我想用帶通濾波器來獲得我想要的頻率。 我產生噪聲信號「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
,現在我的問題是: 如何減少或減少對濾波信號的噪聲影響?我應該怎麼做才能在濾波後得到相同的最大信號幅值?
謝謝。
非常感謝您的建議。我之前使用這個樣本。最終結果稍微改善一點,但這對我來說還不夠。現在我正在尋找一些降噪或噪聲估算算法。有沒有關於它的任何信息?謝謝。 –
我改了一點例子。降低噪音將與信息量有關。爲了增加幅度信息,我分割了樣本數據,分別得到了估計的幅度和平均幅度。如果你想得到更準確的結果,你需要更多地獲取數據,並增加平均數。 – KKS