Вопрос

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).

Это было полезно?

Решение

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top