Question

I have my code working using the integral function but I'm looking to implement it using the trapz function instead.

fc = 5*10^6;
fb = 0.2*10^6;
F = [0:10000:10^7];
Tb = 1/fb;
Sequence = [0 1 0 1 1 0 1 1 1 0 0 0 1 0 1 ];
A = sqrt(9/Tb);
w = 2*pi*fc;
I = zeros(1,length(F));
for counter1 = 1:length(Sequence) 
if Sequence ( 1, counter1) == 1   
    s_of_t = @(t) A*cos(w*t)*exp(-1i*2*pi*t*F); 
else
    s_of_t = @(t) -A*cos(w*t)*exp(-1i*2*pi*t*F);
end
    S_of_f = integral(s_of_t,((counter1-1)*Tb),(counter1*Tb),'ArrayValued', true);
for counter2 = 1:length(S_of_f)  
    I( 1, counter2) = I(1,counter2)+S_of_f(1,counter2);
end
    clear S_of_f s_of_t;
end
figure(1)
plot(F,abs(I));

What I want to do is use the trapz function instead of the integral function like this:

for n = 1 : length(F)
    S_of_f(n) = trapz(F,s_of_t);
end

instead of:

S_of_f = integral(s_of_t,((counter1-1)*Tb),(counter1*Tb),'ArrayValued', true);

I am having trouble implementing my code using this function so if you have any advice I'd appreciate it.

Errors include: Undefined function 'max' for input arguments of type 'function_handle'. Error in trapz (line 43) perm = [dim:max(ndims(y),dim) 1:dim-1];

I'm not sure which function handles I'm missing.

(Yes I'm taking the Fourier Transform however my attempts to utilize the FFT function took up way too much memory).

Était-ce utile?

La solution

trapz expects a vector of function evaluations, not a function handle, which is what integral expects.

if Sequence ( 1, counter1) == 1
        s_of_t = @(t,F) A*cos(w*t).*exp(-1i*2*pi*t*F);
    else
        s_of_t = @(t,F) -A*cos(w*t).*exp(-1i*2*pi*t*F);
    end
    for i=1:length(F)
        r=linspace(((counter1-1)*Tb),(counter1*Tb),100);
        S_of_f(i) = trapz(r,s_of_t(r,F(i)));
    end
  ...

I arbitrarily chose 100 evaluation points for the integral using trapz; you will want to modify this to an appropriate value depending on how you are using this code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top