Bonjours, J'ai des problèmes pour executer un code sur matlab sur la FM.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
%Modulation
function y = FM(x,beta)
 
[r, c] = size(x);
if r*c == 0
    y = [];
    return;
end;
if (r == 1)
    x = x(:);
    len = c;
else
    len = r;
end;
 
Df = 2*pi*beta*100;
 
x = interp(x,20);
x = x*Df;
 
Fs = 20*8000;
Fc = 40000;
t = (0:1/Fs:((size(x,1)-1)/Fs))';
t = t(:, ones(1, size(x, 2)));
 
    x = 2 / Fs * pi * x;
    x = [zeros(1, size(x, 2)); cumsum(x(1:size(x,1)-1, :))];
    y = cos(2 * pi * Fc * t + x );
   plot(y)
Erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
??? Input argument "x" is undefined.
 
Error in ==> FM at 3
[r, c] = size(x);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
%demodulation
function x = FMdemod(y,beta)
[r, c] = size(y);
if r*c == 0
    y = [];
    return;
end;
if (r == 1)
    y = y(:);
    len = c;
else
    len = r;
end;
 
Fc = 40000;
Fs = 8000*20;
pi2 = 2*pi;
 
    [num, den] = butter(5, Fc * 2 / Fs);
 
    sen = 2*pi*beta*100;
 
    %pre-process the filter.
    if abs(den(1)) < eps
        error('First denominator filter coefficient must be non-zero.');
    else
        num = num/den(1);
        if (length(den) > 1)
            den = - den(2:length(den)) / den(1);
        else
            den = 0;
        end;
        num = num(:)';
        den = den(:)';
    end;
    len_den = length(den);
    len_num = length(num);
 
    x = y;
    y = 2 * y;
 
    ini_phase = pi/2;
    for ii = 1 : size(y, 2)
        z1 = zeros(length(den), 1);
        s1 = zeros(len_num, 1);
        intgl = 0;
 
        memo = 0;
        for i = 1:size(y, 1)
            %start with the zero-initial condition integer.
            vco_out = cos(pi2 * intgl+ini_phase);
            if len_num > 1
                s1 = [y(i, ii) * vco_out; s1(1:len_num-1)];
            else
                s1 = y(i, ii);
            end
            tmp = num * s1 + den * z1;
            if len_den > 1
                z1 = [tmp; z1(1:len_den-1)];
            else
                z1 = tmp;
            end;
            intgl = rem(((tmp*sen + Fc)/ Fs + intgl), 1);
            x(i, ii) = tmp;
        end;
    end;
   x = x;
x = decimate(x,20);
erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
??? Input argument "y" is undefined.
 
Error in ==> FMdemod at 2
[r, c] = size(y);