import numpy as np from scipy.fft import fft,fftfreq import matplotlib.pyplot as plt from scipy.io import loadmat a=loadmat("ex2_signal1.mat") a=a['signal1'] a=a[0,:] print(a.shape) t=np.linspace(0,1,200) plt.plot(t,a) plt.title("21351050102") plt.show() b=loadmat("ex2_signal2.mat") b=b['signal2'] b=b[0,:] t=np.linspace(0,1,200) plt.plot(t,b) plt.title("21351050102") plt.show() N=len(a) T=1 rate=N/T y1=fft(a) x1=fftfreq(N,T) sample_rate=600 duration=0.001 print("采样率为:",sample_rate/duration,"HZ") plt.plot(xf,np.abs(yf1)) plt.xlabel('Frequnency(HZ)') plt.ylabel('Magnitude') plt.title('Frequency domain 21351050102') plt.tight_layout() plt.show() y2=fft(a) x2=fftfreq(N,T) sample_rate=600 duration=0.001 print("采样率为:",sample_rate/duration,"HZ") plt.plot(xf,np.abs(yf2)) plt.xlabel('Frequnency(HZ)') plt.ylabel('Magnitude') plt.title('Frequency domain 21351050102') plt.tight_layout() plt.show() m=np.argmax(abs(y1)) y1[abs(y1<y1[m])]=0 plt.plot(x1,y1) plt.title("21351050102") plt.show() a=np.fft.ifft(y1) a=a.real plt.plot(t,a) plt.title("21351050102") plt.show()
时间: 2024-02-23 16:57:32 浏览: 180
好的,这段Python代码主要是用于对两个信号进行傅里叶变换以及傅里叶反变换等操作。下面逐行解释每行代码的含义和作用:
1. `import numpy as np`:导入NumPy库,用于数值计算。
2. `from scipy.fft import fft,fftfreq`:从SciPy库中导入傅里叶变换函数fft和傅里叶频率函数fftfreq。
3. `import matplotlib.pyplot as plt`:导入Matplotlib库,用于绘图。
4. `from scipy.io import loadmat`:从SciPy库中导入loadmat函数,用于加载.mat文件。
5. `a=loadmat("ex2_signal1.mat")`:加载名为"ex2_signal1.mat"的.mat文件,并将其赋值给变量a。
6. `a=a['signal1']`:获取a中名为"signal1"的变量。
7. `a=a[0,:]`:将a转换为一维数组。
8. `print(a.shape)`:输出a的形状。
9. `t=np.linspace(0,1,200)`:生成一个长度为200的等差数列,从0到1。
10. `plt.plot(t,a)`:绘制a关于t的折线图。
11. `plt.title("21351050102")`:设置图像标题为"21351050102"。
12. `plt.show()`:显示图像。
13. `b=loadmat("ex2_signal2.mat")`:加载名为"ex2_signal2.mat"的.mat文件,并将其赋值给变量b。
14. `b=b['signal2']`:获取b中名为"signal2"的变量。
15. `b=b[0,:]`:将b转换为一维数组。
16. `t=np.linspace(0,1,200)`:生成一个长度为200的等差数列,从0到1。
17. `plt.plot(t,b)`:绘制b关于t的折线图。
18. `plt.title("21351050102")`:设置图像标题为"21351050102"。
19. `plt.show()`:显示图像。
20. `N=len(a)`:获取a的长度。
21. `T=1`:设置采样周期为1。
22. `rate=N/T`:计算采样频率。
23. `y1=fft(a)`:对a进行傅里叶变换,并将结果赋值给y1。
24. `x1=fftfreq(N,T)`:生成傅里叶频率数组,并将其赋值给x1。
25. `sample_rate=600 duration=0.001`:设置采样率和采样时长。
26. `print("采样率为:",sample_rate/duration,"HZ")`:输出采样率。
27. `plt.plot(xf,np.abs(yf1))`:绘制傅里叶变换后的频域图像。
28. `plt.xlabel('Frequnency(HZ)')`:设置x轴标签为"Frequency(HZ)"。
29. `plt.ylabel('Magnitude')`:设置y轴标签为"Magnitude"。
30. `plt.title('Frequency domain 21351050102')`:设置图像标题为"Frequency domain 21351050102"。
31. `plt.tight_layout()`:自动调整子图参数,以便填充整个图像区域。
32. `plt.show()`:显示图像。
33. `y2=fft(a)`:对b进行傅里叶变换,并将结果赋值给y2。
34. `x2=fftfreq(N,T)`:生成傅里叶频率数组,并将其赋值给x2。
35. `sample_rate=600 duration=0.001`:设置采样率和采样时长。
36. `print("采样率为:",sample_rate/duration,"HZ")`:输出采样率。
37. `plt.plot(xf,np.abs(yf2))`:绘制傅里叶变换后的频域图像。
38. `plt.xlabel('Frequnency(HZ)')`:设置x轴标签为"Frequency(HZ)"。
39. `plt.ylabel('Magnitude')`:设置y轴标签为"Magnitude"。
40. `plt.title('Frequency domain 21351050102')`:设置图像标题为"Frequency domain 21351050102"。
41. `plt.tight_layout()`:自动调整子图参数,以便填充整个图像区域。
42. `plt.show()`:显示图像。
43. `m=np.argmax(abs(y1))`:获取y1中绝对值最大的位置。
44. `y1[abs(y1<y1[m])]=0`:将y1中绝对值小于y1[m]的元素置为0。
45. `plt.plot(x1,y1)`:绘制y1关于x1的折线图。
46. `plt.title("21351050102")`:设置图像标题为"21351050102"。
47. `plt.show()`:显示图像。
48. `a=np.fft.ifft(y1)`:对y1进行傅里叶反变换,并将结果赋值给a。
49. `a=a.real`:取a的实部。
50. `plt.plot(t,a)`:绘制a关于t的折线图。
51. `plt.title("21351050102")`:设置图像标题为"21351050102"。
52. `plt.show()`:显示图像。
阅读全文