Waterfall diagram and fft for a vibration of an electric motor

Hello Everyone,
That consist of a test going slowyly from 0 to 3000 RPM of a motor, from which i want to do a waterfall diagramm to check for resonances, but i cant manage to do so. can somebody help?
I have an own code i tried to do but i dont hink its correct. here it is:
clear all
close all
% % % For WorkStation dSpace recorders!
file_name = 'exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated';
s=load(file_name);
%%% Select window type for FFT
% a=no window, b=Rectangular, c=Hann, d=Hamming, e=Flattop, f=Blackman-Harris, g=Nuttall, h=Chebyshev
winType = 'b';
length=length(s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.X(1).Data);
x=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.X(1).Data(1:length);
%%% Important base recording params
Fs=20000; %%% sampling frequency [Hz]
T=1/Fs;
%%% important base FFT params
fft_cycles = 2 ;
speed_aver_window = 1; %%% in sec
speed_aver_wind_points = speed_aver_window / T;
multipleORHz = 1; %%% 1 - multiply, 2 is Hz
%%% main indexis
index_speed_kistler = 1;
index_torque_an = 2;
index_torque_an_filt = 3;
index_vibr = 4;
index_vibr_filt = 5;
index_iq_act = 7;
index_id_act = 6;
index_speed_sw = 8;
index_speed_sew = 9;
%%% Define staret point of FFT:
time_start_fft =40;
point_start_fft = round(time_start_fft / T);
%%%% Indexes for analysis
index_main_speed = index_speed_kistler;
index_main_torque = index_torque_an_filt;
index_main_vibr = index_vibr;
speed_main = s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_main_speed).Data(1:length);
torque_main = s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_main_torque).Data(1:length);
vibr_main = s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_main_vibr).Data(1:length);
%%% Extraction of currents
Id_act_1=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_id_act).Data(1:length);
Iq_act_1=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_iq_act).Data(1:length);
%%% Extraction of speed and torque
SEW_speed=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_speed_sew).Data(1:length);
Kistler_speed=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_speed_kistler).Data(1:length);
Kistler_torque_an=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_torque_an).Data(1:length);
Kistler_torque_an_filt=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_torque_an_filt).Data(1:length);
N_pres=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_speed_sw).Data(1:length);
vibr=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_vibr).Data(1:length);
vibr_filt=s.exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.Y(index_vibr_filt).Data(1:length);
%%% plot results of the test
set(gcf,'color','white')
ax1=subplot(5,1,1);
plot(x,Kistler_torque_an,'r', x,Kistler_torque_an_filt,'b');
title('Torque Kistler');
xlabel('Time [s]')
ylabel('Torque [Nm]');
grid on
ax2=subplot(5,1,2);
plot(x,N_pres,'r',x,SEW_speed,'b',x,Kistler_speed,'g');
title('Speed');
xlabel('Time [s]')
ylabel('Speed [rpm]');
legend('Sensor','SEW','Kistler');
grid on
ax3=subplot(5,1,3);
plot(x,vibr,'.- r', x,vibr_filt,'b');
title('Vibrations');
xlabel('Time [s]')
ylabel('Acceleration [g]');
grid on
ax4=subplot(5,1,4);
plot(x,Id_act_1,'r');
title('Id act vs ref');
xlabel('Time [s]')
ylabel('Id [A]');
grid on
ax5=subplot(5,1,5);
plot(x,Iq_act_1,'r');
title('Iq act vs ref');
xlabel('Time [s]')
ylabel('Iq [A]');
grid on
linkaxes([ax1,ax2,ax3,ax4,ax5],'x');
%%% Making window to analyze FFT
speed_main_rpm_aver = abs(mean(speed_main(point_start_fft:(point_start_fft + speed_aver_wind_points))));
speed_rps = abs(speed_main_rpm_aver / 60);
period = 1 / speed_rps;
window_sec = fft_cycles * period;
window_poins = round(window_sec * Fs);
%%% Select and build desired window
switch lower(winType)
case 'a' % No window (raw data)
win = ones(window_poins,1);
case 'b' % Rectangular
win = rectwin(window_poins);
case 'c' % Hann
win = hann(window_poins);
case 'd' % Hamming
win = hamming(window_poins);
case 'e' % Flattop
win = flattopwin(window_poins);
case 'f' % Blackman-Harris
win = blackmanharris(window_poins);
case 'g' % Nuttall
win = nuttallwin(window_poins);
case 'h' % Chebyshev
win = chebwin(window_poins, 60); % 60 dB sidelobe suppression
otherwise
error('Unknown winType "%s"', winType);
end
% Compute mean values for DC removal
torque_main_aver = mean(torque_main(point_start_fft:(point_start_fft + speed_aver_wind_points)));
vibr_main_aver = mean(vibr_main(point_start_fft:(point_start_fft + speed_aver_wind_points)));
% Preallocate arrays
time_wind = zeros(window_poins, 1);
torque_wind = zeros(window_poins, 1);
vibr_wind = zeros(window_poins, 1);
speed_wind = zeros(window_poins, 1);
% Create windowed signals
j = 1;
for i = point_start_fft:(point_start_fft + window_poins - 1)
time_wind(j) = x(i);
torque_wind(j) = (torque_main(i) - torque_main_aver) * win(j);
vibr_wind(j) = (vibr_main(i) - vibr_main_aver) * win(j);
speed_wind(j) = speed_main(i);
j = j + 1;
end
figure
set(gcf,'color','white')
bx1=subplot(3,1,1);
plot(time_wind,torque_wind,'r');
title('Torque window');
xlabel('Time [s]')
ylabel('Torque [Nm]');
grid on
bx2=subplot(3,1,2);
plot(time_wind,vibr_wind,'r');
title('Acceleretion window');
xlabel('Time [s]')
ylabel('Acceleration [g]');
grid on
bx3=subplot(3,1,3);
plot(time_wind,speed_wind,'r');
title('Speed window');
xlabel('Time [s]')
ylabel('Speed [rpm]');
grid on
linkaxes([bx1,bx2,bx3],'x');
%%% FFT of Vibrations
L=window_poins;
t = (0:L-1)*T; % Time vector
Y1=fft(vibr_wind,L);
P2 = abs(Y1/L).^2;
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
if multipleORHz == 1
freq_ref = speed_main_rpm_aver/60;
freq_plot_lim = 100;
elseif multipleORHz == 2
freq_ref = 1;
freq_plot_lim = 4000;
end
f1 = (Fs*(0:(L/2))/L)/(freq_ref);
figure
set(gcf,'color','white')
bar(f1,P1)
title('Single-Sided Amplitude Spectrum of X(t)')
xlabel('f (multiple of mechanical frequency)')
xlim([0 freq_plot_lim])
ylabel('Absolute value of Harmonic VIBRATIONS [g]')
% --- Define cutoff RPM for data selection ---
rpm_min = 0;
rpm_max = 4200;
% Find indices corresponding to rpm_min and rpm_max in time vector x
ind_min = find(speed_main >= rpm_min, 1, 'first');
ind_max = find(speed_main <= rpm_max, 1, 'last');
% Cut signals based on these indices
time_cut = x(ind_min:ind_max);
rpm_cut = speed_main(ind_min:ind_max);
vibr_cut = vibr_main(ind_min:ind_max);
if any(rpm_cut <= 0)
warning('RPM data contains non-positive values. Fixing...');
rpm_cut(rpm_cut <= 0) = NaN; % Or interpolate, or remove
% Option 1: interpolate missing values (if feasible)
rpm_cut = fillmissing(rpm_cut, 'linear');
% Option 2: truncate all rows with NaNs (if that's acceptable)
validIdx = ~isnan(rpm_cut);
vibr_cut = vibr_cut(validIdx);
rpm_cut = rpm_cut(validIdx);
end
% Sampling frequency from original code
Fs = 4000; % Hz
% % ---- Generate order map and waterfall plot ----
% Assuming you have the rpmordermap function in your path.
% If not, I can help to replace it with an equivalent.
% Frequency-based RPM map
[map, freq, rpm_axis, time_map, res] = rpmordermap(vibr_cut, Fs, rpm_cut, 2, ...
'Scale', 'dB', 'Window', 'hann', 'Amplitude', 'rms');
[fr, rp] = meshgrid(freq, rpm_axis);
% Waterfall plot in frequency
figure;
waterfall(fr, rp, map');
view(6, -60);
grid on;
xlabel('Frequency [Hz]');
ylabel('RPM');
zlabel('Amplitude [dB]');
title('Waterfall Plot (Frequency Map)');
% --- FFT over speed steps (similar to your reference code) ---
% Define speed steps (adjust based on your rpm range)
speed_steps = rpm_min:100:rpm_max;
% Define FFT window length in seconds (e.g., 0.5 s)
fft_window_sec = 0.5;
fft_window_points = round(fft_window_sec * Fs);
% Initialize figure for FFT results
for i = 1:length(speed_steps)
% Find start time index closest to current speed step
idx_start = find(rpm_cut >= speed_steps(i), 1, 'first');
if isempty(idx_start) || (idx_start + fft_window_points - 1) > length(vibr_cut)
continue; % Skip if index invalid or window exceeds data length
end
% Extract segment
segment = vibr_cut(idx_start : idx_start + fft_window_points - 1);
time_segment = time_cut(idx_start : idx_start + fft_window_points - 1);
% Remove DC
segment = segment - mean(segment);
% Apply Hann window
winvec = hann(length(segment));
% FFT
L = length(segment);
Y = fft(segment .* winvec);
P2 = abs(Y / L);
P1 = P2(1 : floor(L/2) + 1);
P1(2:end-1) = 2 * P1(2:end-1);
f = Fs * (0:(L/2)) / L;
% Plot time-domain and FFT for this step
subplot(2,1,1);
plot(time_segment, segment);
title(sprintf('Vibration at Speed Step: %d RPM', speed_steps(i)));
xlabel('Time [s]');
ylabel('Acceleration [g]');
grid on;
hold on;
subplot(2,1,2);
bar(f, P1);
title(sprintf('FFT Spectrum at Speed Step: %d RPM', speed_steps(i)));
xlabel('Frequency [Hz]');
ylabel('Amplitude');
grid on;
hold on;
end
code should be correct until the part of the water fall.
also the index of the data is no longer 1 to 9 but 1 to 3 being speed-raw vibration- filtered vibration
I would appreciete if somebody could help me make a code i can use with different data sets, maybe some have 1 to 6 and with the option of ploting the sigbals at the beginning and the fft how in the code.
Thanks in advanced

 Accepted Answer

hello again
this is a demo based on your previously posted data (could not load the one in this post)
spectrogram + time plot (with aligned time axes)
code :
%% For WorkStation dSpace recorders!
file_name = 'exp1_HV_eaux_B0_ASQ_N7_vibrations_NT3a_pos_3000rpm_20kHz_foam';
s=load(file_name);
%% use this trick to avoid using the long filename every time
StrName=fieldnames(s);
StrName=StrName{1};
%% main Code
time = s.(StrName).X.Data;
duration = time(end) - time(1);
dt = mean(diff(time));
Fs = 1/dt;
%% main indexes
index_speed_kistler = 1;
index_torque_an = 2;
index_torque_an_filt = 3;
index_vibr = 4;
index_vibr_filt = 5;
index_iq_act = 7;
index_id_act = 6;
index_speed_sw = 8;
index_speed_sew = 9;
%%%% Indexes for analysis
index_main_speed = index_speed_sw;
index_main_torque = index_torque_an_filt;
index_main_vibr = index_vibr;
vibr_main = s.(StrName).Y(index_main_vibr).Data;
%% Extraction of speed and torque
SEW_speed=s.(StrName).Y(index_speed_sw).Data;
Kistler_speed=s.(StrName).Y(index_speed_kistler).Data;
% extract time portion
time_start_fft = 0;
% ind = (time>=time_start_fft) & (time<=time_start_fft+duration);
ind = (SEW_speed>=1);
time = time(ind);
vibr_main = vibr_main(ind);
SEW_speed = SEW_speed(ind);
Kistler_speed = Kistler_speed(ind);
%% FFT plot
nfft = 1024*8; %
Overlap = 0.75; % (75% ) overlap
df = Fs/nfft;
% check signal stationnarity with spectrogram : OK
nfft = 1024; %
Overlap = 0.75; % (75% ) overlap
[S,F,T] = spectrogram(vibr_main,hanning(nfft),round(Overlap*nfft),nfft,Fs,'yaxis','minthreshold',-80); % WINDOW,NOVERLAP,NFFT,Fs
SEW_speed_interp = interp1(time,SEW_speed,T);
% freq_normalized = F*60/SEW_speed_interp;
dBrange = 80; % dB range (anything below max - dBrange will not be displayed)
S_dB= 20*log10(abs(S));
figure;
ax = gobjects(2,1);
ax(1) = subplot(2,1,1);
imagesc(T,F,S_dB);
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram');
colormap('jet')
hcb=colorbar('ver'); % colorbar handle
hcb.FontSize = 9;
hcb.Title.String = "dB";
hcb.Title.FontSize = 15;
set(gca,'YDir','normal');
xlim([T(1) T(end)]);
ylim([0 5000]);
caxis([max(S_dB(:))-dBrange max(S_dB(:))]);
ax(2) = subplot(2,1,2);
plot(ax(end), time,vibr_main)
grid on
xlim([T(1) T(end)]);
% Set the width and height of all axes to the min width & height
allAxPos = vertcat(ax.Position);
allAxPos(:,3:4) = min(allAxPos(:,3:4)).*ones(numel(ax),1);
set(ax,{'position'},mat2cell(allAxPos,ones(numel(ax),1),4))

11 Comments

Hello to all,
I attach an image of my Waterfall diagramm results, as you can see there are several frequencies that appear in parallel pairs with the same amplitude along the whole RPM range, my assumption is that these pairs represent a single frequency located in the middle but for some reason it is being represented as in the image, does anyone have any suggestion or idea how this could be solved in the script
there is basically the same problem as in the other post - the code itself is fine , you can also use mine below, I believe there is an issue in your data acquisition
can yiu describe your experimental set up , does your motor connect to a load , a gearbox ??
clear all
close all
%% For WorkStation dSpace recorders!
% file_name = 'exp1_HV_eaux_B0_ASQ_N7_vibrations_NT3a_pos_3000rpm_20kHz_foam.mat';
file_name = 'exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_aut.mat';
s=load(file_name);
%% use this trick to avoid using the long filename every time
StrName=fieldnames(s);
StrName=StrName{1};
%% main Code
time = s.(StrName).X.Data;
duration = time(end) - time(1);
dt = mean(diff(time));
Fs = 1/dt;
%%%% Indexes for analysis
% index_main_speed = index_speed_sw;
% index_main_torque = index_torque_an_filt;
% index_main_vibr = index_vibr;
% also the index of the data is no longer 1 to 9 but 1 to 3 being speed-raw vibration- filtered vibration
index_main_speed = 1;
index_main_vibr = 2;
vibr_main = s.(StrName).Y(index_main_vibr).Data;
%% Extraction of speed and torque
speed=s.(StrName).Y(index_main_speed).Data;
% extract time portion
time_start_fft = 0;
% ind = (time>=time_start_fft) & (time<=time_start_fft+duration);
ind = (speed>=1);
time = time(ind);
vibr_main = vibr_main(ind);
speed = speed(ind);
%% FFT plot
nfft = 1024*8; %
Overlap = 0.75; % (75% ) overlap
df = Fs/nfft;
% check signal stationnarity with spectrogram : OK
nfft = 1024*2; %
Overlap = 0.75; % (75% ) overlap
[S,F,T] = spectrogram(vibr_main,hanning(nfft),round(Overlap*nfft),nfft,Fs); % WINDOW,NOVERLAP,NFFT,Fs
T = T+time(1); % because T otherwise assumes time start at 0 which is here not the case
speed_interp = interp1(time,speed,T);
% freq_normalized = F*60/SEW_speed_interp;
dBrange = 60; % dB range (anything below max - dBrange will not be displayed)
S_dB= 20*log10(abs(S));
figure;
ax = gobjects(2,1);
ax(1) = subplot(2,1,1);
imagesc(T,F,S_dB);
ylabel('Frequency (Hz)');
title('Spectrogram');
colormap('jet')
hcb=colorbar('ver'); % colorbar handle
hcb.FontSize = 9;
hcb.Title.String = "dB";
hcb.Title.FontSize = 15;
set(gca,'YDir','normal');
xlim([T(1) T(end)]);
ylim([0 1500]);
caxis([max(S_dB(:))-dBrange max(S_dB(:))]);
ax(2) = subplot(2,1,2);
plot(ax(end), time,speed)
xlabel('Time (s)');
ylabel('RPM');
grid on
xlim([T(1) T(end)]);
% Set the width and height of all axes to the min width & height
allAxPos = vertcat(ax.Position);
allAxPos(:,3:4) = min(allAxPos(:,3:4)).*ones(numel(ax),1);
% enlarge spectrogram plot height and reduce time plot height
dh = allAxPos(1,4)*0.7;
allAxPos(1,4) = allAxPos(1,4)+dh;
allAxPos(1,2) = allAxPos(1,2)-dh;
allAxPos(2,4) = allAxPos(2,4)-dh;
set(ax,{'position'},mat2cell(allAxPos,ones(numel(ax),1),4))
linkaxes(ax,'x');
NB that I had to shorten the mat file filename
In MATLAB, variable names, function names, and other identifiers are limited to a maximum of 63 characters. This restriction ensures compatibility and efficient memory usage. If you attempt to use a name longer than 63 characters, MATLAB will automatically truncate it to the first 63 characters.
so in my code I used the filename
file_name = 'exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_aut.mat';
and not :
file_name = 'exp1_acoustic_cpm150A0_ASQ_N7_30x100rpmx2sec_20kHz_2kHz_LPF_automated.mat';

Yes ofc.

So basically this setup I'm doing is pretty simple.

I lay horizontally my PMSM over a foam mat so that it's decouple from everything.

We place it over our test bench but that shouldn't matter since the foam decouples the underneath.

Then I place a sensor with loctyte over the housing, without the cable acting against its weight.

Then the data goes through a dspace device and that's it

As of R2025a, namelengthmax is increased to 2048.
The restriction was never on the length of data filenames -- data filenames are restricted by operating system.
For Windows, the normal maximum total path length is 260 characters (there is an alternative naming scheme that allows much longer, but it is not in common use.)
For Linux the maximum length of a bare filename is 255, with the total path length being limited to 4096.
For MacOS the maximum length of a bare filename is 255, with the total path length being experimentally 1016 (according to one test on MacOS Yosemited.)
hello Walter - yes indeed you're right
the "true" reason behind my comment is that as I use the filename in the script to access the different fields in an automatic way , like :
s=load(file_name);
%% use this trick to avoid using the long filename every time
StrName=fieldnames(s);
StrName=StrName{1};
%% main Code
time = s.(StrName).X.Data; % etc...
- so the restriction that applies on the variable name length implies here to use also a filename that does not exceed 63 characters
hello again
ok, the setup seems simple , but as you stated in the other post , there is definitiveley a difference between what our ftt code with the dSpace data gives vs. the oscilloscope (you speak about it in the other post.)
are you using the same sensors , conditionning unit between the dSpace and the oscilloscope ?
have you tested the dSpace system with simple signals like a sine wave (from a signal generator) , then test the sensor with a shaker (or a loudspeaker) again with simple signals (sine , square , chirp) etc..
the goal is to try to identify the root cause why signals acquired withe the dSpace seems to be quite different from what the oscilloscope shows (can you also record time data with your scope ?)
in the dSpace system are you doing any processing between the ADC output and the block that store the data ? the "raw" data is truly raw ? is that just the ADC reading ?
Hi Mathieu,
I cant really tell about the convetion of the ozciloscope, but i can ask around to a coworker that should know,
As for the test you proposed i will try simple signals just to see if i have the same problem or not. I will let you know the results.
As of the raw data, the filter just lowers the amplitude of the raw signal, i can tell you when i go to the setup next time what kind of ADC we use for it, but as i mentioned it just lowers the amplitude of the signal to get rid of some noise
@Eduardo, I accepted the answer from @Mathieu NOE, on your behalf, since it seems the problems are solved as much as they can be. It is a courtesy to accept an answer, especially when the answerer provides so much good advice.
again thank you @William Rose to take care of me !
I truly appreciate

Sign in to comment.

More Answers (1)

Its me again guys, I tried to do an oder map of the vibrations, i expect that the frequency orders are 5, 10, 15 and 20.
Regardless that i ahve to many empty spaces because i need my speed levels to be more constant over more levels, you can see how you have 2 dense frequency lines converging to the named values instead of an horizontal line.
This proves as my guess that indeed the mentioned orders are the dominant ones, but what puzzles me its that if you look closer they dont seem to converge to the named value, but to more or less .5 greater (e.g if the line saprund 10 dont converge to 10 but to 10.5 more or less)
Could this be a problem that my time axle is wrongly defined ? i can attache also a 3d waterplot screenshot that also shows how the frequencies most of them dont seem to start in the absolute 0

11 Comments

we need first to understand the root cause of why the data acquired with dSpace must be double checked and validated
I doubt that any approach just with some new matlab script or new way to display them will solve the problem
for me it's how the data are acquired and stored that needs to be reviewed
having a second system that you can trust would be beneficial. I'd like to compare the same test but acquired with another system. I have some doubts about what's going on with your dSpace system (I never had such issues on mine BTW)
Im not really an expert about Dspace data adquisition and how to set it up good.
Do you have any adviced or guides on what i should take a look on the dspace configuration to get good results?
Then maybe i can have some input with the resposable for the test here:)
I would appreciete it and thank you
well
if you use dspace only for data collection (of course you can also have other real time tasks in parallel) , but the usual way is be to have a simuling file where the ADC block output line (identified with a label) will be accessible in real time from within ControlDesk (look for the variable that has the adc variable name mentionned above).
as soon as you have access to your data you can make plots and record of that either manually (start / stop recording) or maybe in some automatic way
you probably need to take a bit of time to read the ControlDesk tutorials / documentation
there are of course some other info's available on the internet like :
there are also youtube videos on dSpace systems and ControlDesk if that may help
hello again
problem solved ?
how is it going ?
Hello again:)
I come with great news, i have been working on it a lot since last time and did a lot of try and error tests with small changes.
We found out that when we test the PMSM wihout electronics (PCB) then the readings on the accerometer vibrations are clean as they should be (Images bellow).
We expect vibration around around multiples of 3 and 5 bc of the loadmachine and PMSM pole numbers and that is exactly what we get.
Now the goal is to figure out why electronics are creating to much EMI or what other problem might be. but as for now i think we can close this question and be happy with the script:)
Thank you and to everyone else that helped in the post:) I hope you have a great one
idk why it does let me upload more photos:) but in case you are still curious feel free to text again and ill update them:).
Thanks for the help and wish me luck finding out why electronics corrup from 2g to 20 g:)
also my order map diagramm is shifted for some reason but the big sould be 10 and it is 10
glad to hear that you have (almost) achieved your goal
yeap EMI can cause a lot of trouble
proper grounding , shielding small signals wires , differential inputs, it can take a while until you get clean signals inside your PC
good luck for the future and always remember to ask yourself if you can trust your screen .
better double check than go blind

Sign in to comment.

Categories

Products

Release

R2021a

Asked:

on 20 Jun 2025

Commented:

on 10 Jul 2025

Community Treasure Hunt

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

Start Hunting!