Python FFT

from scipy.fftpack import fft,ifft
import numpy as np

data_array = np.array([
1156	,
1152	,
1136	,
1128	,
1120	,
1112	,
1102	,
1100	,
1088	,
1088	,
1066	,
1074	,
1056	,
1056	,
1042	,
1040	,
1032	,
1028	,
1024	,
1024	,
1008	,
1004	,
1000	,
1008	,
984	,
992	,
976	,
972	,
960	,
960	,
944	,
948	,
948	,
976	,
994	,
1056	,
1098	,
1160	,
1188	,
1224	,
1238	,
1260	,
1259	,
1268	,
1256	,
1264	,
1248	,
1248	,
1240	,
1240	,
1232	,
1232	,
1232	,
1232	,
1218	,
1216	,
1202	,
1192	,
1176	,
1172	,
1172	,
1172	,
1170	,
1176	,
1184	,
1184	,
1176	,
1176	,
1172	,
1164	,
1164	,
1152	,
1152	,
1130	,
1136	,
1120	,
1112	,
1104	,
1104	,
1088	,
1076	,
1064	,
1064	,
1056	,
1044	,
1036	,
1040	,
1024	,
1024	,
1008	,
1012	,
996	,
1000	,
984	,
992	,
976	,
984	,
968	,
972	,
960	,
960	,
936	,
936	,
932	,
948	,
962	,
1008	,
1058	,
1120	,
1168	,
1208	,
1240	,
1256	,
1264	,
1280	,
1280	,
1280	,
1266	,
1272	,
1264	,
1260	,
1256	,
1257	,
1252	,
1252	,
1248	,
1250	,
1240	,
1224	,
1220	,
1216	,
1204	,
1200	,
1200	,
1188	,
1200	,
1196	,
1200	,
1200	,
1196	,
1192	,
1194	,
1184	,
1184	,
1172	,
1161	,
1152	,
1152	,
1136	,
1128	,
1108	,
1112	,
1092	,
1096	,
1080	,
1080	,
1056	,
1072	,
1041	,
1056	,
1032	,
1036	,
1024	,
1024	,
1010	,
1024	,
1000	,
1000	,
984	,
992	,
976	,
976	,
964	,
960	,
960	,
948	,
944	,
944	,
940	,
966	,
1008	,
1068	,
1120	,
1176	,
1216	,
1248	,
1268	,
1282	,
1292	,
1286	,
1288	,
1284	,
1280	,
1280	,
1280	,
1268	,
1280	,
1264	,
1280	,
1260	,
1260	,
1256	,
1248	,
1232	,
1232	,
1216	,
1220	,
1204	,
1216	,
1210	,
1210	,
1206	,
1216	,
1204	,
1206	,
1192	,
1196	,
1188	,
1184	,
1168	,
1172	,
1152	,
1140	,
1128	,
1128	,
1112	,
1112	,
1092	,
1092	,
1080	,
1080	,
1060	,
1058	,
1044	,
1040	,
1028	,
1032	,
1024	,
1024	,
1024	,
1024	,
1000	,
992	,
984	,
984	,
976	,
968	,
960	,
960	,
952	,
960	,
982	,
1024	,
1072	,
1128	,
1178	,
1218	,
1252	,
1266	,
1292	,
1292	,
1296	,
1296	,
1288	,
1288	,
1286	,
1266	,
1280	,
1264	,
1264	,
1264	,
1264	,
1256	,
1252	,
1232	,
1236	,
1216	,
1216	,
1200	,
1208	,
1200	,
1208	,
1200	,
1216	,
1216	,
1216	,
1202	,
1200	,
1192	,
1188	,
1172	,
1168	,
1156	,
1158	,
1140	,
1144	,
1124	,
1120	,
1112	,
1104	,
1092	,
1088	,
1072	,
1072	,
1064	,
1064	,
1050	,
1048	,
1048	,
1040	,
1032	,
1024	,
1024	,
1004	,
1004	,
1000	,
992	,
992	,
984	,
976	,
976	,
976	,
1008	,
1040	,
1096	,
1152	,
1204	,
1234	,
1280	,
1280	,
1304	,
1296	,
1312	,
1296	,
1296	,
1280	,
1284	,
1264	,
1268	,
1258	,
1264	,
1252	,
1252	,
1232	,
1236	,
1209	,
1216	,
1200	,
1202	,
1194	,
1204	,
1200	,
1210	,
1200	,
1204	,
1192	,
1208	,
1186	,
1192	,
1184	,
1176	,
1168	,
1156	,
1152	,
1136	,
1124	,
1120	,
1104	,
1096	,
1092	,
1088	,
1075	,
1072	,
1062	,
1052	,
1042	,
1036	,
1032	,
1032	,
1024	,
1024	,
1024	,
1008	,
1012	,
996	,
996	,
984	,
980	,
972	,
968	,
954	,
978	,
996	,
1040	,
1092	,
1160	,
1200	,
1248	,
1272	,
1304	,
1312	,
1324	,
1320	,
1322	,
1316	,
1314	,
1304	,
1304	,
1292	,
1296	,
1288	,
1296	,
1290	,
1296	,
1280	,
1280	,
1258	,
1256	,
1236	,
1248	,
1232	,
1234	,
1232	,
1234	,
1232	,
1236	,
1233	,
1232	,
1224	,
1220	,
1216	,
1202	,
1194	,
1184	,
1168	,
1168	,
1160	,
1152	,
1138	,
1132	,
1124	,
1112	,
1109	,
1104	,
1092	,
1080	,
1088	,
1072	,
1072	,
1060	,
1062	,
1052	,
1056	,
1040	,
1040	,
1028	,
1032	,
1024	,
1024	,
1004	,
1008	,
1002	,
1028	,
1050	,
1108	,
1152	,
1216	,
1248	,
1294	,
1306	,
1344	,
1333	,
1352	,
1335	,
1348	,
1328	,
1332	,
1322	,
1328	,
1324	,
1328	,
1316	,
1316	,
1312	,
1304	,
1298	,
1288	,
1280	,
1258	,
1256	,
1256	,
1248	,
1249	,
1248	,
1248	,
1248	,
1250	,
1248	,
1248	,
1240	,
1232	,
1220	,
1216	,
1200	,
1192	,
1184	,
1174	,
1168	,
1152	,
1154	,
1136	,
1136	,
1120	,
1120	,
1112	,
1112	,
1090	,
1096	,
1088	,
1080	,
1064	,
1072	,
1064	,
1064	,
1046	,
1048	,
1038	,
1036	,
1024	,
1024	,
1002	,
1006	,
992	,
1024	,
1024	,
1072	,
1112	,
1178	,
1216	,
1264	,
1280	,
1316	,
1316	,
1332	,
1328	,
1336	,
1320	,
1320	,
1312	,
1312	,
1312	,
1304	,
1296	,
1300	,
1296	,
1296	,
1288	,
1281	,
1264	,
1252	,
1248	,
1240	,
1240	,
1240	,
1240	,
1236	,
1240	,
1240	,
1236	,
1236	,
1240	,
1220	,
1222	,
1208	,
1204	,
1187	,
1184	,
1176	,
1176	,
1158	,
1160	,
1144	,
1140	,
1124	,
1124	,
1113	,
1114	,
1104	,
1104	,
1090	,
1088	,
1074	,
1080	,
1056	,
1072	,
1051	,
1050	,
1040	,
1040	,
1024	,
1028	,
1024	,
1036	,
1048	,
1096	,
1140	,
1196	,
1232	,
1272	,
1296	,
1316	,
1323	,
1332	,
1329	,
1328	,
1313	,
1312	,
1304	,
1298	,
1298	,
1298	,
1290	,
1284	,
1280	,
1268	,
1264	,
1248	,
1240	,
1236	,
1228	,
1228	,
1228	,
1224	,
1234	,
1226	,
1232	,
1224	,
1224	,
1216	,
1216	,
1200	,
1204	,
1188	,
1184	,
1168	,
1168	,
1152	,
1152	,
1136	,
1136	,
1112	,
1112	,
1104	,
1104	,
1091	,
1088	,
1072	,
1072	,
1056	,
1064	,
1044	,
1050	,
1032	,
1040	,
1032	,
1028	,
1024	,
1024	,
1008	,
1000	,
988	,
996	,
1008	,
1040	,
1088	,
1140	,
1192	,
1248	,
1280	,
1304	,
1320	,
1332	,
1336	,
1336	,
1334	,
1328	,
1328	,
1328	,
1320	,
1320	,
1320	,
1316	,
1313	,
1312	,
1312	,
1296	,
1296	,
1280	,
1280	,
1264	,
1268	,
1256	,
1256	,
1250	,
1256	,
1252	,
1256	,
1250	,
1250	,
1238	,
1240	,
1224	,
1232	,
1204	,
1200	,
1184	,
1188	,
1166	,
1168	,
1156	,
1154	,
1128	,
1136	,
1112	,
1120	,
1100	,
1104	,
1088	,
1088	,
1072	,
1080	,
1072	,
1072	,
1056	,
1060	,
1042	,
1040	,
1032	,
1026	,
1024	,
1024	,
1008	,
1024	,
1024	,
1060	,
1100	,
1156	,
1201	,
1250	,
1294	,
1318	,
1337	,
1348	,
1356	,
1356	,
1352	,
1346	,
1348	,
1330	,
1344	,
1330	,
1344	,
1332	,
1333	,
1328	,
1328	,
1312	,
1306	,
1290	,
1288	,
1280	,
1280	,
1258	,
1268	,
1264	,
1268	,
1264	,
1264	,
1252	,
1260	,
1240	,
1248	,
1232	,
1224	,
1216	,
1216	,
1188	,
1192	,
1172	,
1170	,
1152	,
1152	,
1136	,
1128	,
1120	,
1120	,
1108	,
1104	,
1092	,
1092	,
1088	,
1073	,
1064	,
1064	,
1056	,
1056	,
1048	,
1040	,
1036	,
1028	,
1026	,
1008	,
1004	,
1000	,
996	,
1004	,
1032	,
1072	,
1128	,
1184	,
1244	,
1280	,
1312	,
1320	,
1332	,
1344	,
1344	,
1330	,
1332	,
1322	,
1328	,
1320	,
1320	,
1306	,
1320	,
1304	,
1308	,
1296	,
1292	,
1280	,
1280	,
1252	,
1256	,
1248	,
1256	,
1240	,
1250	,
1248	,
1252	,
1241	,
1244	,
1236	,
1244	,
1228	,
1224	,
1200	,
1204	,
1184	,
1184	,
1168	,
1168	,
1154	,
1144	,
1136	,
1128	,
1120	,
1112	,
1104	,
1096	,
1088	,
1076	,
1072	,
1072	,
1062	,
1060	,
1052	,
1050	,
1040	,
1032	,
1032	,
1024	,
1012	,
1008	,
1008	,
1000	,
1008	,
1028	,
1068	,
1112	,
1178	,
1216	,
1264	,
1292	,
1316	,
1324	,
1344	,
1328	,
1336	,
1320	,
1320	,
1312	,
1312	,
1304	,
1312	,
1296	,
1306	,
1288	,
1292	,
1280	,
1264	,
1253	,
1249	,
1240	,
1240	,
1232	,
1236	,
1232	,
1240	,
1232	,
1232	,
1228	,
1224	,
1220	,
1208	,
1200	,
1192	,
1184	,
1176	,
1162	,
1156	,
1152	,
1128	,
1124	,
1116	,
1108	,
1100	,
1096	,
1092	,
1080	,
1072	,
1068	,
1064	,
1056	,
1044	,
1056	,
1040	,
1036	,
1032	,
1024	,
1024	,
1024	,
1004	,
1008	,
990	,
992	,
976	,
982	,
978	,
1008	,
1040	,
1104	,
1152	,
1208	,
1236	,
1280	,
1287	,
1316	,
1305	,
1316	,
1304	,
1314	,
1298	,
1304	,
1296	,
1296	,
1292	,
1300	,
1288	,
1294	,
1280	,
1280	,
1264	,
1256	,
1248	,
1237	,
1232	,
1224	,
1224	,
1226	,
1224	,
1224	,
1219	,
1226	,
1217	,
1216	,
1202	,
1200	,
1196	,
1184	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,
1172	,

])
print(len(data_array))

x = np.linspace(0, 1, 3000)

# 设置需要采样的信号,频率分量有200,400和600
y = 1000+7 * np.sin(2 * np.pi * 200 * x) + 5 * np.sin(2 * np.pi * 400 * x)+ 10 * np.sin(2 * np.pi * 1.5 * x)
print(type(y))
fft_val=fft(data_array)
fft_val1=fft(y)

abs_y=np.abs(fft_val)/len(fft_val)
abs_y1=np.abs(fft_val1)/len(fft_val1)
print(type(abs_y))
print(abs_y)

f = open('c:2.txt', mode='w')
for i in range(0,len(abs_y)):
    f.write(str(abs_y[i])+'\n')
#f.write(str(abs_y))
f.close()

 

 

MCU和Python计算FFT,结果都一样。

numpy 很有用的库。 

<think>好的,我现在需要回答用户关于如何在Python中实现FFT的问题。根据用户提供的引用内容,我需要综合这些信息来给出一个清晰的步骤。首先,用户提到了numpy库中的fft模块,这应该是最简单的方法。然后,引用中还提到了自己实现的DFT和FFT代码,但用户可能更倾向于使用现有的库,因为效率更高。 首先,我应该介绍使用numpyfft.fft方法,这是最直接的方式。然后,如果需要,可以展示如何手动实现FFT,但需要指出这可能不如库函数高效。同时,要确保代码示例正确,并解释关键步骤,比如生成信号、应用FFT、计算频率和幅值等。此外,还需要注意用户提到的格式要求,比如行内数学公式用$...$,独立公式用$$...$$,并且正确使用中文回答。 另外,用户要求生成相关问题,我需要根据FFT的实现和应用提出几个相关的问题,比如性能优化、应用场景、与DFT的区别等。还要检查引用标识是否正确添加,比如在提到numpyfft模块时引用[^1],在提到手动实现时引用[^2]和[^3]。 最后,确保整个回答结构清晰,步骤明确,符合用户要求的格式,并且所有LaTeX语法正确。例如,在提到傅里叶变换公式时,使用$$...$$包裹,并正确转义字符。</think>### 如何在Python中实现FFT(快速傅里叶变换) #### 方法1:使用`numpy.fft`库(推荐) 1. **导入库** ```python import numpy as np ``` 2. **生成时域信号** 例如,生成一个包含多个频率的正弦信号: $$x(t) = \sin(2\pi f_1 t) + 0.5\sin(2\pi f_2 t)$$ ```python fs = 1000 # 采样频率 t = np.linspace(0, 1, fs) # 时间序列(1秒) f1, f2 = 50, 120 # 信号频率 signal = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t) ``` 3. **应用FFT** ```python fft_result = np.fft.fft(signal) # 计算FFT ``` 4. **计算频率轴和幅值** ```python n = len(signal) freq = np.fft.fftfreq(n, d=1/fs) # 频率轴 magnitude = np.abs(fft_result) * 2 / n # 幅值归一化 ``` 5. **可视化结果** ```python import matplotlib.pyplot as plt plt.plot(freq[:n//2], magnitude[:n//2]) # 仅显示正频率部分 plt.xlabel("频率 (Hz)") plt.ylabel("幅值") plt.show() ``` #### 方法2:手动实现FFT(仅用于理解原理) 以下是一个简化的递归Cooley-Tukey FFT算法实现(效率低于库函数)[^3]: ```python def fft(x): x = np.asarray(x, dtype=np.complex128) N = x.shape[0] if N <= 1: return x even = fft(x[::2]) # 偶数列 odd = fft(x[1::2]) # 奇数列 factor = np.exp(-2j * np.pi * np.arange(N) / N) return np.concatenate([even + factor[:N//2] * odd, even + factor[N//2:] * odd]) # 测试对比 x = np.random.random(1024) print(np.allclose(fft(x), np.fft.fft(x))) # 输出应为True ``` --- ### 关键说明 1. **FFT与DFT的关系** FFT是DFT(离散傅里叶变换)的快速算法,计算复杂度为$O(N\log N)$,而DFT为$O(N^2)$[^3]。 2. **应用场景** - 信号频谱分析(如音频、振动信号) - 图像频域滤波 - 通信系统的正交频分复用(OFDM) 3. **注意事项** - 输入信号长度建议为$2^n$以提高效率 - 需处理复数结果的幅值和相位信息 - 注意频谱泄露问题(可通过加窗缓解) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值