2017-01-25 3 views
0

Dies ist die Codierung von IMDCT. Ich habe keine Ahnung, was im folgenden Matlab-Code schief läuft. Der Fehler ist nicht genug Eingabeargumente in der folgenden Zeile:Matlab-Fehler: Nicht genügend Eingabeargumente

if blocksplit_flag(iter) && block_type(iter) == 2; 

Im Folgenden Teil der kompletten Codierung ist:

function output_data = IMDCT(input_data, block_type, blocksplit_flag, switch_point) 
global sin_window_0 sin_window_1 sin_window_2 sin_window_3; 
output_data(1:4,1:576) = double(0); 
output_holder(1:36) = double(0); 
output_holder_1(1:36) = double(0); 
output_holder_2(1:36) = double(0); 
output_holder_3(1:36) = double(0); 
block_type2_sum(1:3,1:12) = 0; 
block_type2_sum_1(1:3,1:12) = 0; 
block_type2_sum_2(1:3,1:12) = 0; 
block_type2_sum_3(1:3,1:12) = 0; 
persistent overlap_adder skipper; 
if isempty(overlap_adder) 
    overlap_adder = zeros(2,576); 
    skipper = zeros(1,18); 
end 
for iter = 1:4 
%decide channel to use the appropriate overlap_adder 
if mod(iter,2) == 1; 
    channel = 1; 
else 
    channel = 2; 
end  
if blocksplit_flag(iter) && block_type(iter) == 2; 
    current_start = 1; 
    current_start_2 = 2; 
    current_start_3 = 3; 
    if switch_point(iter) 
     %do long transform for first 2 sub_bands. 
     while (current_start <= 36 && current_start_2 <= 36 && current_start_3 <= 36) 
      output_holder(:) = 0; 
      output_holder_1(:) = 0; 
      output_holder_2(:) = 0; 
      output_holder_3(:) = 0; 

      temp_data = input_data(iter, current_start:current_start+17); 
      temp_data_1 = input_data(iter, current_start); 
      temp_data_2 = input_data(iter, current_start_2:current_start_2+16); 
      temp_data_3 = input_data(iter, current_start_3:current_start_3+15); 
      if temp_data == skipper 
      else 
       for i = 1:36 
        k1 = (current_start_2:current_start_2+16); 
        k2 = (current_start_3:current_start_3+15); 

        %output_holder(i) = ((temp_data_1 .* cos_imdct_long_1(i,:))+ ((cos_imdct_long_2(i,:)) .*sum((temp_data_2) .* (sin((k1)*((pi/72)*(2i+19))))))+ ((cos_imdct_long_3(i,:)) .* ((temp_data_3).*(sin((k2-2)*((pi/72)*(2i+19)))))))/(sin((pi/72)*(2i+19))); 
        output_holder_1(i) = (temp_data_1 .* (cos((pi/72).*(2i+19)))); 
        output_holder_2(i) = ((cos(3.*((pi/72).*(2i+19)))) .* sum((temp_data_2).*(sin((k1).*((pi/72).*(2i+19)))))); 
        output_holder_3(i) = ((cos((pi/72).*(2i+19))) .*sum((temp_data_3).*(sin((k2-2).*((pi/72).*(2i+19)))))); 

        output_holder(i) = output_holder_1(i) + output_holder_2(i) + output_holder_3(i); 
       end 
. 
. 
. 
+0

Sie haben 'blocksplit_flag' und/oder' block_type' als Funktion definiert. Verwenden Sie ['which'] (https://www.mathworks.com/help/matlab/ref/which.html) und [den Debugger] (https://www.mathworks.com/help/matlab/matlab_prog/debugging -process-and-features.html) um herauszufinden, welche. Siehe auch: [mcve] und geben Sie ein * funktionales * Beispiel und die eigentliche Fehlermeldung an. – excaza

+0

Wenn Sie beide gleich 2 wollen, müssen Sie 'if blocksplit_flag (iter) == 2 && block_type (iter) == 2' schreiben – Wolfie

Antwort

0

Wenn Sie eine Funktion schreiben, und drücken Sie die Schaltfläche Ausführen, bevor Sie die Funktion mit Aufruf deklarierte Argumente zB (input_data, block_type, blocksplit_flag, switch_point) als Argumente, werden Sie solche Fehler auftreten. Der Aufruf einer Funktion mit korrekten Eingaben sollte das Problem lösen.

Verwandte Themen