X-Received: by 2002:a5d:4386:: with SMTP id i6mr31059639wrq.207.1620198344850; Wed, 05 May 2021 00:05:44 -0700 (PDT) Path: ...!news-out.google.com!nntp.google.com!proxad.net!feeder1-2.proxad.net!cleanfeed2-a.proxad.net!nnrp1-1.free.fr!not-for-mail Subject: Re: Pitch shifting From: =?UTF-8?B?RnJhbsOnb2lzIEd1aWxsZXQ=?= References: <608a7a5e$0$3262$426a34cc@news.free.fr> <608adea5$0$32492$426a74cc@news.free.fr> <608b05aa$0$6174$426a74cc@news.free.fr> <608bb025$0$12711$426a34cc@news.free.fr> <608bb843$0$3688$426a74cc@news.free.fr> <608bf667$0$6472$426a74cc@news.free.fr> <608bff8b$0$12707$426a74cc@news.free.fr> <608d8759$0$12680$426a74cc@news.free.fr> <608d91d9$0$27435$426a74cc@news.free.fr> <608da8fe$0$3704$426a74cc@news.free.fr> <608fa529$0$3714$426a74cc@news.free.fr> <608fb1cb$0$6206$426a74cc@news.free.fr> <608fd403$0$21617$426a74cc@news.free.fr> <608fdfda$0$3674$426a74cc@news.free.fr> <60911112$0$21593$426a74cc@news.free.fr> Newsgroups: fr.sci.maths,fr.sci.biologie X-Newsreader: MesNews/1.08.06.00 Date: Wed, 05 May 2021 09:05:05 +0200 MIME-Version: 1.0 X-Face: &W|6U/fRZhPQe.DoT9!N+FjhHe!St`rbs`!**{SIrH/$mU%*Fn![0tKa>3i2/VNC#)OS$je U5Y[[>{4Q-nf3p~%*~&=PX;icirfK\`3U9/6_2Rh%]kBJ=n"e|~+J!_Cehr=@qyLOx^(T[jC(Sqagk WU_Kp8lwP)i=Fjyf Lines: 69 Message-ID: <609243c8$0$3713$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 05 May 2021 09:05:44 CEST NNTP-Posting-Host: 90.27.104.108 X-Trace: 1620198344 news-1.free.fr 3713 90.27.104.108:49979 X-Complaints-To: abuse@proxad.net Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Bytes: 4848 robby a exposé le 04/05/2021 : .... > mais bon, si tu te fiche de la phase, pourquoi ne pas juste la mettre à zero, > et ne garder que le module de la freq (à décaler à ta guise)  ? J'ai essayé, mais c'est finalement bien moins bon que de prendre l'atan(y/x). Et comme dans ce cas, cela revient à resynthétiser le signal qu'on avait déjà, on a tout intérêt à simplement garder telles quelles les composantes real/imag qu'on a compressées. > ( ou disons, à 2pi.random(f) pour éviter la correlation massive en 0 ). > comme ça elle tombera automatiquement d'aplomb si tu met tes iFFT bout a > bout. J'essaierai. Plutôt une petite variation autour de la valeur atan(y/x). ( Ma correction de la phase avec -(2*pi*i*(1-k)) indiquée plus haut a finalement été une erreur. Ca atténuait mes clics de rupture de phase, mais ceux-ci n'étaient dûs qu'à une erreur de calcul sur les index des fréquences négatives. Une fois corrigé, les clics disparaissent, et finalement la méthode de base toute bête F'=k*F reste la meilleure malgré les atténuations périodiques à la fois en fréquence et en temps. > Sauf si tu fais un recouvrement a la reconstruction, auquel cas il manque des > infos. Oui, c'est un pb. .... >> MES FFT FAITES POUR LE DECODAGE RADIO, LESQUELLES SONT LONGUES ! > on ne sait toujours pas si "longue" signifie une fraction de secondes ou > plusieurs minutes. Au moins 4 à 8 fois plus longues que les STFT préconisées. >> Je ne vais pas tout refaire. > > ah mais les données sont déjà acquises ? Qu'entends-tu par "données" ? On peut choisir la taille FFT comme on veut mais je n'ai pas pris l'option de la changer dynamiquement suivant la fonctionnalité choisie, comme le pitch shifting. .... > pour l'instant je laisse de côté l'analyse de ce que tu veux dire, mais > surtout: est-ce que tu fait cette opération dans le spectre, puis iFFT ? oui > Ou juste après la transformation souhaitée tu fait une resynthèse directe "à > la mano" ? ( somme des sinusoides ). Comprends pas, ça revient au même. Si je pars des composantes real/image de la FFT, que je compresse, puis que je fais la iFFT, c'est la même chose que si je calcule l'amplitude et la phase à partir de real/image, puis que je recalcule les composantes real/imag en faisant real[i] = a[i] cos(2*pi*i/n + phase[i] avec a[i]=sqrt(real²+imag²) et phase[i]=atan(imag/real), puis iFFT. L'iFFT est toujours nécessaire. La resynthèse je l'ai faite pour pouvoir jouer facilement sur la phase qu'on a à l'étape intermédiaire, et voir ce que ça donne, mais c'est du temps de calcul gaspillé. > Toute la différence porte sur les valeurs de k permises ( parceque prendre k > = 1.137941 dans un la FFT risque de lui faire tout drôle :-D ) Je me suis pour le moment limité à k<1. k>1 devrait marcher aussi facilement mais pour l'extension de spectre il faut un autre algo.