File: ifftreal_ref_mat.m

package info (click to toggle)
python-ltfatpy 1.1.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 41,412 kB
  • sloc: ansic: 8,546; python: 6,470; makefile: 15
file content (83 lines) | stat: -rw-r--r-- 1,796 bytes parent folder | download | duplicates (2)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
function ifftreal_ref_mat(filepath)
% Save the output of the ifftreal function into a .mat file for some example
% inputs

if nargin < 1
    filepath = pwd();
end

filename=[filepath, '/ifftreal_ref.mat'];
disp(filename)

% NOTE: ifftreal is buggy in LTFAT 2.1.0 for Octave
% For example:
% ifftreal(rand(8,1), 32, 1);
% crashes octave.
% It seems that the crash arises when N is too big compared to the length of the
% data along the dimension used to do the transform.
% So we are limited in the values that can be used as N in this test.
%
% In general it seems that values of N different from the one used to compute
% fftreal leads to wrong results for arrays having 2D or more.
% For example :
%>> ifftreal([1,2;3,4], 4, 1)
%ans =
%
%   2.25000   1.00000
%  -0.25000   1.00000
%  -0.75000   1.00000
%  -0.25000   1.00000
%
%>> ifftreal([1;3], 4, 1)
%ans =
%
%   1.75000
%   0.25000
%  -1.25000
%   0.25000
%
%>> ifftreal([2;4], 4, 1)
%ans =
%
%   2.50000
%   0.50000
%  -1.50000
%   0.50000
%
%>> a=rand(3)+i*rand(3);
%>> ifftreal(a(:,3), 2, 1)
%ans =
%
%   0.37296
%   0.34901
%
%>> ifftreal(a, 2, 1)
%ans =
%
%   0.805618   0.087949   0.491575
%  -0.115312  -0.022500   0.413780
  
inputs_names = {'c', 'N', 'dim'};
sizes = {[8; 1], [13; 1]};
nb_outputs = 1;
outputs = cell(1, nb_outputs);
data = {};
inputs={};

for ind = 1:length(sizes)
    size = sizes{ind};
    inputs{1} = rand(size)+i*rand(size);
    for ind_N = -3:3    
        for dim = 1:(length(size)-1)
            inputs{3} = dim;
            inputs{2} = (size(dim)-1)*2 + ind_N;
            [outputs{:}] = ifftreal(inputs{:});
            inputs{3} = dim-1; % needed because Python dimensions start at 0
            data{end+1} = {inputs_names, inputs, outputs};
        end
    end
end

save(filename, 'data', '-V6');

end