2017-01-25 12 views
0

Это кодировка IMDCT. Я не знаю, что происходит в следующем коде Matlab. Ошибка не хватает входных аргументов в следующей строке:Ошибка Matlab: Недостаточно входных аргументов

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

Ниже является частью полного кодирования:

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

Вы определили 'blocksplit_flag' и/или' block_type' как функцию. Используйте ['which'] (https://www.mathworks.com/help/matlab/ref/which.html) и [отладчик] (https://www.mathworks.com/help/matlab/matlab_prog/debugging -process-and-features.html), чтобы выяснить, какой из них. См. Также: [mcve] и укажите * функциональный * пример и фактическое сообщение об ошибке. – excaza

+0

Если вы хотите, чтобы они равны 2, вы должны написать 'if blocksplit_flag (iter) == 2 && block_type (iter) == 2' – Wolfie

ответ

0

Если вы пишете функцию и нажмите кнопку запуска перед вызовом функции с объявленные аргументы, то есть (input_data, block_type, blocksplit_flag, switch_point) в качестве аргументов, вы столкнетесь с такими ошибками. Вызов функции с правильными входами должен решить проблему.