我对信号处理和滤波进行了研究。我创建了一个嘈杂的信号,我想用带通滤波器来获得我想要的频率。 我产生噪声信号“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