Borrar filtros
Borrar filtros

How to effectively remove the DC component from a frequency spectrum analysed using Welch's Method?

5 visualizaciones (últimos 30 días)
I am looking at ultrasound signals using the Welch Transform in the frequency range 0 - 5 MHz, the section of code for which is below. I am getting peaks around 0-1 MHz in my results that I do not believe are real, I have corrected for the DC component by taking the mean from the data, however there is still a small peak at this frequency even when using an ideal sine wave generated in MATLAB (red box in images, Fig. 1 generated data, Fig 3. actual data). This cause significant problems due to the low signal levels in the actual data. Is there any obvious reason this is still present or how to get rid of it? Thanks
%% sample Welch
sample_line1 = datasample1transpose(1:datareclength, 1);
figure
plot(t, sample_line1);
title('Reference Pulse')
xlabel ('no of points'); grid; zoom;
no_pulses_per_line=input('Enter the number of pulses per line: ','s');
no_pulses_per_line = str2double(no_pulses_per_line);
for k = 1:no_pulses_per_line
figure
plot1 = plot(sample_line1);
title('Reference Pulse')
xlabel ('no of points'); grid; zoom;
disp('Click either side of region to zoom')
[x,y] = ginput(2);
set(gca, 'xlim',[x(1) x(2)]);
clear x y
disp('Click the start point')
[x,y] = ginput(1);
start_point = round(x(1));
%end_point =round(x(2));
end_point = start_point + 4095;
sample_section = sample_line1(start_point:end_point); [size_x, size_y] = size(sample_section); sample_section_mean_matrix = mean(sample_section).*ones(size_x, size_y); %sample_section_std_matrix = std(sample_section).*ones(size_x, size_y); sample_section_zero_mean = (sample_section - sample_section_mean_matrix); sample_section_padded = padarray(sample_section_zero_mean, 512);
Nfft = length(sample_section_padded); sample_sections (1:Nfft, k) = sample_section_padded;
end
frequency = linspace(0,sampling_freq,Nfft); freq_mhz = frequency/1000000;
Sensitivity_mhz_full = interp1(freq_profile, sensitivity, freq_mhz);
wsize = 2048; nover = wsize * 50/100; w = hann(wsize);
[welchsample, f] = pwelch(sample_sections, w, nover, frequency, sampling_freq ); % Welch's periodogram of the data welchsample1 = (sampling_freq./2).*welchsample; %% welchsampleav = mean(welchsample, 2);
welchsample1av =mean (welchsample1, 2);
welchsample1_corrected_recieve = welchsample1av'./Sensitivity_mhz_full; % correcting for sensitivity of receive probe
dBwelch = 10*log10(welchsample1_corrected_recieve);
figure plot(freq_mhz,dBwelch,'k'); title('Welch Spectrum'); xlabel('Frequency(MHz)'); ylabel('Amplitude (dB) '); set(gca,'xlim',[lower_lim upper_lim]);
  1 comentario
David Morrill
David Morrill el 21 de Jul. de 2022
I am having the exact same issue, even when I subtract out the average value of the data.
I then created a dataset with DC only and it still shows the hump that you are describing. Were you able to resolve this?

Iniciar sesión para comentar.

Respuestas (1)

Chinmayi Lanka
Chinmayi Lanka el 18 de En. de 2017
You can use the 'DCBlocker' system object that is available in the DSP System toolbox to remove the DC Component of the incoming signal. The following documentation provides a few examples on the usage of this system object: http://www.mathworks.com/help/dsp/ref/dsp.dcblocker-class.html
  1 comentario
Chintan Varia
Chintan Varia el 5 de Jun. de 2017
Hi Chinmayi Lanka. Do you have any idea, what should be the Normalized bandwidth of lowpass IIR filter and Order of lowpass IIR elliptic filter in DC Blocker to get output signal of 50Hz? My input signal is in continuous form.

Iniciar sesión para comentar.

Comunidades de usuarios

Más respuestas en  Power Electronics Control

Categorías

Más información sobre Frequency Transformations en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by