【发布时间】:2015-10-05 17:59:14
【问题描述】:
我正在研究信号处理和过滤。我创建了一个嘈杂的信号,我想使用带通滤波器来获得我想要的频率。 我通过此代码生成噪声信号“y”:
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
然后我通过像 Chebyshev 这样的 FIR 算法过滤我的信号以获得 15.5 Hz 的信号。我使用 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
我得到过滤信号最大值的这个值,例如:
10.541 , 10.541 ,10.541 , 10.541, 10.541
现在我的问题是: 如何减少或减少对过滤信号的噪声影响?滤波后信号的最大振幅值相同怎么办?
谢谢。
【问题讨论】:
标签: matlab filter signal-processing