Con trăn sóng hình sin ồn ào

Biến đổi Fourier là một cách mạnh mẽ để xem dữ liệu từ một góc độ hoàn toàn khác. Từ miền thời gian sang miền tần số. Nhưng hoạt động mạnh mẽ này có vẻ đáng sợ với các phương trình toán học của nó

Chuyển sóng miền thời gian sang miền tần số

Từ miền thời gian sang miền tần số, còn được gọi là Biến đổi Fourier rời rạc chuyển tiếp hoặc DFT

Hình ảnh bên dưới là một hình ảnh tốt để minh họa Biến đổi Fourier. phân hủy một sóng phức tạp thành nhiều hình sin thông thường

Hình ảnh từ wiki

Dưới đây là hình ảnh động hoàn chỉnh giải thích điều gì sẽ xảy ra khi chuyển đổi dữ liệu sóng miền thời gian sang chế độ xem miền tần số

Gif từ wiki

Ta có thể dễ dàng thao tác dữ liệu trong miền tần số chẳng hạn. loại bỏ sóng nhiễu. Sau đó, chúng ta có thể sử dụng phương trình nghịch đảo này để chuyển đổi dữ liệu miền tần số trở lại sóng miền thời gian

Nghịch đảo miền thời gian từ miền tần số, còn được gọi là Biến đổi Fourier rời rạc nghịch đảo hoặc IDFT

Hãy tạm bỏ qua độ phức tạp của phương trình FT. Giả sử rằng chúng ta đã hoàn toàn hiểu ý nghĩa của các phương trình toán học và hãy sử dụng Biến đổi Fourier để thực hiện một số công việc thực tế trong Python

Cách tốt nhất để hiểu bất cứ điều gì là sử dụng nó, giống như cách tốt nhất để học bơi là bị ướt bằng cách lặn xuống nước

Trộn dữ liệu sạch với tiếng ồn

Tạo hai sóng hình sin và hợp nhất chúng thành một sóng hình sin, sau đó cố tình làm ô nhiễm sóng sạch bằng dữ liệu được tạo từ ________ 20

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [16,10]
plt.rcParams.update[{'font.size':18}]
#Create a simple signal with two frequencies
data_step = 0.001
t = np.arange[start=0,stop=1,step=data_step]
f_clean = np.sin[2*np.pi*50*t] + np.sin[2*np.pi*120*t]
f_noise = f_clean + 2.5*np.random.randn[len[t]]
plt.plot[t,f_noise,color='c',Linewidth=1.5,label='Noisy']
plt.plot[t,f_clean,color='k',Linewidth=2,label='Clean']
plt.legend[]

[Việc kết hợp hai tín hiệu để tạo thành tín hiệu thứ ba còn được gọi là tích chập hoặc tích chập tín hiệu. Đây là một chủ đề thú vị khác và ngày nay được sử dụng nhiều trong Mô hình mạng nơ-ron]

Chúng tôi có sóng với nhiễu, màu đen là sóng chúng tôi muốn, đường màu xanh lá cây là nhiễu

Sóng sạch trộn lẫn với tiếng ồn, bởi Andrew Zhu

Nếu tôi ẩn các màu trong biểu đồ, chúng tôi hầu như không thể tách nhiễu ra khỏi dữ liệu sạch. Biến đổi Fourier có thể trợ giúp ở đây, tất cả những gì chúng ta cần làm là chuyển đổi dữ liệu sang một phối cảnh khác, từ chế độ xem thời gian [trục x] sang chế độ xem tần số [trục x sẽ là tần số sóng]

Chuyển đổi từ miền thời gian sang miền tần số

Bạn có thể sử dụng

from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
1 hoặc
from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
2. Tôi thấy
from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
2 khá tiện dụng và đầy đủ chức năng. Ở đây tôi sẽ sử dụng
from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
2 trong bài viết này, nhưng đó là lựa chọn của bạn nếu bạn muốn sử dụng các mô-đun khác hoặc thậm chí bạn có thể xây dựng một mô-đun của riêng mình [xem mã sau] dựa trên công thức mà tôi đã trình bày ở phần đầu

from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
  • Trong mã, tôi sử dụng
    from scipy.fft import rfft,rfftfreq
    n = len[t]
    yf = rfft[f_noise]
    xf = rfftfreq[n,data_step]
    plt.plot[xf,np.abs[yf]]
    2thay vì
    from scipy.fft import rfft,rfftfreq
    n = len[t]
    yf = rfft[f_noise]
    xf = rfftfreq[n,data_step]
    plt.plot[xf,np.abs[yf]]
    3. r có nghĩa là giảm [tôi nghĩ] để chỉ các tần số dương mới được tính. Tất cả các tần số phản chiếu âm sẽ bị bỏ qua. và nó cũng nhanh hơn. xem thêm thảo luận tại đây
  • Kết quả
    from scipy.fft import rfft,rfftfreq
    n = len[t]
    yf = rfft[f_noise]
    xf = rfftfreq[n,data_step]
    plt.plot[xf,np.abs[yf]]
    4 từ hàm
    from scipy.fft import rfft,rfftfreq
    n = len[t]
    yf = rfft[f_noise]
    xf = rfftfreq[n,data_step]
    plt.plot[xf,np.abs[yf]]
    2 là một số phức, có dạng như
    from scipy.fft import rfft,rfftfreq
    n = len[t]
    yf = rfft[f_noise]
    xf = rfftfreq[n,data_step]
    plt.plot[xf,np.abs[yf]]
    6. hàm
    from scipy.fft import rfft,rfftfreq
    n = len[t]
    yf = rfft[f_noise]
    xf = rfftfreq[n,data_step]
    plt.plot[xf,np.abs[yf]]
    7 sẽ tính √[a² + b²] cho các số phức

Đây là chế độ xem Miền tần số kỳ diệu của các sóng ban đầu của chúng tôi. trục x biểu thị tần số

Dữ liệu miền tần số, bởi Andrew Zhu

Thứ gì đó có vẻ phức tạp trong miền thời gian giờ được chuyển đổi thành dữ liệu miền tần số rất đơn giản. Hai đỉnh biểu thị tần số của hai sóng hình sin của chúng ta. Một làn sóng là 50Hz, một làn sóng khác là 120Hz. Hãy nhìn lại mã tạo ra sóng hình sin

________số 8

Các tần số khác là tiếng ồn, sẽ dễ dàng loại bỏ trong bước tiếp theo

Loại bỏ các tần số tiếng ồn

Với sự trợ giúp của Numpy, chúng tôi có thể dễ dàng đặt các dữ liệu tần số đó thành 0 ngoại trừ 50Hz và 120Hz

yf_abs      = np.abs[yf] 
indices = yf_abs>300 # filter out those value under 300
yf_clean = indices * yf # noise frequency will be set to 0
plt.plot[xf,np.abs[yf_clean]]

Bây giờ, tất cả các tiếng ồn được loại bỏ

Dọn dẹp tiếng ồn, bởi Andrew ZhuInverse quay lại dữ liệu miền thời gian

Mật mã

from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
0

Như kết quả cho thấy, tất cả các sóng nhiễu đều bị loại bỏ

Làn sóng sạch, của Andrew ZhuQuá trình biến đổi hoạt động như thế nào

Quay lại phương trình biến đổi

Từ miền thời gian sang miền tần số, còn được gọi là Biến đổi Fourier rời rạc chuyển tiếp hoặc DFT

Tín hiệu miền thời gian ban đầu được biểu thị bằng chữ thường x. x[n] có nghĩa là điểm dữ liệu miền thời gian ở vị trí n[thời gian]. Điểm dữ liệu trong miền tần số được biểu thị bằng chữ hoa X. X[k] nghĩa là giá trị ở tần số của k

Giả sử, chúng tôi có 10 điểm dữ liệu

from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
1

from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
8 phải là 10, vì vậy, phạm vi của
from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
9 là 0 đến 9, 10 điểm dữ liệu.
f_clean     = np.sin[2*np.pi*50*t] + np.sin[2*np.pi*120*t]
0 đại diện cho tần số #, phạm vi của nó là từ 0 đến 9, tại sao?

phạm vi của n và k

Trong một ngôn ngữ lập trình truyền thống, nó sẽ cần hai vòng lặp for, một vòng lặp cho

f_clean     = np.sin[2*np.pi*50*t] + np.sin[2*np.pi*120*t]
0, một vòng lặp khác cho
from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
9. Trong Python, bạn có thể vector hóa hoạt động với 0 vòng lặp for rõ ràng [Expressive Python]

Và hỗ trợ số phức riêng của Python thật tuyệt vời. hãy xây dựng hàm Biến đổi Fourier

from scipy.fft import rfft,rfftfreq
n = len[t]
yf = rfft[f_noise]
xf = rfftfreq[n,data_step]
plt.plot[xf,np.abs[yf]]
7

Chức năng này tương đối chậm so với chức năng từ

f_clean     = np.sin[2*np.pi*50*t] + np.sin[2*np.pi*120*t]
3 hoặc
f_clean     = np.sin[2*np.pi*50*t] + np.sin[2*np.pi*120*t]
4, nhưng đủ tốt để hiểu chức năng FFT hoạt động như thế nào. Để triển khai nhanh hơn, hãy đọc Jake's Hiểu thuật toán FFT

Những suy nghĩ xa hơn - không phải là một bản tóm tắt

Ý tưởng được trình bày từ Biến đổi Fourier thật sâu sắc. Nó nhắc nhở tôi rằng thế giới có thể không giống như những gì bạn nhìn thấy, cuộc sống mà bạn đang sống có thể có một diện mạo mới hoàn toàn khác chỉ có thể được nhìn thấy bằng một loại phép biến đổi, chẳng hạn như Biến đổi Fourier

Bạn không chỉ có thể chuyển đổi dữ liệu âm thanh mà còn cả hình ảnh, video, sóng điện từ hay thậm chí là dữ liệu giao dịch chứng khoán [sóng Kondratiev]

Biến đổi Fourier cũng có thể được giải thích bằng các vòng tạo sóng

từ wiki

Vòng tròn lớn là đất nước của chúng ta, thời đại của chúng ta. Chúng tôi với tư cách là một cá nhân là vòng tròn bên trong nhỏ bé nhỏ bé. Không có vòng tròn lớn điều khiển mọi thứ, chúng ta thực sự không thể làm được gì nhiều

Cách mạng Công nghiệp xảy ra ở Anh chứ không phải ở các nước khác không chỉ đơn giản là do việc áp dụng động cơ hơi nước, mà còn rất nhiều lý do khác. — Tại sao nước Anh công nghiệp hóa đầu tiên. đó là vòng tròn lớn chỉ tồn tại ở Anh vào thời điểm đó

Nếu đôi khi bạn giàu có hoặc rất thành công ở một nơi nào đó, có lẽ không phải tất cả là do công lao của bạn, mà phần lớn là do đất nước của bạn, những người xung quanh bạn hoặc công ty tốt mà bạn làm việc cùng. Nếu không có những vòng tròn lớn thúc đẩy bạn tiến về phía trước, bạn có thể không đạt được những gì bạn có bây giờ

Càng biết nhiều về Biến đổi Fourier, tôi càng ngạc nhiên về Joseph Fourier khi ông nghĩ ra phương trình khó tin này vào năm 1822. Anh ấy không bao giờ có thể biết rằng công việc của mình hiện đang được sử dụng ở khắp mọi nơi trong thế kỷ 21

Phụ lục — Bốn loại biến đổi Fourier

Tất cả Biến đổi Fourier được đề cập trong bài viết này đều đề cập đến Biến đổi Fourier rời rạc

Bốn loại Biến đổi Fourier, của Andrew Zhu

Khi bạn ngồi trước máy tính và cố gắng làm điều gì đó với Biến đổi Fourier, bạn sẽ chỉ sử dụng DFT - Biến đổi đang được thảo luận trong bài viết này. Nếu bạn quyết định đắm mình trong đầm lầy toán học, đây là hai cuốn sách nên đọc

  1. Miền tần số và phép biến đổi Fourier. Paul W. Sách giáo khoa của Cuff từ Princeton

2. Chương 8 của cuốn sách Xử lý tín hiệu số — của Steven W. Smith họ đã cung cấp liên kết trực tuyến. DSP Ch8

Người giới thiệu
  1. Hướng dẫn tương tác về biến đổi Fourier. https. // giải thích rõ hơn. com/articles/an-interactive-guide-to-the-fourier-transform/
  2. Biến đổi Fourier Với scipy. fft. Xử lý tín hiệu Python. https. //trăn thật. com/python-scipy-fft/
  3. Hiểu thuật toán FFT. http. //jakevdp. github. io/blog/2013/08/28/hiểu-the-fft/
  4. Miền tần số và phép biến đổi Fourier. https. //www. Princeton. edu/~cuff/ele201/kulkarni_text/tần suất. pdf
  5. Khử nhiễu dữ liệu bằng FFT [Python]. https. //www. youtube. com/watch?v=s2K1JfNR7Sc&ab_channel=SteveBrunton
  6. Thuật toán FFT — Từng bước đơn giản. https. //www. youtube. com/watch?v=htCj9exbGo0&ab_channel=SimonXu

Nếu bạn có bất kỳ câu hỏi nào, hãy để lại nhận xét và tôi sẽ cố gắng hết sức để trả lời, Nếu bạn phát hiện ra lỗi hoặc sai sót, đừng ngần ngại đánh dấu chúng. Đọc và hỗ trợ của bạn là vòng tròn lớn thúc đẩy tôi tiếp tục viết nhiều hơn. Cảm ơn

Chủ Đề