Filter löschen
Filter löschen

Error "It must be of type 'Type::MATLABOutput"

2 Ansichten (letzte 30 Tage)
James Manns
James Manns am 1 Feb. 2024
Bearbeitet: Walter Roberson am 2 Feb. 2024
I have a signal x(t)=exp(-100t), t>0. I'm trying to plot the ESD against frequency and then find and plot the 35dB bandwidt and the bandwidth that contains 99% of the energy.. The EDS plots fine but I get the following error for the 35dB plot:
"Error using / Invalid return value '[1/(2*abs(100 + w*1i)^2)]'. It must be of type'Type::MATLABOutput'.
Error in untitled3 (line 22) f_3dB = solve(ESD == max(ESD)/2, f);"
The code is below:
clc
clear all
syms t w;
x_t = exp(-100*t)*(heaviside(t));
X_w = fourier(x_t, w);
ESD = abs(X_w)^2;
% Plot ESD against linear frequency
f = linspace(-10, 10, 1000); % frequency range for plotting
ESD_plot = subs(ESD, w, 2*pi*f);
figure;
plot(f, ESD_plot);
title('Energy Spectral Density (ESD)');
xlabel('Frequency (Hz)');
ylabel('ESD');
grid on;
f_35dB = solve(ESD == max(ESD)/3162, f);
disp(['35 dB Bandwidth: ', num2str(2*f_35dB)]);
% Define frequency step size for numerical integration
df = 0.001;
freq_range = -10:df:10;
% Calculate energy in each frequency band
energy_in_band = double(subs(ESD, w, 2*pi*freq_range)) * df;
% Find the bandwidth containing 99% of the energy
cumulative_energy = cumsum(energy_in_band);
desired_energy = 0.99 * max(cumulative_energy);
bandwidth_99percent_energy = 2 * freq_range(find(cumulative_energy >= desired_energy, 1, 'first'));
disp(['Bandwidth containing 99% of the energy: ', num2str(bandwidth_99percent_energy)]);

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 2 Feb. 2024
Bearbeitet: Walter Roberson am 2 Feb. 2024
f_35dB = solve(ESD == max(ESD)/3162, f);
max(ESD) returns a max() expression that is incompatible with the result of the calculation. It does not calculate the w for which ESD is the maximum and substitute that w to get the maximum ESD.
And you are asking to also solve f which is a vector of numeric frequencies.
  1 Kommentar
Walter Roberson
Walter Roberson am 2 Feb. 2024
Bearbeitet: Walter Roberson am 2 Feb. 2024
clc
clear all
syms t w;
x_t = exp(-100*t)*(heaviside(t));
X_w = fourier(x_t, w);
ESD = abs(X_w)^2;
% Plot ESD against linear frequency
f = linspace(-10, 10, 1000); % frequency range for plotting
ESD_plot = subs(ESD, w, 2*pi*f);
figure;
plot(f, ESD_plot);
title('Energy Spectral Density (ESD)');
xlabel('Frequency (Hz)');
ylabel('ESD');
grid on;
best_w = solve(diff(ESD, w),w)
best_w = 
0
max_ESD = subs(ESD, w, best_w)
max_ESD = 
f_35dB = double(solve(ESD == max_ESD/3162))
f_35dB = 0.0000e+00 - 5.5232e+03i
disp(['35 dB Bandwidth: ', num2str(2*f_35dB)]);
35 dB Bandwidth: 0-11046.3327i
% Define frequency step size for numerical integration
df = 0.001;
freq_range = -10:df:10;
% Calculate energy in each frequency band
energy_in_band = double(subs(ESD, w, 2*pi*freq_range)) * df;
% Find the bandwidth containing 99% of the energy
cumulative_energy = cumsum(energy_in_band);
desired_energy = 0.99 * max(cumulative_energy);
bandwidth_99percent_energy = 2 * freq_range(find(cumulative_energy >= desired_energy, 1, 'first'));
disp(['Bandwidth containing 99% of the energy: ', num2str(bandwidth_99percent_energy)]);
Bandwidth containing 99% of the energy: 19.506

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Tags

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by