Как передать функцию файла .m другому, включая переменные внутри? - PullRequest
0 голосов
/ 28 апреля 2018

Поскольку я новичок в Matlab, прошу прощения, очень ли это базовый вопрос или нет, но хотел бы попробовать. Я создал имя файла .m с именем Assgn_Modulation, которое включает функцию [sm] = модуляция (ss, fc, mtype), и я пытаюсь передать саму всю функцию, включая переменные и т. Д., В новую функцию в новом файле .m с именем Assgn_Whitenoise, который включает функцию [w] = white_noise (Нет, см).

  function [w]= white_noise(No,sm)

[sm]= modulation(ss,2500,1)


Fs=44100;
total= length(ss)/ Fs
t=linspace(0,total,length(ss));     
t=t';                          
No= input('Power of noise=');
w=awgn(sm,No);

plot(t,w)

end

Однако я получаю сообщение об ошибке, показанное ниже, так что мне не удалось вызвать функцию друг друга.

Undefined function or variable 'modulation'.

Error in Assgn_WhiteNoise (line 3)
[sm]= modulation(ss,2500,1)

EDIT =

Сначала я модулировал аудиоволну (ss) через matlab, модулировал аудиоволну (sm), затем я хочу добавить белый шум к модулированной волне (sm), чтобы создать шумовой сигнал (w) под этой функцией [w] = white_noise (Нет, см). Но я должен определить см, чтобы продолжить операцию Написание этого кода [sm] = модуляция (ss, fc, 1) вообще не работало.

Код, который я привел ниже, работает без проблем, но я пытаюсь использовать его вывод sm в другой функции под названием function [w] = white_noise (No, sm).

 'function [sm]= modulation(ss,fc,mtype)
    [ss,Fs]= audioread('C:\Users\furka\Documents\MATLAB\sample.wav');     %audio waveform to be modulated is loaded.
    Fs                                                               %sampling frequency is 44.1kHz  for  the audio waveform.

    totalTime= length(ss)/ Fs
    t=linspace(0,totalTime,length(ss));     
    t=t';                               %so that linspace return row vector  to convert it to column ,transpose is taken for matching.

    %modulating signal
    subplot(3,1,1)
    plot(t,ss)
    title('Modulating signal(sample.wav)');
    xlabel('Time(Seconds)');
    ylabel('Magnitude');
    xlim([0.01 0.03]);

    %Carrier Signal
        fc= input('Carrier Frequency=');            %carrier frequency will be determined by the user
        subplot(3,1,2)
        plot(t,cos(2*pi*fc*t))
        title('Carrier signal');
        xlabel('Time(Seconds)');
        ylabel('Magnitude');
        xlim([0.01 0.03]);

    mtype= menu('Modulation type?','dsb','dsbsc','ssb','fm');           %modulation type will be determined by the user

    %modulated signal

%DSB MODULATION
if mtype==1 

    ka= 0.7;
    sm= ss.*(1+ka*cos(2*pi*fc*t));
   subplot(3,1,3)
    plot(t,sm)
    xlim([0.01 0.03]);
    title('Doubleside band modulation');
    xlabel('time(seconds)');
    ylabel('Magnitude');

    %DSBSC MODULATION    
elseif mtype==2                         %if doublesideband suppress carrier is selected the statements below will be carried out.

    sm = ss.*cos(2*pi*fc*t);  
    subplot(3,1,3)
    plot(t,sm)
    xlim([0.01 0.03]);
    title('Doubleside band suppress carrier modulation');
    xlabel('time(seconds)');
    ylabel('Magnitude');

    %SSB MODULATION
    elseif mtype==3
    sm=0.5*[ss.*cos(2*pi*fc*t)-hilbert(ss).*sin(2*pi*fc*t)];

    subplot(3,1,3)
    plot(t,sm)
    xlim([0.01 0.03]);
    title('singleside band modulation');
    xlabel('time(seconds)');
    ylabel('Magnitude');

    %FM MODULATION
    elseif mtype==4
    kf=0.1;            %frequency sensitivity.


    sm= cos(2*pi*fc*t + 2*pi*kf*trapz(t,ss));
    subplot(3,1,3)
    plot(t,sm)
    xlim([0.01 0.03]);
    title('Frequency modulation');
    xlabel('time(seconds)');
    ylabel('Magnitude');

end

end

'
...