2017-04-01 1 views
2

J'ai un problème en traçant la transformée de Fourier d'une série de données (Y = intensité, X = longueur d'onde). Le but est de supprimer l'oscillation sinusoïdale mais en appliquant un filtre notch à la transformée de Fourier des données, suivie d'une autre transformée de Fourier.Transformée de Fourier inattendue en Python Numpy

est ici la série de données d'origine:

df = pd.read_csv(file, sep='\t', skiprows=7) 
df.plot(x='X', y='Y') 

enter image description here

Et après avoir fait le fourier transform:

df['spectrum'] = np.fft.fft(df[['Y']]).real 
df['freq'] = np.fft.fftfreq(len(df.index), 1) 
df.plot(x='freq', y='spectrum') 

enter image description here

Problème: Pourquoi at-il tracer Noth ing? La FFT a-t-elle été mal faite?

données

X Y 
500 383.800049 
501 -407.599976 
502 435 
503 -446.8 
504 442.800049 
505 -419.399963 
506 425.200073 
507 -423.599976 
508 387.400024 
509 -438.199951 
510 473.599976 
511 -446.399963 
512 392.599976 
513 -393 
514 414.599976 
515 -392.199951 
516 469.599976 
517 -359.8 
518 544.6 
519 -365.399963 
520 535.2001 
521 -361.399963 
522 527.4 
523 -389.399963 
524 556.6 
525 -399 
526 534.800049 
527 -360.8 
528 689.2001 
529 -206.399963 
530 904.2001 
531 51 
532 1166.00012 
533 230.200073 
534 1338.4 
535 254.200073 
536 1192.6 
537 149 
538 925.7999 
539 -119.599976 
540 745.800049 
541 -329.399963 
542 602.2001 
543 -344 
544 469.599976 
545 -453.599976 
546 384.800049 
547 -485.599976 
548 334.599976 
549 -506 
550 305.800049 
551 -525.199951 
552 412.400024 
553 -419 
554 404.599976 
555 -466.199951 
556 466.400024 
557 -437.399963 
558 478.400024 
559 -389 
560 478.599976 
561 -391.199951 
562 461.200073 
563 -366 
564 481.599976 
565 -414.399963 
566 525.800049 
567 -379.8 
568 495.200073 
569 -368.599976 
570 518.800049 
571 -388 
572 485 
573 -412.599976 
574 519.4 
575 -383 
576 656.2001 
577 -334 
578 609.800049 
579 -304.399963 
580 563.800049 
581 -352.199951 
582 567.2001 
583 -372.399963 
584 463.400024 
585 -362.399963 
586 516.2001 
587 -309.199951 
588 548.4 
589 -340.8 
590 627 
591 -352.199951 
592 686.2001 
593 -302.599976 
594 736.4 
595 -301.399963 
596 716.800049 
597 -337.399963 
598 642.2001 
599 -332.599976 
600 646.800049 
601 -316.399963 
602 733.800049 
603 -274.199951 
604 715.800049 
605 -325.8 
606 683.6 
607 -352.8 
608 581 
609 -352.399963 
610 611.2001 
611 -360.8 
612 555.800049 
613 -348.199951 
614 583.4 
615 -416.8 
616 539.4 
617 -337.199951 
618 607.4 
619 -310.8 
620 542.800049 
621 -300.8 
622 534.4 
623 -295.399963 
624 603.6 
625 -348 
626 599.800049 
627 -252.199951 
628 576.800049 
629 -309 
630 703.4 
631 -300.399963 
632 621.800049 
633 -345.199951 
634 586.2001 
635 -314.8 
636 615.2001 
637 -352.399963 
638 623.800049 
639 -281.399963 
640 636.2001 
641 -367 
642 546 
643 -295 
644 595.4 
645 -342.399963 
646 554.6 
647 -358.399963 
648 567.4 
649 -379 
650 581.2001 
651 -383.8 
652 497.400024 
653 -343.399963 
654 588 
655 -379 
656 524.6 
657 -365.8 
658 506.200073 
659 -413.8 
660 554.800049 
661 -391.8 
662 541.800049 
663 -409.199951 
664 573 
665 -390.399963 
666 535 
667 -373.8 
668 513.2001 
669 -376 
670 538.4 
671 -391 
672 566.2001 
673 -424.199951 
674 493.200073 
675 -471.199951 
676 408.800049 
677 -454 
678 289 
679 -612 
680 252.200073 
681 -413.8 
682 465.800049 
683 -251.399963 
684 708.2001 
685 -134.599976 
686 860.2001 
687 -56.4000244 
688 907.7999 
689 23.2000732 
690 935.2001 
691 9.599976 
692 960.0001 
693 201.599976 
694 1355.6 
695 78.4000244 
696 1265.79993 
697 0.200073242 
698 1283.6 
699 -11 
700 1103.20007 
701 -50.4000244 
702 1067.00012 
703 -35 
704 1080.79993 
705 -67.5999756 
706 1025.6 
707 -155 
708 945.4 
709 -129.399963 
710 835.800049 
711 -230.599976 
712 722.800049 
713 -267.199951 
714 743.2001 
715 -281.199951 
716 675 
717 -278.599976 
718 612.800049 
719 -283.399963 
720 687 
721 -296.199951 
722 626.6 
723 -292.599976 
724 674.800049 
725 -264 
726 663.800049 
727 -272.199951 
728 644.6 
729 -266 
730 608.4 
731 -293 
732 660.2001 
733 -291.599976 
734 690.4 
735 -274.399963 
736 646.2001 
737 -233 
738 645.800049 
739 -206.599976 
740 641.4 
741 -222.599976 
742 671.6 
743 -282.199951 
744 664.6 
745 -207.399963 
746 689 
747 -277.8 
748 662 
749 -236.199951 
750 710.4 
751 -198.399963 
752 747.2001 
753 -227.599976 
754 704 
755 -278.199951 
756 731 
757 -237 
758 698.4 
759 -284 
760 613 
761 -289.8 
762 638.4 
763 -297.599976 
764 696.800049 
765 -245.799988 
766 628.2001 
767 -218.399963 
768 657 
769 -276.8 
770 680.4 
771 -256 
772 656.800049 
773 -305.399963 
774 613.800049 
775 -354.399963 
776 755.2001 
777 -282.199951 
778 778.4 
779 -267.199951 
780 691.800049 
781 -261.399963 
782 732.4 
783 -287.8 
784 690.2001 
785 -292 
786 711.2001 
787 -262.199951 
788 751.800049 
789 -286.8 
790 680.800049 
791 -273 
792 688.800049 
793 -256.199951 
794 713.6 
795 -293.199951 
796 679.800049 
797 -324.8 
798 607 
799 -345.199951 
800 548.4 
801 -339.8 
802 550.4 
803 -359.399963 
804 557.2001 
805 -326.399963 
806 536 
807 -409.599976 
808 462.400024 
809 -453 
810 466.800049 
811 -450.599976 
812 531 
813 -384.8 
814 585 
815 -291.399963 
816 608.6 
817 -380.199951 
818 530.4 
819 -387.199951 
820 539.4 
821 -327 
822 597.2001 
823 -321.599976 
824 284.200073 
825 -586 
826 211.800049 
827 -509 
828 220.200073 
829 -586 
830 186.200073 
831 -577.399963 
832 222.200073 
833 -538.8 
834 200.200073 
835 -598.199951 
836 196.599976 
837 -571.8 
838 148.599976 
839 -612.399963 
840 193.400024 
841 -589.399963 
842 206.200073 
843 -593 
844 144.599976 
845 -572.399963 
846 141.400024 
847 -598 
848 156.200073 
849 -604.8 
850 160.800049 
851 -562 
852 87.5999756 
853 -649 
854 84.5999756 
855 -649 
856 166.400024 
857 -537.6 
858 207 
859 -549.8 
860 213.599976 
861 -543.6 
862 193 
863 -555.199951 
864 234.800049 
865 -563.6 
866 221.599976 
867 -503 
868 196.599976 
869 -570.8 
870 224.200073 
871 -556.8 
872 193.400024 
873 -545.399963 
874 163.599976 
875 -584.399963 
876 598 
877 -432.399963 
878 497.599976 
879 -440.8 
880 410.200073 
881 -513.399963 
882 389.400024 
883 -519 
884 324 
885 -554.8 
886 273.800049 
887 -529.8 
888 255.400024 
889 -615 
890 219.599976 
891 -537.399963 
892 194.599976 
893 -464 
894 517.4 
895 -380.199951 
896 498.400024 
897 -469.199951 
898 425.400024 
899 -394.199951 
900 467.200073 
901 -453.399963 
902 522.6 
903 -383.8 
904 557 
905 -365.399963 
906 526.6 
907 -342.8 
908 544.4 
909 -367.8 
910 534.4 
911 -429 
912 565 
913 -383.599976 
914 483.599976 
915 -371.199951 
916 562 
917 -374.199951 
918 521 
919 -517.8 
920 425.200073 
921 -469.599976 
922 492.800049 
923 -467.399963 
924 409.200073 
925 -455.199951 
926 384.800049 
927 -481.199951 
928 408.200073 
929 -449.8 
930 503 
931 -429.599976 
932 540.2001 
933 -432.8 
934 476.800049 
935 -420 
936 428.599976 
937 -547.399963 
938 124.200073 
939 -620.399963 
940 130.599976 
941 -583.8 
942 113.400024 
943 -617.399963 
944 141 
945 -606.399963 
946 107 
947 -640 
948 98.4000244 
949 -604.8 
950 120.400024 
951 -585 
952 260.800049 
953 -503 
954 261.800049 
955 -537 
956 248.800049 
957 -536.199951 
958 211.800049 
959 -500.8 
960 255.400024 
961 -501.399963 
962 238.599976 
963 -529 
964 254.800049 
965 -506.599976 
966 226.400024 
967 -476.599976 
968 224.200073 
969 -504.399963 
970 141 
971 -608.199951 
972 146.800049 
973 -600.399963 
974 161 
975 -579.399963 
976 274 
977 -519.6 
978 297.400024 
979 -542.8 
980 256 
981 -520.8 
982 280.599976 
983 -544.8 
984 284.200073 
985 -522 
986 277.599976 
987 -492.199951 
988 277 
989 -511.599976 
990 246.599976 
991 -537.399963 
992 301.800049 
993 -474.8 
994 268.599976 
995 -503 
996 253.200073 
997 -506.8 
998 265.599976 
999 -495.399963 
1000 234.599976 
1001 -519.399963 
1002 246.200073 
1003 -489 
1004 306 
1005 -533.6 
1006 296 
1007 -502.199951 
1008 293.800049 
1009 -494.199951 
1010 304 
1011 -461.199951 
1012 279.200073 
1013 -526.199951 
1014 279.200073 
1015 -473.8 
1016 293.599976 
1017 -460 
1018 307.400024 
1019 -520.6 
1020 337.200073 
1021 -503.599976 
1022 284 
1023 -516.8 
1024 326.400024 
1025 -479.8 
1026 337.200073 
1027 -503 
1028 329.800049 
1029 -467.599976 
1030 322.800049 
1031 -499.8 
1032 351 
1033 -490.199951 
1034 354 
1035 -474 
1036 343.800049 
1037 -472.8 
1038 356.400024 
1039 -457.8 
1040 364 
1041 -465.599976 
1042 434 
1043 -438.399963 
1044 418.800049 
1045 -412 
1046 412.400024 
1047 -455.399963 
1048 452.200073 
1049 -457.8 
1050 394.200073 
1051 -427 
1052 422.599976 
1053 -333.8 
1054 561 
1055 -351.199951 
1056 503 
1057 -470.199951 
1058 508 
1059 -448.599976 
1060 484.800049 
1061 -392.199951 
1062 499.200073 
1063 -424.599976 
1064 473 
1065 -417.599976 
1066 518.800049 
1067 -389.199951 
1068 539.6 
1069 -420.399963 
1070 475.599976 
1071 -385 
1072 515.2001 
1073 -388.199951 
1074 521.4 
1075 -414.599976 
1076 462.800049 
1077 -398.199951 
1078 468.400024 
1079 -468.599976 
1080 427.400024 
1081 -481.199951 
1082 284.400024 
1083 -608.199951 
1084 175 
1085 -627.8 
1086 135 
1087 -659.199951 
1088 136.400024 
1089 -623.199951 
1090 143.599976 
1091 -600 
1092 147.800049 
1093 -599.6 
1094 113 
1095 -614.8 
1096 141.599976 
1097 -642.6 
1098 157.400024 
1099 -611.399963 
1100 147.200073 
1101 -610.199951 
1102 164.200073 
1103 -637.8 
1104 146.800049 
1105 -581.8 
1106 125.800049 
1107 -629.6 
1108 167 
1109 -569 
1110 94.20007 
1111 -604.6 
1112 142.400024 
1113 -602.199951 
1114 116 
1115 -606.8 
1116 142.400024 
1117 -580 
1118 117.200073 
1119 -596.399963 
1120 145.599976 
1121 -620.6 
1122 110.599976 
1123 -625.8 
1124 89.80005 
1125 -619 
1126 139 
1127 -583.199951 
1128 146.800049 
1129 -593 
1130 140.599976 
1131 -597.6 
1132 148 
1133 -650 
1134 118.800049 
1135 -596.199951 
1136 352.400024 
1137 -444.199951 
1138 381.400024 
1139 -492.8 
1140 334.400024 
1141 -497.399963 
1142 347 
1143 -484.399963 
1144 330.400024 
1145 -483.599976 
1146 357.599976 
1147 -523.199951 
1148 315.200073 
1149 -503.399963 
1150 345.800049 
1151 -487.199951 
1152 355.400024 
1153 -456.599976 
1154 370 
1155 -497.199951 
1156 379.800049 
1157 -458.399963 
1158 409.400024 
1159 -503.599976 
1160 320.400024 
1161 -459 
1162 397.200073 
1163 -486.599976 
1164 354.599976 
1165 -439.8 
1166 418.200073 
1167 -454.199951 
1168 334.599976 
1169 -436 
1170 341.400024 
1171 -469.599976 
1172 406.200073 
1173 -489.8 
1174 384.200073 
1175 -479.199951 
1176 373.400024 
1177 -446 
1178 401.800049 
1179 -455.599976 
1180 344 
1181 -471.599976 
1182 386.400024 
1183 -465.8 
1184 363.400024 
1185 -480 
1186 410.599976 
1187 -462.199951 
1188 450 
1189 -452.8 
1190 351.800049 
1191 -484.8 
1192 393.400024 
1193 -439.399963 
1194 397 
1195 -471.8 
1196 426.599976 
1197 -381.199951 
1198 418.400024 
1199 -418 
1200 426.800049 
1201 -447 
1202 366.800049 
1203 -431.8 
1204 443.400024 
1205 -460.8 
1206 440.400024 
1207 -416.199951 
1208 409.599976 
1209 -397.199951 
1210 427.400024 
1211 -394.599976 
1212 495.599976 
1213 -408.8 
1214 470.400024 
1215 -421.8 
1216 517.800049 
1217 -442.399963 
1218 527.2001 
1219 -399.199951 
1220 544.2001 
1221 -354 
1222 535.4 
1223 -358.399963 
1224 527.6 
1225 -374 
1226 599 
1227 -392 
1228 590.4 
1229 -327.8 
1230 602.6 
1231 -353.199951 
1232 650.2001 
1233 -369.599976 
1234 642 
1235 -359 
1236 725.800049 
1237 -296.599976 
1238 734.4 
1239 -223.199951 
1240 766.4 
1241 -287.8 
1242 752.2001 
1243 -277.199951 
1244 828.4 
1245 -233.199951 
1246 809 
1247 -198 
1248 773 
1249 -228.799988 
1250 803.800049 
1251 -278 
1252 767 
1253 -238 
1254 859.800049 
1255 -238.399963 
1256 740.4 
1257 -269.599976 
1258 742.6 
1259 -297.199951 
1260 714.800049 
1261 -344 
1262 616.2001 
1263 -342.8 
1264 654.2001 
1265 -365.199951 
1266 660.4 
1267 -372.199951 
1268 669.2001 
1269 -299.599976 
1270 667.2001 
1271 -345 
1272 637 
1273 -357.8 
1274 646.800049 
1275 -381.399963 
1276 652.800049 
1277 -378.199951 
1278 622.4 
1279 -347.199951 
1280 647.6 
1281 -361.599976 
1282 646.800049 
1283 -371.399963 
1284 601.4 
1285 -360.199951 
1286 630.4 
1287 -289.599976 
1288 619 
1289 -304.199951 
1290 672 
1291 -368 
1292 591.4 
1293 -375.399963 
1294 590.4 
1295 -442 
1296 578 
1297 -424.199951 
1298 626.800049 
1299 -384.8 
1300 616.6 
+0

Hiya, est-ce que ma réponse t'a réglé? Si oui, acceptez et fermez? –

+0

@AhmedFasih Oui beaucoup, merci – Nyxynyx

Répondre

2

__gVirt_NP_NNS_NNPS<__ problèmes Trois-ish.

(1) Comparez les deux suivantes:

df[['Y']].as_matrix().shape # (801, 1), yours 
df['Y'].as_matrix().shape # (801,), better 

np.fft.fft dit si axis n'est pas fourni, le dernier axe est utilisé. Dans votre code, la FFT d'un tableau 801 par 1 est évaluée le long de la dernière dimension, c'est-à-dire, une FFT à 1 point - totalement pas ce que vous vouliez.

Solution: retirer une paire de supports.

(2) Avec ceci en place, la sortie de np.fft.fft est complexe, comme prévu. Au lieu de prendre son composant réel seulement, utilisez sa valeur absolue.

(3) En outre, il semble que le tracé de Pandas a quelques problèmes pour tracer la sortie de np.fft.fftfreq car sa sortie passe de [0 ... 0.5 -0.5 ... 0]. Solution simple: utilisez np.fft.fftshift.

Solutions à # 2-3:

df['spectrum'] = np.abs(np.fft.fftshift(np.fft.fft(df['Y']))) 
df['freq'] = np.fft.fftshift(np.fft.fftfreq(len(df.index), 1)) 

(solution alternative à # 3: utiliser np.fft.rfft et rfftfreq, puisque vos données d'entrée est réel.)

Code final:

import pandas as pd 
import numpy as np 

df = pd.read_csv('dat.csv', sep=',') 
df.plot(x='X', y='Y') 

df['spectrum'] = np.abs(np.fft.fftshift(np.fft.fft(df['Y']))) 
df['freq'] = np.fft.fftshift(np.fft.fftfreq(len(df.index), 1)) 
df.plot(x='freq', y='spectrum') 

Résultat:

Spectrum

Suggestion: mieux vaut np.abs d'utiliser db (décibels). I.e., db = lambda x: 20 * np.log10(np.abs(x)). Sinon, si ce n'est pas votre truc, il suffit de tracer l'axe des y sur une échelle logarithmique. Observation: vous devriez pouvoir supprimer le bruit bruyant à haute fréquence par filtrage passe-bas des données, avec une fréquence de coupure de 0,25 Hz normalisée. (Faites-moi savoir si vous avez des problèmes avec ça.Si je collectionnais ce genre de données, je craindrais que mon filtre anti-aliasing ne fonctionne pas - il ne devrait jamais y avoir autant de bruit à la fréquence de Nyquist. Si vous obtenez beaucoup d'alias, qui sait ce que le signal d'origine est.

+0

Comment avez-vous décidé de 0,25 Hz? – Nyxynyx

+0

Dans le graphique, 0,25 (normalisé) Hz ressemble à un minimum local approximatif. Ce n'est pas tout à fait Hz, puisque je n'ai pas mis à l'échelle le vecteur de fréquence avec la fréquence d'échantillonnage (passer l'intervalle d'échantillonnage, par exemple '1/44.8e3' à' np.fft.fftfreq' pour un signal audio). Est-ce que ça répond à votre question? –