欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python與Matlab實現(xiàn)快速傅里葉變化的區(qū)別

 更新時間:2021年10月28日 15:22:49   作者:易~lw  
信號處理免不了要求頻率、畫頻譜圖,但Matlab的fft()函數(shù)與Python的numpy.fft.fft()與scipy.fftpack.fft()函數(shù)得到的是fft變化后的雙邊復數(shù)值,離畫頻譜圖還有幾句代碼的距離。基本原理不介紹了,下面直接懶人投喂,給出Matlab與Python的兩個函數(shù),直接調用即可畫頻譜圖

注:兩種語言的fft算法是有區(qū)別的,最后細聊!

Matlab的fftlw函數(shù)

輸入是信號序列、對應的時間序列、以及是否作圖,輸出可以得到單邊歸一化之后的頻率與對應的振幅,通過輸出可以直接畫出常用的頻譜圖!

function [ F,M ] = fftlw( x,y,draw )
%FFTLW 快速傅里葉變化2021.10.26
%輸入   x--時間 y--信號 draw--1為畫頻譜圖,0為不畫
%輸出   F--頻率 M--幅值


N=length(y);                       %采樣點數(shù)
if(mod(N,2)>0)
    N=N-1;
end
  
Fs=(N-1)/(x(N)-x(1));              %采樣頻率
F=(N/2:N-1)*Fs/N-Fs/2 ;            %頻率
y2=abs(fftshift(fft(y(1:N))));     %快速傅里葉變化
M=2*y2(N/2+1:N)/N;                 %歸一化
M(1)=M(1)/2;                       %常量除以2

if draw==1                         %可視化
    figure
    plot(F,M)
    xlabel('f/HZ')
    ylabel('amplitude')
    title('頻譜圖')
end
end

Python的fftlw函數(shù)

輸入與matlab的略有點不同,分別是采樣頻率、信號序列、是否作圖,輸出與matlab的函數(shù)一致。

import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt

def fftlw(Fs,y,draw):
    '''
    Parameters
    ----------
    Fs : 采樣頻率
    y :  信號序列
    draw :1為畫頻譜圖,0為不畫 

    Returns
    -------
    f : 頻率
    M : 幅值
    '''
    L=len(y)                              #采樣點數(shù)
    f = np.arange(int(L / 2)) * Fs / L    #頻率
    #M = np.abs(np.fft.fft(y))*2/L         #采用numpy.fft.fft()函數(shù)并歸一化
    M = np.abs((fft(y))) *2/L             #采用scipy.fftpack.fft()函數(shù)并歸一化
    M = M[0:int(L / 2)]                   #取單邊譜
    M[0]=M[0]/2                           #常量除以2
    
    if draw==1:                           #可視化
        plt.figure()
        plt.rcParams['font.sans-serif']=['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        plt.plot(f,M)
        plt.xlabel('f/HZ')
        plt.ylabel('amplitude')
        plt.title('頻譜圖')
    return f,M

構造簡單的信號對比兩種語言fftlw效果

舉個例子,構造如下信號驗證所寫函數(shù)的正確性:

y=3+t⋅sin(2πt⋅100)+3⋅sin(2πt⋅200)

其中,包括常數(shù)項,周期項和趨勢項,理論上該信號的頻率應該為0Hz、100Hz、200Hz(具體怎么算的補一補書知識)。在這里,我設置采樣頻率 fs=10000,產生10000個數(shù)據(jù)點,時域圖如下:

在這里插入圖片描述

Matlab調用fftlw函數(shù)的主函數(shù)

fs=10000;                                     %采樣頻率
x=0:1/fs:(10000-1)/fs;                        %時間序列
y=sin(2*pi*x*100).*x+3*sin(2*pi*x*200)+3;     %信號序列
figure                                        %畫時域圖
plot(x,y)
title('時域圖')
xlabel('t/s')
ylabel('amplitude')
[f,m]=fftlw(x,y,1);                           %快速傅里葉變化并畫頻譜圖

得到的頻譜圖如下:發(fā)現(xiàn)0Hz、100Hz、200Hz處的幅值分別為3,0.5,3。0Hz與200Hz處的幅值完美對應時域中常數(shù)項與s i n ( 2 π t ⋅ 200 ) 的系數(shù);而100Hz項sin(2πt⋅200)的系數(shù)不是常數(shù)而是 t,且時間是0-1s,該項傅里葉變化得到的是該段時間內的平均幅值,也就是0.5。

在這里插入圖片描述

Python調用fftlw函數(shù)的主函數(shù)
直接加在def fftlw()的后文調用他就行。

Fs=10000                #采用頻率
L=10000                 #采樣點數(shù)
t=np.arange(0,L/Fs,1/Fs)   #時間序列        
y=np.sin(2*np.pi*t*100)*t+3*np.sin(2*np.pi*t*200)+3  #信號序列
f,M=fftlw(Fs,y,1)         #快速傅里葉變化并畫頻譜圖

在這里插入圖片描述

圖和matlab的一模一樣!但是!

采用實際的振動信號對比兩種語言fftlw效果

數(shù)據(jù)來源于西儲大學轉子實驗臺振動信號,采樣頻率為12000Hz,現(xiàn)取正常狀態(tài)下、轉速1796 rpm軸承振動信號1000個點如下。粗略的觀察,有一個低頻信號大概周期為0.035 s,頻率大概 29Hz。

在這里插入圖片描述

Matlab畫頻譜圖

Matlab畫頻譜圖

Python畫頻譜圖

在這里插入圖片描述

python的頻譜圖的幅值與原始數(shù)據(jù)量級差別較大,與matlab的頻譜圖也毫不相關,可能是底層傅里葉變換的算法不同所致,具體哪個正確還帶進一步考證?。。?/p>

到此這篇關于Python與Matlab實現(xiàn)快速傅里葉變化的區(qū)別的文章就介紹到這了,更多相關Python 傅里葉變化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python實現(xiàn)文件的備份流程詳解

    python實現(xiàn)文件的備份流程詳解

    在本篇文章中我們給大家整理了關于python實現(xiàn)文件的備份的詳細流程步驟,有興趣的朋友們學習下。
    2019-06-06
  • python集合類型用法分析

    python集合類型用法分析

    這篇文章主要介紹了python集合類型用法,實例分析了Python中集合的功能及常見使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Python with關鍵字,上下文管理器,@contextmanager文件操作示例

    Python with關鍵字,上下文管理器,@contextmanager文件操作示例

    這篇文章主要介紹了Python with關鍵字,上下文管理器,@contextmanager文件操作,結合實例形式分析了Python使用with關鍵字及上下文管理器、contextmanager進行文件打開、讀寫、關閉等操作的相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-10-10
  • 總結python實現(xiàn)父類調用兩種方法的不同

    總結python實現(xiàn)父類調用兩種方法的不同

    最近在工作中實現(xiàn)父類調用的時候發(fā)現(xiàn)了一個錯誤,然后通過分析實踐總結出來了,下面這篇文章主要給大家總結了python中實現(xiàn)父類調用兩種方法的不同之處,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • 使用python編寫批量卸載手機中安裝的android應用腳本

    使用python編寫批量卸載手機中安裝的android應用腳本

    該腳本的功能是卸載android手機中安裝的所有第三方應用,主要是使用adb shell pm、adb uninstall 命令,需要的朋友可以參考下
    2014-07-07
  • 如何用python合并多個excel文件

    如何用python合并多個excel文件

    這篇文章主要介紹了如何用python合并多個excel文件,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03
  • python爬取網(wǎng)頁版QQ空間,生成各類圖表

    python爬取網(wǎng)頁版QQ空間,生成各類圖表

    最近python課程學完了,琢磨著用python點什么東西,經過一番搜索,盯上了QQ空間,本文主要講述了如何爬取網(wǎng)頁版QQ空間,并生成詞云圖、柱狀圖、折線圖、餅圖的各種示例代碼
    2021-06-06
  • pycharm連接虛擬機的實現(xiàn)步驟

    pycharm連接虛擬機的實現(xiàn)步驟

    本文主要介紹了pycharm連接虛擬機的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • 如何用python繪制散點圖

    如何用python繪制散點圖

    這篇文章主要介紹了如何用python繪制散點圖問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 利用Python腳本批量生成SQL語句

    利用Python腳本批量生成SQL語句

    這篇文章主要介紹了利用Python腳本批量生成SQL語句,具有很好對參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論