如何在频域中应用巴特沃斯低通滤波器并绘制新频率

时间:2019-05-22 01:33:28

标签: matlab signals signal-processing

我正在尝试获取一个嘈杂的信号,将其转换为频域,对它应用巴特沃斯低通滤波器以消除高频噪声,然后将其转换回时域,并使其适合正弦波。找到相对于系统中其他信号的相位。我已经很好地绘制了原始信号,将其转换为频域,并进行了绘制以确认一切正确。最高频率的频率应该是300KHz,并且还有很多其他噪声,其中大多数较低。

但是,我遇到了问题,试图成功滤除这种噪音。有人告诉我只能尝试使用一阶Butterworth过滤器,因为这部分是为了查看各种过滤器将如何与最终结果进行比较。

freq = 300000; % 300KHz frequency
fs = 1/ 0.0000000004;  % Sampling Frequency
T = 1/fs;    % Sampling period
L = 1000000; % Length of Signal (amount of points in a column)

wave2 = csvread(' ... ') % File location of noisy signal, just returns a
                         % matrix with time in one column and several
                         % waveform values in the others

wave2_real = wave2(:, [1,2]); % Real Component of Wave 2 vs Time
freq2_real = fft(wave2_real(:,2)); % Frequency domain of wave2_real

P2_2_real = abs(freq2_real / L);
P1_2_real = P2_2_real(1:L/2+1);
P1_2_real(2:end-1) = 2*P1_2_real(2:end-1);
f = fs*(0:(L/2))/L;

% Above four lines are just taken from documentation code

semilogy(f,P1_2_real) % log plot of frequency

[b,a] = butter(1, (freq) / (fs/2)); % 1st order butterworth lowpass filter,
                                    % Wn = 300KHz / (2.5GHz / 2)

freq2_real_filt = filtfilt(b, a, freq2_real);
P2_2_real_filt = abs(freq2_real_filt / L);
P1_2_real_filt = P2_2_real_filt(1:L/2+1);
P1_2_real_filt(2:end-1) = 2*P1_2_real_filt(2:end-1);

semilogy(f, P1_2_real_filt) % log plot

尽管未滤波的频率图在300KHz处有一个清晰的峰值,但滤波后的频率图却不能说相同。它在2500Hz处有一个很大的尖峰(我认为这只是四舍五入,因为沿x轴的分度为每分度2500Hz)。但是,可以减少高频噪声。

我几乎可以肯定,我的问题出在那条线上

freq2_real_filt = filtfilt(b, a, freq2_real);

尤其是freq2_real,它只是信号的英尺,具有复杂的分量。

我尝试将filtfilt应用于P2_2_real(为freq2_real绘制的部分),但没有任何更好的结果。我不确定是否需要更多信息,因为P2_2_real只是各种频率的幅值,但是我不确定提供给滤波器的信息是否足以确保在绘制时可以滤出正确的频率。 / p>

0 个答案:

没有答案
相关问题