2017-04-01 180 views
2

我在繪製數據序列的傅里葉變換(Y =強度,X =波長)時遇到了問題。目標是消除正弦振盪,但對數據的傅立葉變換應用陷波濾波器,然後再進行另一次傅里葉變換。在Python Numpy中發生意外的傅立葉變換結果

這裏的原始數據系列:

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

enter image description here

,做傅里葉變換後:

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

問題:爲什麼它繪製諾斯ING? FFT是否錯誤地完成了?

數據

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

嗨嗨,我的回答是否讓你感到厭煩?如果是,請接受並關閉? –

+0

@AhmedFasih非常感謝, – Nyxynyx

回答

2

三十歲上下的問題。

(1)比較以下兩種:

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

np.fft.fft說,如果不提供axis,最後軸被使用。在你的代碼中,801乘1陣列的FFT沿着最後一個維度進行評估,即1點FFT--完全不是你想要的。

解決方法:取下一對托架。

(2)有了這個設置,np.fft.fft的輸出就像預期的那樣複雜了。使用它的絕對值,而不是採用真實的組件。 (3)此外,看起來大熊貓情節在繪製np.fft.fftfreq的輸出時存在一些問題,因爲它的輸出從[0 ... 0.5 -0.5 ... 0]變爲。簡單的解決方案:使用np.fft.fftshift

解決方案#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)) 

(替代解決方案#3:因爲你的輸入數據是真實的使用np.fft.rfftrfftfreq。)

最終代碼:

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') 

結果:

Spectrum

建議:優於np.abs的是使用db(分貝)。即,db = lambda x: 20 * np.log10(np.abs(x))。或者,如果這不是你的事情,只需在對數刻度上繪製y軸即可。

觀察:您應該能夠通過對數據進行低通濾波來消除高頻噪聲,截止頻率爲0.25歸一化Hz。 (讓我知道你是否遇到麻煩。)如果我收集了這種數據,我擔心ADC之前的抗混疊濾波器沒有工作 - 人們不應該在奈奎斯特頻率下看到如此多的噪聲。如果你得到很多別名,誰知道原始信號是什麼。

+0

您是如何決定0.25赫茲的? – Nyxynyx

+0

在圖中,0.25(標準化)Hz看起來像是一個近似的局部最小值。它不是Hz,因爲我沒有用採樣率對頻率向量進行縮放(通過採樣間隔,例如,1/44.8e3到音頻信號的np.fft.fftfreq)。這是否回答你的問題? –