IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Traitement du signal Discussion :

[Signal] FFT audio : comment ca marche ?


Sujet :

Traitement du signal

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    1) Ok j'oublie ces élements
    2) Pour les complexes, c'est clair que j'ai pas été très malin. Effectivement j'avais bien vu qu'il y avait des complexes dans mon tableau.
    3) Pour l'histoire de la fréquence, c'est encore exact !

    Donc j'ai bien appliqué tout cela, mais avec un son généré (sinusoide de strictement 5780 Hz), j'obtiens des contributions pour chaque fréquence, et celle de 5780 Hz n'est même pas plus importante que les autres

    Donc là, jsui encore bloqué !

    Après, pour la suite, quand j'aurai de bonnes valeurs, si j'ai bien compris je dois réorganiser ce tableau dans un nouveau tableau par ordre croissant (ou décroissant) de fréquences. Si je veux chopper une progression de la fréquence 5780 hz, je cherche dans le tableau la fréquence la plus proche de cette valeur que je compare à une valeur, mais laquelle ? Quel est le maximum de contribution possible d'une fréquence ?

    Merci beaucoup pseudocode, c'est très généreux de te pencher sur mon pbleme !

  2. #22
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par mbsofts
    Donc j'ai bien appliqué tout cela, mais avec un son généré (sinusoide de strictement 5780 Hz), j'obtiens des contributions pour chaque fréquence, et celle de 5780 Hz n'est même pas plus importante que les autres
    Des contributions pour chaque frequence, c'est normal. Le cas ideal de FFT "tout a zero sauf une contribution" n'arrive (presque) jamais.

    Par contre, tu devrais avoir des coefficients bcp plus important autour de l'element correspondant a ta frequence.

    Tu peux me dire quelle est la taille de ton tableau d'entrée (le N). Et si possible, tu peux poster les N/2 premieres valeurs de ton tableau de sortie


    Après, pour la suite, quand j'aurai de bonnes valeurs, si j'ai bien compris je dois réorganiser ce tableau dans un nouveau tableau par ordre croissant (ou décroissant) de fréquences.
    Les frequences dans le talbeau sont deja par ordre croissant: 0Hz --> 44100/2 Hz

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    Taille de mon tableau d'entrée : 512

    Voici les N/2 valeurs : 256

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((0, 65616), (86, 82,226989746), (172, 71,045509338), (258, 78,951850891), (344, 101,85618591), (430, 104,21903229), (516, 100,24734497), (602, 128,32473755), (689, 134,19645691), (775, 144,40844727), (861, 159,41596985), (947, 166,04109192), (1033, 193,25221252), (1119, 204,60153198), (1205, 232,21791077), (1291, 249,79414368), (1378, 279,30148315), (1464, 306,25637817), (1550, 326,03573608), (1636, 354,65103149), (1722, 400,47033691), (1808, 432,20907593), (1894, 492,62902832), (1981, 552,12884521), (2067, 629,3338623), (2153, 711,03594971), (2239, 829,86773682), (2325, 978,46838379), (2411, 1170,4863281), (2497, 1465,3995361), (2583, 1904,5673828), (2670, 2706,0327148), (2756, 4487,9853516), (2842, 12787,477539), (2928, 16052,197266), (3014, 5032,2885742), (3100, 3009,9819336), (3186, 2158,9157715), (3273, 1698,3642578), (3359, 1407,0102539), (3445, 1201,6014404), (3531, 1049,5891113), (3617, 943,46838379), (3703, 852,29486084), (3789, 760,25878906), (3875, 711,96502686), (3962, 665,57348633), (4048, 616,59350586), (4134, 574,8895874), (4220, 557,24127197), (4306, 519,10925293), (4392, 488,69143677), (4478, 480,31890869), (4565, 443,88787842), (4651, 431,9414978), (4737, 415,35931396), (4823, 407,0350647), (4909, 381,75), (4995, 360,16281128), (5081, 363,2109375), (5167, 344,26382446), (5254, 348,47558594), (5340, 334,48248291), (5426, 333,4230957), (5512, 303,52780151), (5598, 303,36526489), (5684, 291,74124146), (5770, 288,54763794), (5857, 294,72128296), (5943, 276,11294556), (6029, 265,95614624), (6115, 269,24234009), (6201, 263,24078369), (6287, 266,81567383), (6373, 246,49493408), (6459, 243,14338684), (6546, 239,55780029), (6632, 237,63822937), (6718, 233,42935181), (6804, 230,50085449), (6890, 225,77352905), (6976, 216,786026), (7062, 216,2321167), (7149, 208,04232788), (7235, 205,6179657), (7321, 202,98905945), (7407, 206,34526062), (7493, 199,78868103), (7579, 208,51663208), (7665, 188,63775635), (7751, 194,26756287), (7838, 173,98536682), (7924, 182,51899719), (8010, 185,95314026), (8096, 185,84259033), (8182, 184,62557983), (8268, 164,85743713), (8354, 174,5932312), (8441, 179,85095215), (8527, 170,84580994), (8613, 164,77656555), (8699, 170,8059082), (8785, 167,0242157), (8871, 153,4708252), (8957, 169,72946167), (9043, 161,24674988), (9130, 167,97386169), (9216, 165,10609436), (9302, 169,4385376), (9388, 157,89982605), (9474, 159,20184326), (9560, 144,95317078), (9646, 144,64477539), (9733, 154,09602356), (9819, 143,77320862), (9905, 140,6288147), (9991, 151,53387451), (10077, 142,31573486), (10163, 140,9241333), (10249, 148,96040344), (10335, 155,32937622), (10422, 134,49090576), (10508, 135,83235168), (10594, 136,83674622), (10680, 140,92796326), (10766, 138,57240295), (10852, 141,74000549), (10938, 137,33370972), (11025, 135,76449585), (11111, 135,65818787), (11197, 138,30270386), (11283, 133,56190491), (11369, 134,17411804), (11455, 128,68756104), (11541, 126,18138123), (11627, 123,40652466), (11714, 140,78190613), (11800, 133,3538208), (11886, 124,61032104), (11972, 124,29318237), (12058, 130,71369934), (12144, 119,80986023), (12230, 120,97450256), (12316, 128,05343628), (12403, 118,70666504), (12489, 117,47879791), (12575, 127,4163208), (12661, 124,79255676), (12747, 132,23100281), (12833, 127,22764587), (12919, 127,80261993), (13006, 121,1293335), (13092, 125,87998199), (13178, 112,36872864), (13264, 120,72499847), (13350, 121,86997223), (13436, 116,0490036), (13522, 118,76203918), (13608, 123,39292145), (13695, 118,2143631), (13781, 110,15398407), (13867, 121,73180389), (13953, 120,90296173), (14039, 119,35795593), (14125, 115,57872772), (14211, 108,68497467), (14298, 119,70413208), (14384, 114,64406586), (14470, 124,98007965), (14556, 118,08859253), (14642, 120,26157379), (14728, 116,64294434), (14814, 116,48123932), (14900, 116,17429352), (14987, 119,0131073), (15073, 117,59049988), (15159, 120,67868805), (15245, 121,39317322), (15331, 121,11161041), (15417, 121,45061493), (15503, 120,58357239), (15590, 120,52423859), (15676, 120,30726624), (15762, 128,20397949), (15848, 124,50399017), (15934, 125,32685852), (16020, 121,81726837), (16106, 124,42552185), (16192, 130,64141846), (16279, 125,79217529), (16365, 125,05981445), (16451, 127,84489441), (16537, 125,7253418), (16623, 135,71694946), (16709, 133,76173401), (16795, 136,88360596), (16882, 132,79673767), (16968, 137,5512085), (17054, 133,87593079), (17140, 139,2399292), (17226, 145,63903809), (17312, 145,74888611), (17398, 148,59725952), (17484, 149,66741943), (17571, 158,67553711), (17657, 158,12234497), (17743, 164,45275879), (17829, 172,77757263), (17915, 174,39054871), (18001, 182,91749573), (18087, 193,01242065), (18174, 201,73815918), (18260, 210,39167786), (18346, 230,24087524), (18432, 248,66954041), (18518, 269,76281738), (18604, 300,98526001), (18690, 343,27648926), (18776, 403,33480835), (18863, 498,73483276), (18949, 675,91381836), (19035, 1097,6473389), (19121, 3398,2753906), (19207, 2625,255127), (19293, 892,71575928), (19379, 521,02301025), (19466, 354,60327148), (19552, 263,54342651), (19638, 203,09880066), (19724, 163,60244751), (19810, 133,52708435), (19896, 109,93517303), (19982, 93,35295105), (20068, 78,441436768), (20155, 66,90713501), (20241, 56,002388), (20327, 49,39333725), (20413, 41,534496307), (20499, 36,156772614), (20585, 32,062164307), (20671, 27,508813858), (20758, 23,055902481), (20844, 19,997440338), (20930, 16,35515976), (21016, 14,255142212), (21102, 11,224025726), (21188, 9,7939462662), (21274, 7,9828023911), (21360, 6,5926318169), (21447, 5,515106678), (21533, 3,6923024654), (21619, 3,1983838081), (21705, 2,5004103184), (21791, 1,4534819126), (21877, 0,87189936638), (21963, 0,50453579426))

    Merci

  4. #24
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Il doit y avoir un probleme qqpart dans ton code.
    Voila ce que moi j'obtient.

    Le code java pour generer la sinusoide, faire la FFT et afficher le résultat
    Code java : 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
     
    int N=512;
    double RATE = 44100.0;
    double FREQ = 5780.0; 
     
    // genere le signal
    Complex[] input = new Complex[N];
    for(int i=0;i<N;i++) {
    	double t = i/RATE;
    	double y = Math.sin(FREQ*t*2*Math.PI);
    	input[i] = new Complex(y,0);
    }
     
    // calcule la FFT	
    Complex[] output = FFT.fft(input);
     
    // affiche les resultat
    for(int i=0;i<output.length/2;i++) {
    	double f = i*RATE/N;
    	System.out.println("["+i+"]: "+(int)f+" Hz -> module="+output[i].abs()+" complex=("+output[i].re()+","+output[i].im()+")");
    }

    Le résultat obtenu (avec un pic du module autour de 5780)
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    0: 0 Hz -> module=0.06490261834024696 complex=(-0.06490261834024696,0.0)
    1: 86 Hz -> module=0.06591131046796042 complex=(-0.06484543870763113,-0.011805504073046778)
    2: 172 Hz -> module=0.06885402224051608 complex=(-0.06467374700269793,-0.02362589315409056)
    3: 258 Hz -> module=0.07351361464381896 complex=(-0.06438708378298366,-0.03547611844498995)
    4: 344 Hz -> module=0.07961203382009843 complex=(-0.06398467989848564,-0.047371264150968415)
    5: 430 Hz -> module=0.0868764112078226 complex=(-0.0634654513273456,-0.05932661554620329)
    6: 516 Hz -> module=0.09507513890820345 complex=(-0.06282799185362961,-0.07135772893004956)
    7: 602 Hz -> module=0.10402763781681043 complex=(-0.0620705635001102,-0.08348050417028083)
    8: 689 Hz -> module=0.11360015064780578 complex=(-0.061191084584650446,-0.095711260542103)
    9: 775 Hz -> module=0.1236969106469382 complex=(-0.06018711525317508,-0.10806681665107765)
    10: 861 Hz -> module=0.1342512908174753 complex=(-0.0590558402980971,-0.12056457528164723)
    11: 947 Hz -> module=0.14521851470015965 complex=(-0.05779404902443547,-0.1332226141054199)
    12: 1033 Hz -> module=0.15657013545458273 complex=(-0.056398111901971554,-0.14605978327438077)
    13: 1119 Hz -> module=0.1682900190551608 complex=(-0.054863953667246335,-0.15909581107491372)
    14: 1205 Hz -> module=0.18037148047099963 complex=(-0.05318702249773849,-0.17235141892402644)
    15: 1291 Hz -> module=0.1928152653409006 complex=(-0.05136225480969725,-0.18584844720724905)
    16: 1378 Hz -> module=0.20562814128510282 complex=(-0.049384035141143534,-0.199609993641462)
    17: 1464 Hz -> module=0.21882192816368304 complex=(-0.04724615051438874,-0.21366056610157097)
    18: 1550 Hz -> module=0.23241284718102642 complex=(-0.044941738537461806,-0.22802625215536382)
    19: 1636 Hz -> module=0.24642110558409766 complex=(-0.04246322840011066,-0.24273490789568986)
    20: 1722 Hz -> module=0.26087065984401037 complex=(-0.03980227375531767,-0.25781636909117334)
    21: 1808 Hz -> module=0.27578911861969885 complex=(-0.03694967630338225,-0.2733026881867531)
    22: 1894 Hz -> module=0.29120775983098796 complex=(-0.03389529868359725,-0.2892284012902815)
    23: 1981 Hz -> module=0.3071616455712734 complex=(-0.030627965015380426,-0.30563083003694047)
    24: 2067 Hz -> module=0.3236898255237722 complex=(-0.027135347123502213,-0.32255042409536083)
    25: 2153 Hz -> module=0.3408356249453859 complex=(-0.023403834105650945,-0.340031151192162)
    26: 2239 Hz -> module=0.35864701765876156 complex=(-0.019418382437010495,-0.3581209428378268)
    27: 2325 Hz -> module=0.37717708835966335 complex=(-0.015162343252028476,-0.37687220556918355)
    28: 2411 Hz -> module=0.3964845922139369 complex=(-0.010617262740336503,-0.3963424095336689)
    29: 2497 Hz -> module=0.41663462343763596 complex=(-0.0057626507556232665,-0.4165947686940985)
    30: 2583 Hz -> module=0.43769940863689183 complex=(-5.757116582459643E-4,-0.437699030016256)
    31: 2670 Hz -> module=0.4597592453730378 complex=(0.004968969892640007,-0.45973239285935813)
    32: 2756 Hz -> module=0.48290361193505377 complex=(0.010899797174609843,-0.48278058457385525)
    33: 2842 Hz -> module=0.5072324811381256 complex=(0.017248594708457937,-0.5069391244539351)
    34: 2928 Hz -> module=0.5328578794097348 complex=(0.02405112039747334,-0.5323148159281927)
    35: 3014 Hz -> module=0.559905743129203 complex=(0.031347673644742224,-0.5590275168058616)
    36: 3100 Hz -> module=0.5885181378958171 complex=(0.03918382104379037,-0.5872122502134711)
    37: 3186 Hz -> module=0.6188559241086979 complex=(0.047611266954636966,-0.6170217354870124)
    38: 3273 Hz -> module=0.6511019753854349 complex=(0.056688903791110024,-0.6486294400794477)
    39: 3359 Hz -> module=0.6854650868233269 complex=(0.06648408676817441,-0.6822332822871608)
    40: 3445 Hz -> module=0.7221847506971247 complex=(0.07707419105056815,-0.7180601529213055)
    41: 3531 Hz -> module=0.76153703172105 complex=(0.08854852702144897,-0.7563714755626625)
    42: 3617 Hz -> module=0.8038418480589159 complex=(0.1010107134930926,-0.797470095019487)
    43: 3703 Hz -> module=0.849472065970615 complex=(0.11458164184373212,-0.8417088797302661)
    44: 3789 Hz -> module=0.898864957257193 complex=(0.1294032100711632,-0.8895015573950693)
    45: 3875 Hz -> module=0.9525367674826928 complex=(0.14564307057314788,-0.9413364910596012)
    46: 3962 Hz -> module=1.011101426493312 complex=(0.16350072783480957,-0.997794370927346)
    47: 4048 Hz -> module=1.0752948432528442 complex=(0.183215456022509,-1.0595711852445888)
    48: 4134 Hz -> module=1.1460068308309712 complex=(0.205076703223533,-1.1275084044503674)
    49: 4220 Hz -> module=1.2243236114037328 complex=(0.2294379437278154,-1.202633167436617)
    50: 4306 Hz -> module=1.3115852306900668 complex=(0.25673538934878976,-1.2862125630004713)
    51: 4392 Hz -> module=1.409464361818904 complex=(0.2875136716348733,-1.379828132725451)
    52: 4478 Hz -> module=1.5200764104649738 complex=(0.3224617253069434,-1.485479965992187)
    53: 4565 Hz -> module=1.6461364545445538 complex=(0.3624639353009267,-1.6057350723536805)
    54: 4651 Hz -> module=1.791188033699362 complex=(0.4086747000031219,-1.7439436807549562)
    55: 4737 Hz -> module=1.959945335036361 complex=(0.462629950879216,-1.9045627437499366)
    56: 4823 Hz -> module=2.158820249711945 complex=(0.5264189224250639,-2.0936542189863108)
    57: 4909 Hz -> module=2.3967623567605627 complex=(0.6029579066434922,-2.319679192819676)
    58: 4995 Hz -> module=2.6866523975221734 complex=(0.6964443928366716,-2.5948152752745237)
    59: 5081 Hz -> module=3.047727231313078 complex=(0.8131473722114645,-2.9372491599373847)
    60: 5167 Hz -> module=3.510052414316867 complex=(0.9628649729718085,-3.3754050120060652)
    61: 5254 Hz -> module=4.123389951573084 complex=(1.161814503941906,-3.9563280641478786)
    62: 5340 Hz -> module=4.976487114449761 complex=(1.4389187746887757,-4.763920314208946)
    63: 5426 Hz -> module=6.2445538200583774 complex=(1.8512792066147767,-5.963825761267799)
    64: 5512 Hz -> module=8.328463977624667 complex=(2.5295422359601827,-7.935031714056677)
    65: 5598 Hz -> module=12.390604219821103 complex=(3.852535050179509,-11.776461549183052)
    66: 5684 Hz -> module=23.79854819248132 complex=(7.569575973675121,-22.56263317187549)
    67: 5770 Hz -> module=251.10439972315518 complex=(81.64882093113809,-237.45923776699243)
    68: 5857 Hz -> module=29.91334378506377 complex=(-9.937079598541958,28.21458107886159)
    69: 5943 Hz -> module=14.236621446953666 complex=(-4.828781014705509,13.392694431513053)
    70: 6029 Hz -> module=9.39191850283545 complex=(-3.250677475068938,8.811426054673689)
    71: 6115 Hz -> module=7.034798645062115 complex=(-2.483276431621969,6.5819245012928125)
    72: 6201 Hz -> module=5.640499846781002 complex=(-2.029650713986529,5.262675792859605)
    73: 6287 Hz -> module=4.718991003317562 complex=(-1.7300970403478548,4.390403207038243)
    74: 6373 Hz -> module=4.064550388496304 complex=(-1.5175699462499415,3.770616835328725)
    75: 6459 Hz -> module=3.5756937989714075 complex=(-1.3589954815212204,3.3073731911000737)
    76: 6546 Hz -> module=3.196576829033105 complex=(-1.2361739236902038,2.9478767705417583)
    77: 6632 Hz -> module=2.8939312656351235 complex=(-1.1382632359212823,2.6606756615511253)
    78: 6718 Hz -> module=2.646703651866668 complex=(-1.0584022241046815,2.425865815088423)
    79: 6804 Hz -> module=2.4409205939319825 complex=(-0.9920371153518491,2.2302366931887843)
    80: 6890 Hz -> module=2.2669433473059843 complex=(-0.9360268143172727,2.0646757476112123)
    81: 6976 Hz -> module=2.1179079570268975 complex=(-0.8881345374356826,1.9226937244011988)
    82: 7062 Hz -> module=1.988793768394663 complex=(-0.846724236160882,1.799544031443303)
    83: 7149 Hz -> module=1.8758435683588741 complex=(-0.8105716183654483,1.6916745385722907)
    84: 7235 Hz -> module=1.7761896628695886 complex=(-0.7787422852808243,1.5963740700726698)
    85: 7321 Hz -> module=1.6876053310723422 complex=(-0.7505107293580459,1.5115374287731824)
    86: 7407 Hz -> module=1.6083352065449459 complex=(-0.7253050548387894,1.435505037970008)
    87: 7493 Hz -> module=1.5369768143807936 complex=(-0.7026683702562297,1.3669509462250597)
    88: 7579 Hz -> module=1.4723961259513267 complex=(-0.6822312674638817,1.3048029925667326)
    89: 7665 Hz -> module=1.41366625528482 complex=(-0.6636918426287666,1.2481848498355677)
    90: 7751 Hz -> module=1.3600222214606297 complex=(-0.6468009532056465,1.196373256888908)
    91: 7838 Hz -> module=1.3108270703865894 complex=(-0.6313511769885557,1.1487659899968548)
    92: 7924 Hz -> module=1.2655461618208184 complex=(-0.6171684322552631,1.1048575536814624)
    93: 8010 Hz -> module=1.2237274143381653 complex=(-0.6041055396230032,1.0642205042187318)
    94: 8096 Hz -> module=1.1849859575188892 complex=(-0.5920372202432349,1.0264909397377173)
    95: 8182 Hz -> module=1.148992085388925 complex=(-0.5808561698800508,0.9913571113371147)
    96: 8268 Hz -> module=1.1154617113310525 complex=(-0.5704699482312441,0.958550399097847)
    97: 8354 Hz -> module=1.0841487387436692 complex=(-0.5607984925926827,0.9278380992529158)
    98: 8441 Hz -> module=1.0548389133683174 complex=(-0.551772114405633,0.8990176121302571)
    99: 8527 Hz -> module=1.02734483210487 complex=(-0.5433298727054388,0.8719117234436495)
    100: 8613 Hz -> module=1.0015018622102871 complex=(-0.5354182442621387,0.8463647462660064)
    101: 8699 Hz -> module=0.9771647828601329 complex=(-0.5279900291428156,0.822239345925418)
    102: 8785 Hz -> module=0.9542050041733549 complex=(-0.5210034444675381,0.799413910838705)
    103: 8871 Hz -> module=0.9325082510785193 complex=(-0.5144213696575881,0.7777803628076052)
    104: 8957 Hz -> module=0.9119726238280591 complex=(-0.5082107144282071,0.7572423234026251)
    105: 9043 Hz -> module=0.8925069655875401 complex=(-0.5023418868628734,0.7377135706528155)
    106: 9130 Hz -> module=0.8740294818329072 complex=(-0.4967883435421208,0.719116733801805)
    107: 9216 Hz -> module=0.8564665673767444 complex=(-0.491526207346559,0.7013821843514497)
    108: 9302 Hz -> module=0.8397518054741365 complex=(-0.48653394132685585,0.6844470897987862)
    109: 9388 Hz -> module=0.8238251102702998 complex=(-0.48179206930012186,0.6682546028808019)
    110: 9474 Hz -> module=0.8086319891869062 complex=(-0.47728293552278206,0.6527531642168642)
    111: 9560 Hz -> module=0.7941229061220457 complex=(-0.47299049722348446,0.6378959002564637)
    112: 9646 Hz -> module=0.780252729751711 complex=(-0.4689001448623676,0.623640101687702)
    113: 9733 Hz -> module=0.7669802539471748 complex=(-0.46499854589795697,0.6099467700198588)
    114: 9819 Hz -> module=0.7542677795432357 complex=(-0.4612735085412581,0.596780222171547)
    115: 9905 Hz -> module=0.7420807484969418 complex=(-0.45771386258562174,0.5841077445871883)
    116: 9991 Hz -> module=0.7303874229284353 complex=(-0.45430935486056667,0.5718992897864245)
    117: 10077 Hz -> module=0.7191586027547049 complex=(-0.45105055726150234,0.5601272093999609)
    118: 10163 Hz -> module=0.7083673766027976 complex=(-0.4479287856238403,0.5487660186679577)
    119: 10249 Hz -> module=0.6979889015191456 complex=(-0.4449360279811625,0.5377921881621652)
    120: 10335 Hz -> module=0.6880002076581109 complex=(-0.44206488096016966,0.5271839591255358)
    121: 10422 Hz -> module=0.6783800247114566 complex=(-0.4393084932628858,0.516921179363556)
    122: 10508 Hz -> module=0.6691086273024887 complex=(-0.43666051532483713,0.5069851570676093)
    123: 10594 Hz -> module=0.6601676969726729 complex=(-0.4341150543822193,0.4973585303228703)
    124: 10680 Hz -> module=0.6515401987168893 complex=(-0.43166663427692986,0.4880251503724688)
    125: 10766 Hz -> module=0.6432102703121416 complex=(-0.42931015943068823,0.4789699769762352)
    126: 10852 Hz -> module=0.635163122913916 complex=(-0.42704088248974886,0.4701789844220335)
    127: 10938 Hz -> module=0.627384951609493 complex=(-0.42485437521393415,0.46163907695040673)
    128: 11025 Hz -> module=0.6198628547805622 complex=(-0.4227465022357345,0.453338012507401)
    129: 11111 Hz -> module=0.6125847612754401 complex=(-0.4207133973616381,0.44526433388192727)
    130: 11197 Hz -> module=0.605539364531562 complex=(-0.41875144213805804,0.4374073064142671)
    131: 11283 Hz -> module=0.5987160628772342 complex=(-0.41685724643324557,0.4297568615430226)
    132: 11369 Hz -> module=0.5921049053511852 complex=(-0.4150276308109187,0.42230354557404765)
    133: 11455 Hz -> module=0.5856965424513897 complex=(-0.41325961051365623,0.41503847310534203)
    134: 11541 Hz -> module=0.579482181302774 complex=(-0.4115503808841907,0.4079532846313393)
    135: 11627 Hz -> module=0.5734535447781196 complex=(-0.4098973040728748,0.4010401078849596)
    136: 11714 Hz -> module=0.5676028341840749 complex=(-0.40829789690838886,0.39429152254896516)
    137: 11800 Hz -> module=0.5619226951408496 complex=(-0.4067498198060765,0.38770052798787946)
    138: 11886 Hz -> module=0.5564061863545914 complex=(-0.4052508666198738,0.38126051371405023)
    139: 11972 Hz -> module=0.5510467509876114 complex=(-0.4037989553398248,0.37496523230890194)
    140: 12058 Hz -> module=0.5458381903883012 complex=(-0.4023921195560811,0.36880877457774763)
    141: 12144 Hz -> module=0.5407746399485103 complex=(-0.40102850061881834,0.3627855467116397)
    142: 12230 Hz -> module=0.5358505468976411 complex=(-0.39970634042492476,0.356890249284868)
    143: 12316 Hz -> module=0.5310606498457919 complex=(-0.3984239747764654,0.3511178579023819)
    144: 12403 Hz -> module=0.5263999599261214 complex=(-0.3971798272591636,0.3454636053603957)
    145: 12489 Hz -> module=0.5218637433848301 complex=(-0.39597240359105806,0.3399229651758586)
    146: 12575 Hz -> module=0.5174475054990515 complex=(-0.3948002864044283,0.3344916363710344)
    147: 12661 Hz -> module=0.5131469756918231 complex=(-0.3936621304159343,0.3291655293891698)
    148: 12747 Hz -> module=0.5089580937634042 complex=(-0.39255665796127237,0.32394075306690684)
    149: 12833 Hz -> module=0.5048769971174106 complex=(-0.39148265485360956,0.31881360254396846)
    150: 12919 Hz -> module=0.500900008919475 complex=(-0.3904389665431861,0.31378054805901995)
    151: 13006 Hz -> module=0.4970236270960012 complex=(-0.3894244945528211,0.30883822453502197)
    152: 13092 Hz -> module=0.49324451411431885 complex=(-0.3884381931649775,0.30398342190750816)
    153: 13178 Hz -> module=0.4895594874729552 complex=(-0.38747906634310714,0.2992130761191037)
    154: 13264 Hz -> module=0.4859655108491094 complex=(-0.3865461648624433,0.2945242607408983)
    155: 13350 Hz -> module=0.4824596858479572 complex=(-0.3856385836402647,0.2899141791572811)
    156: 13436 Hz -> module=0.4790392443119458 complex=(-0.38475545924576904,0.2853801572841697)
    157: 13522 Hz -> module=0.4757015411381503 complex=(-0.3838959675756794,0.2809196367652931)
    158: 13608 Hz -> module=0.4724440475742293 complex=(-0.38305932168667745,0.27653016862046575)
    159: 13695 Hz -> module=0.46926434494636116 complex=(-0.3822447697651886,0.2722094073045518)
    160: 13781 Hz -> module=0.4661601187965267 complex=(-0.38145159323382616,0.26795510514966403)
    161: 13867 Hz -> module=0.4631291533912967 complex=(-0.38067910497549007,0.26376510716165436)
    162: 13953 Hz -> module=0.4601693265792255 complex=(-0.37992664767278184,0.2596373461436158)
    163: 14039 Hz -> module=0.45727860496659267 complex=(-0.3791935922482802,0.25556983812265116)
    164: 14125 Hz -> module=0.4544550393971697 complex=(-0.37847933640769693,0.25156067805973265)
    165: 14211 Hz -> module=0.4516967607027382 complex=(-0.3777833032655926,0.2476080358208998)
    166: 14298 Hz -> module=0.44900197571480877 complex=(-0.3771049400598999,0.2437101523905416)
    167: 14384 Hz -> module=0.44636896351687627 complex=(-0.37644371694400947,0.2398653363129173)
    168: 14470 Hz -> module=0.44379607191378034 complex=(-0.3757991258462402,0.23607196034112776)
    169: 14556 Hz -> module=0.4412817141167176 complex=(-0.375170679403376,0.23232845828653392)
    170: 14642 Hz -> module=0.43882436561552307 complex=(-0.3745579099534181,0.22863332204469544)
    171: 14728 Hz -> module=0.43642256123204864 complex=(-0.373960368582535,0.2249850987998001)
    172: 14814 Hz -> module=0.4340748923472563 complex=(-0.3733776242393945,0.2213823883772773)
    173: 14900 Hz -> module=0.43178000427923857 complex=(-0.3728092628830507,0.2178238407612345)
    174: 14987 Hz -> module=0.429536593813233 complex=(-0.37225488669826456,0.21430815372714251)
    175: 15073 Hz -> module=0.42734340686350886 complex=(-0.3717141133331929,0.21083407063050486)
    176: 15159 Hz -> module=0.4251992362723682 complex=(-0.37118657520104686,0.20740037829551516)
    177: 15245 Hz -> module=0.42310291972080444 complex=(-0.37067191880234635,0.2040059050313403)
    178: 15331 Hz -> module=0.4210533377612722 complex=(-0.370169804098444,0.20064951874756032)
    179: 15417 Hz -> module=0.41904941194423534 complex=(-0.369679903904993,0.1973301251699917)
    180: 15503 Hz -> module=0.4170901030607279 complex=(-0.369201903333041,0.1940466661565421)
    181: 15590 Hz -> module=0.4151744094611437 complex=(-0.36873549924593807,0.1907981180915006)
    182: 15676 Hz -> module=0.4133013654752324 complex=(-0.36828039975563887,0.18758349037033728)
    183: 15762 Hz -> module=0.4114700399045736 complex=(-0.3678363237376274,0.1844018239558891)
    184: 15848 Hz -> module=0.40967953460122825 complex=(-0.36740300037746476,0.18125219001357085)
    185: 15934 Hz -> module=0.4079289831122109 complex=(-0.366980168735908,0.17813368860922107)
    186: 16020 Hz -> module=0.4062175493961482 complex=(-0.3665675773379533,0.175045447475779)
    187: 16106 Hz -> module=0.40454442660455425 complex=(-0.36616498378395823,0.17198662083807914)
    188: 16192 Hz -> module=0.40290883592442456 complex=(-0.36577215437968835,0.168956388297147)
    189: 16279 Hz -> module=0.4013100254746573 complex=(-0.3653888637826057,0.16595395376467081)
    190: 16365 Hz -> module=0.39974726926326126 complex=(-0.3650148946701348,0.1629785444541234)
    191: 16451 Hz -> module=0.3982198661890402 complex=(-0.36465003742013646,0.1600294099130224)
    192: 16537 Hz -> module=0.39672713909763163 complex=(-0.36429408981067435,0.15710582110667914)
    193: 16623 Hz -> module=0.3952684338773761 complex=(-0.36394685673042027,0.15420706953937158)
    194: 16709 Hz -> module=0.3938431186044648 complex=(-0.36360814990761436,0.15133246642030374)
    195: 16795 Hz -> module=0.3924505827238284 complex=(-0.3632777876479134,0.1484813418645925)
    196: 16882 Hz -> module=0.39109023627202477 complex=(-0.3629555945877334,0.14565304413150137)
    197: 16968 Hz -> module=0.3897615091360751 complex=(-0.3626414014585706,0.14284693889682964)
    198: 17054 Hz -> module=0.38846385034530406 complex=(-0.36233504486103807,0.14006240855650143)
    199: 17140 Hz -> module=0.387196727397883 complex=(-0.3620363670502801,0.13729885156353427)
    200: 17226 Hz -> module=0.3859596256205721 complex=(-0.361745215735443,0.13455568178895316)
    201: 17312 Hz -> module=0.38475204755086584 complex=(-0.3614614438790388,0.1318323279149094)
    202: 17398 Hz -> module=0.38357351235705195 complex=(-0.36118490951703025,0.12912823285052788)
    203: 17484 Hz -> module=0.38242355527579736 complex=(-0.3609154755767245,0.12644285317489334)
    204: 17571 Hz -> module=0.3813017270845888 complex=(-0.3606530097133997,0.12377565860199125)
    205: 17657 Hz -> module=0.3802075935867073 complex=(-0.360397384144249,0.12112613146211448)
    206: 17743 Hz -> module=0.37914073513069974 complex=(-0.3601484754966884,0.11849376621940366)
    207: 17829 Hz -> module=0.37810074614106315 complex=(-0.3599061646598103,0.11587806898759667)
    208: 17915 Hz -> module=0.377087234681904 complex=(-0.359670336646373,0.1132785570914906)
    209: 18001 Hz -> module=0.37609982202790254 complex=(-0.3594408804582414,0.1106947586149597)
    210: 18087 Hz -> module=0.375138142263485 complex=(-0.35921768895823214,0.10812621199508254)
    211: 18174 Hz -> module=0.3742018418933817 complex=(-0.359000658747539,0.10557246561122113)
    212: 18260 Hz -> module=0.37329057947478494 complex=(-0.35878969004910277,0.10303307740279083)
    213: 18346 Hz -> module=0.37240402526555705 complex=(-0.3585846865979805,0.10050761449471274)
    214: 18432 Hz -> module=0.3715418608837085 complex=(-0.35838555553191975,0.09799565283728795)
    215: 18518 Hz -> module=0.3707037789887552 complex=(-0.3581922072928843,0.0954967768628619)
    216: 18604 Hz -> module=0.3698894829706569 complex=(-0.3580045555273804,0.0930105791506679)
    217: 18690 Hz -> module=0.36909868665684203 complex=(-0.3578225169950059,0.0905366601060828)
    218: 18776 Hz -> module=0.36833111403119023 complex=(-0.35764601148041003,0.08807462764957935)
    219: 18863 Hz -> module=0.3675864989632445 complex=(-0.3574749617063293,0.08562409691852962)
    220: 18949 Hz -> module=0.3668645849542756 complex=(-0.35730929325605054,0.08318468997678952)
    221: 19035 Hz -> module=0.36616512488903363 complex=(-0.35714893449319685,0.08075603553528238)
    222: 19121 Hz -> module=0.3654878808037164 complex=(-0.35699381649038087,0.07833776868167674)
    223: 19207 Hz -> module=0.364832623661023 complex=(-0.3568438729576655,0.07592953061858815)
    224: 19293 Hz -> module=0.36419913313742164 complex=(-0.35669904017643617,0.07353096840963391)
    225: 19379 Hz -> module=0.36358719741754136 complex=(-0.3565592569334766,0.07114173473418545)
    226: 19466 Hz -> module=0.36299661300243785 complex=(-0.3564244644627446,0.0687614876488819)
    227: 19552 Hz -> module=0.3624271845232505 complex=(-0.35629460638577304,0.06638989035882906)
    228: 19638 Hz -> module=0.3618787245631075 complex=(-0.35616962865574536,0.06402661098832155)
    229: 19724 Hz -> module=0.36135105349100655 complex=(-0.35604947950576654,0.061671322368934245)
    230: 19810 Hz -> module=0.3608439993014374 complex=(-0.3559341093992687,0.05932370182317645)
    231: 19896 Hz -> module=0.36035739746086237 complex=(-0.35582347098065914,0.056983430960604375)
    232: 19982 Hz -> module=0.35989109076416476 complex=(-0.3557175190313895,0.05465019547607616)
    233: 20068 Hz -> module=0.3594449291959097 complex=(-0.3556162104254657,0.05232368495512743)
    234: 20155 Hz -> module=0.3590187698025621 complex=(-0.3555195040912604,0.05000359268341997)
    235: 20241 Hz -> module=0.35861247656635464 complex=(-0.35542736097036387,0.04768961545973019)
    236: 20327 Hz -> module=0.35822592028961325 complex=(-0.35533974398217394,0.04538145341462091)
    237: 20413 Hz -> module=0.35785897848469195 complex=(-0.35525661798963704,0.04307880983351697)
    238: 20499 Hz -> module=0.3575115352688256 complex=(-0.35517794976580325,0.04078139098208024)
    239: 20585 Hz -> module=0.35718348126764987 complex=(-0.35510370796464225,0.0384889059371617)
    240: 20671 Hz -> module=0.35687471352108113 complex=(-0.35503386309047785,0.03620106641807068)
    241: 20758 Hz -> module=0.35658513539898473 complex=(-0.35496838747276205,0.03391758662551564)
    242: 20844 Hz -> module=0.35631465651911504 complex=(-0.35490725523974487,0.031638183078765675)
    243: 20930 Hz -> module=0.35606319267239334 complex=(-0.35485044229525975,0.029362574459955285)
    244: 21016 Hz -> module=0.3558306657544989 complex=(-0.3547979262984997,0.027090481457040738)
    245: 21102 Hz -> module=0.3556170036984217 complex=(-0.3547496866409144,0.024821626611008785)
    246: 21188 Hz -> module=0.3554221404182193 complex=(-0.354705704430747,0.022555734165749568)
    247: 21274 Hz -> module=0.35524601575146475 complex=(-0.3546659624727685,0.020292529920014873)
    248: 21360 Hz -> module=0.35508857541459604 complex=(-0.3546304452576652,0.018031741078370786)
    249: 21447 Hz -> module=0.35494977095364744 complex=(-0.3545991389431321,0.015773096108122157)
    250: 21533 Hz -> module=0.3548295597079432 complex=(-0.3545720313448333,0.013516324594038606)
    251: 21619 Hz -> module=0.35472790477500477 complex=(-0.3545491119251398,0.011261157096831911)
    252: 21705 Hz -> module=0.3546447749796165 complex=(-0.35453037178287455,0.00900732501021017)
    253: 21791 Hz -> module=0.35458014484899214 complex=(-0.35451580364581275,0.006754560422100169)
    254: 21877 Hz -> module=0.3545339945923705 complex=(-0.3545054018645118,0.004502595973877883)
    255: 21963 Hz -> module=0.3545063100854308 complex=(-0.35449916240772716,0.0022511647224345522)
    Edit: a ce soir... je pars en ballade

  5. #25
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    j'ai préféré refaire un programme propre avec les données qui arrivent directement du fichier comme ca je n'ai aucun autre facteur qui peut influer.

    PseudoCode, je t'ai fait une archive ZIP dans laquelle je t'ai mis le projet Delphi 2006 avec la librairie FFT que j'utilise et mon fichier WAVE sinusoide de 5780 hz. J'aimerai vraiment que tu puisses y regarder, je ne trouve toujours pas quel est le problème.

    Si ca pouvait être seulement la librairie FFT qui est mauvaise ...

    Voici le RAR

    Merci pour tout pseudoCode !

  6. #26
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Ton programme marche bien...

    Le pb vient surement de la lecture du fichier WAV lorsque tu crées ton tableau d'entrée:

    1/ ton fichier wav de test est en STEREO (donc 2 canaux). Attention a ne lire qu'un seul canal (ou alors faire la moyenne des 2 canaux)

    2/ les octets sont signés ==> valeur de -127 a +128. Attention a ne pas les lire comme des octets non-signés 0...255, sinon tu va aura une forte contribution de la frequence "0" (ce qui est ton cas actuellement )

    Sinon ca marche...

  7. #27
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    la fft est un outil très peu efficace pour analyser des sons à part pour des choses simples (il n'y a pas vraiment d'outil mathématique efficace pour analyser le son )

    ton problème de vu-mètre sur une fréquence précise te donnera déjà beaucoup de surprises désagréables !

    que cherches tu à faire à terme ??

  8. #28
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    mon but est, d'apprendre à utiliser Fourier pour :
    - créer un Vumetre de la fréquence que je souhaite surveiller
    - apprendre à utiliser Fourier pour ensuite pouvoir créer un Equaliser x Bandes

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    pseudo code, à priori sans me soucier du signal signé ou non je n'ai que des valeurs entre 0 et 255.

    Concernant le stéréo j'avais réalisé une appli de normalisation du son sans me soucier de la stéréo et ca fonctionnait.

    Je ne crois pas que ca provienne de cela. En es-tu sur?

  10. #30
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    derniere news: à priori ca semble marcher en MONO effectivement mais avec la fonction InverseFFT plutot que ForwardFFT !!
    Ca ne marche pas en STEREO, ca me renvoi la valeur de fréquence recherchée divisée par 2.
    Donc effectivement j'ai ca à gérer.

    Dernière question : j'ai une valeur plus grande en 5770 (pour 5780 je crois que c'est bon comme résultat), quel est le maximum de cette valeur ? (pour faire un vumetre)

    Merci à tous

  11. #31
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par mbsofts
    derniere news: à priori ca semble marcher en MONO effectivement mais avec la fonction InverseFFT plutot que ForwardFFT !!
    Ca ne marche pas en STEREO, ca me renvoi la valeur de fréquence recherchée divisée par 2.
    Donc effectivement j'ai ca à gérer.
    STEREO: Sans connaitre pas coeur le format WAV, je dirais qu'il suffit de prendre un octet sur 2 dans le fichier stereo original.

    SIGNE: C'est important de lire les valeurs comme des octets signés. Donc il faut soustraire 127 a tous les octets que tu lis depuis le fichier

    FFT: Si ca marche avec la i_FFT, ca devrait marcher avec la F-FFT car ce sont deux transformations qui se ressemblent. Enfin bon, si ca marche, c'est deja pas mal.

    Dernière question : j'ai une valeur plus grande en 5770 (pour 5780 je crois que c'est bon comme résultat), quel est le maximum de cette valeur ? (pour faire un vumetre)
    En theorie, la valeur max d'un coefficient c'est AmplitudeSignal*(N/2), donc dans ton cas 128*(512/2). En pratique, c'est moins que ca... a toi de voir.

    NB: On utilise plutot une echelle logarithmique pour les vumetre. Donc on calcule plutot Log( valeur_coeff )

  12. #32
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    pour faire un equalizer avec la fft il faut que tu fasses attention à ne pas couper brusquement le spectre

    par exemple si tu as deux bandes de fréquences 0-500hz et 500-44100hz
    si tu veux diminuer la bande 0-500hz par exemple tu peux mettre partout à 0 jusqu'à 450hz puis augmenter progressivement jusqu'à 550hz

    il ne faut pas couper "brusquement" le spectre à une fréquence précise

    souvent avec certaines lib fft il vaut diviser toutes les valeurs du spectre forward calculé par N (le nombre d'échantillons) si tu veux retrouver le signal original avec la fft inverse

  13. #33
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    oui pseudo code, je converti les valeur de mes rapports en dB. dB = 20*log10(rapport) et j'utilise donc l'échelle logarithmique !

    merci pour tout tout le monde!

    j'ai un autre souci d'allocation de pointeurs, delphi semble m'écraser des adresses mémoires utilisées ! J'avais pas prévu ca :-(

    Mon code :

    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
    Function Analyse(Buf:Pointer; BufferLength:Integer; var TabSpectrum: TArraySpectrum; WaveFormatex:TWaveFormatex):Boolean;
     
       procedure MonoAnalysis8b;
       var
           nI           : Integer;
           TabCompl     : array of TComplex;
           TabCompl2    : array of TComplex;
           TabFreq      : array of TFreq;
           Buffer       : array of Byte;
       begin
           SetLength(Buffer, BufferLength);
           //Initialize(Buffer, BufferLength);
           CopyMemory(@Buffer, Buf, BufferLength);
     
           SetLength(TabCompl, BufferLength);
     
           for nI := 0 to Length(Buffer) - 1 do begin    // on créé nos complexes
               TabCompl[nI].Im  := 0         ;           // 0 en Imaginaire
               TabCompl[nI].Re  := Buffer[nI];           // notre valeur en Réel
           end;
     
           Initialize(TabCompl2, Length(Buffer));
           SetLength(TabCompl2, Length(Buffer));         // On dimensionne le tableau de sortie de la FFT
           //ZeroMemory(@TabCompl2, Length(Buffer));
           FFTs.InverseFFT(TabCompl, TabCompl2, Length(Buffer));  // On applique la FFT
     
           SetLength(TabFreq, Length(Buffer) div 2);     // On dimensionne le tableau de frequences
           for nI := 0 to (Length(Buffer) div 2) - 1 do begin
             TabFreq[nI].Freq   :=   trunc((WaveFormatex.nAvgBytesPerSec * nI) / Length(Buffer));  // on extrait les freq et count
             TabFreq[nI].Count  :=   sqrt (   TabCompl2[nI].Re  *  TabCompl2[nI].Re
                                            + TabCompl2[nI].Im  *  TabCompl2[nI].Im );
           end;
     
           SetLength(TabSpectrum, Length(Buffer) div 2); // On dimensionne le tableau de sortie
           for nI := 0 to Length(Buffer) - 1 do begin
             TabSpectrum[nI].Freq :=  TabFreq[nI].Freq;  // On recopie la valeur de freq
             if (TabFreq[nI].Count = 0) then             // Cas particulier = 0
                TabSpectrum[nI].dB   := 0                // dB = 0
             else
                TabSpectrum[nI].dB   :=  TabFreq[nI].Count;  // On calcule le dB
           end;
     
           SetLength ( TabCompl , 0 );                   // destruction des tableaux
           SetLength ( TabCompl2, 0 );
           SetLength ( TabFreq  , 0 );
       end;
     
     
    begin
       Result := False;
     
       case WaveFormatex.nChannels of
            1: begin
                 if WaveFormatex.wBitsPerSample = 8 then
                    MonoAnalysis8b;
                 if WaveFormatex.wBitsPerSample = 16 then
                    //MonoAnalysis16b;
            end;
            2: begin
                 //StereoAnalysis;
            end;
     
       end;
     
       Result := True ;
    end;
     
    end.
    Buff est un array dans lequel sont stockées les données provenant d'un fichier wave. Le code "explose" au deuxième SetLength ! (?) "erreur de vérification d'étendue" !?
    Alors que quand mon Buff était un tableau directement transmis, ca marchait... depuis le pointeur, marche pu...
    Je cherche :-)

  14. #34
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    je pense que mon problème est résolu.
    Merci beaucoup à tous, en particulier à PseudoCODE.
    Ca faisait longtemps que j'avais pas fait de dev Delphi et j'avais oublié comment c'est passionnant de chercher, tester, déboguer...

    A bientôt, j'essaierai d'aider moi aussi sur ces forums.
    Même si je n'ai certainement pas les mêmes compétences que vous.

  15. #35
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    oups: non c'est pas fini:
    pseudocode es-tu sûr du maximum contribution que tu m'avais fourni ?
    tu disais que c'était : AmplitudeSignal*(N/2)
    donc j'ai un buffer de 512 donc ca fait AmplitudeSignal*256 ?? Ca me paraît grand !

  16. #36
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par mbsofts
    oups: non c'est pas fini:
    pseudocode es-tu sûr du maximum contribution que tu m'avais fourni ?
    tu disais que c'était : AmplitudeSignal*(N/2)
    donc j'ai un buffer de 512 donc ca fait AmplitudeSignal*256 ?? Ca me paraît grand !
    Oui, c'est plus ou moins l'ordre de grandeur.

    En fait, c'est une approximation dans le cas ou ton signal est composé d'une seule sinusoide. Si tu as 2 sinusoides, c'est (Amplitude1 + Amplitude2)*(N/2).

    Bon, ca reste une approximation mais c'est generalement pas trop mal. Pour etre plus precis, il faudrait connaitre l'energie du signal original.

  17. #37
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 89
    Points : 37
    Points
    37
    Par défaut
    donc pour revenir à mon signal audio de base (une sinusoide c'était pour tester Fourier), vu que j'ai n fréquences je dois additionner les fréquences retournées par Fourier pour pouvoir trouver la valeur maxi donnée par ta formule. C'est ca?

    Dernière chose, la FFT me renvoi des fréquences avec leur contribution dans le signal, très bien, mais si je veux les contributions des fréquences 20 Hz, 30 Hz, 40 HZ.... comment je fais ? la FFT ne me renvoi que très peu de fréquences par intervalles. Par exemple j'ai au minimum 120 hz, comment je choppe 20, 30 hz ??

    Merci

  18. #38
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par mbsofts
    donc pour revenir à mon signal audio de base (une sinusoide c'était pour tester Fourier), vu que j'ai n fréquences je dois additionner les fréquences retournées par Fourier pour pouvoir trouver la valeur maxi donnée par ta formule. C'est ca?
    Malheureusement non. Rien ne dit que le signal d'origine est une somme de sinusoides (ex: carrés, triangles,...). Et de toutes facons, on ne connaitrait pas l'amplitude de chaque sinusoide.

    Tout ce que la FFT nous dit, c'est que le signal "ressemble" a une somme de sinusoides de frequences 0Hz, 80Hz, 160Hz, ... et d'amplitudes = coef[freq] / (N/2)

    la FFT ne me renvoi que très peu de fréquences par intervalles. Par exemple j'ai au minimum 120 hz, comment je choppe 20, 30 hz ??i
    augmente le nombre d'echantillon 'N'. Le "pas" des frequences est RATE/N.

    Si tu veux un "pas" de 10Hz, il faudrait N = RATE/10 = 44100/10 = 4410.

    Comme N doit etre une puissance de 2, je prendrais N=4096.

  19. #39
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Je me permets de déterrer ce post car je voudrais faire à peu près la même chose.
    Et bien qu'il m'ai déjà bien éclairé, il reste quelques imprécisions.

    Tout ce que la FFT nous dit, c'est que le signal "ressemble" a une somme de sinusoides de frequences 0Hz, 80Hz, 160Hz, ... et d'amplitudes = coef[freq] / (N/2)
    Je ne comprends pas bien cette phrase, et pourtant je sens qu'elle est la clé de mon problème (je précise que je suis particulièrement mauvais en physique).
    Es ce que coef() est la fonction de fourrier ? donc coef(freq) est retourné par la fft ?
    et es ce que calculer l'intensité globale du son reviens a faire la somme de ses amplitudes ?

    Merci d'avance pour vos réponses.

  20. #40
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Citation Envoyé par lauxley Voir le message
    Je ne comprends pas bien cette phrase, et pourtant je sens qu'elle est la clé de mon problème (je précise que je suis particulièrement mauvais en physique).
    Et quel est ton problème exactement ?

    Es ce que coef() est la fonction de fourrier ? donc coef(freq) est retourné par la fft ?
    oui, coef[] est le tableau des valeurs retourné par la la FFT.

    et es ce que calculer l'intensité globale du son reviens a faire la somme de ses amplitudes ?
    Qu'est-ce que tu appelles "intensité globale du son" ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. [Audio] JAVA SOUND comment ca marche?
    Par billynirvana dans le forum Multimédia
    Réponses: 3
    Dernier message: 04/11/2008, 13h03
  2. FFT IJ.plugin.FFTMath Comment ça marche ?
    Par philippe13 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 20/06/2007, 19h11
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo