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

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

 更新時(shí)間:2021年10月28日 15:22:49   作者:易~lw  
信號(hào)處理免不了要求頻率、畫(huà)頻譜圖,但Matlab的fft()函數(shù)與Python的numpy.fft.fft()與scipy.fftpack.fft()函數(shù)得到的是fft變化后的雙邊復(fù)數(shù)值,離畫(huà)頻譜圖還有幾句代碼的距離?;驹聿唤榻B了,下面直接懶人投喂,給出Matlab與Python的兩個(gè)函數(shù),直接調(diào)用即可畫(huà)頻譜圖

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

Matlab的fftlw函數(shù)

輸入是信號(hào)序列、對(duì)應(yīng)的時(shí)間序列、以及是否作圖,輸出可以得到單邊歸一化之后的頻率與對(duì)應(yīng)的振幅,通過(guò)輸出可以直接畫(huà)出常用的頻譜圖!

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


N=length(y);                       %采樣點(diǎn)數(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的略有點(diǎn)不同,分別是采樣頻率、信號(hào)序列、是否作圖,輸出與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 :  信號(hào)序列
    draw :1為畫(huà)頻譜圖,0為不畫(huà) 

    Returns
    -------
    f : 頻率
    M : 幅值
    '''
    L=len(y)                              #采樣點(diǎn)數(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

構(gòu)造簡(jiǎn)單的信號(hào)對(duì)比兩種語(yǔ)言fftlw效果

舉個(gè)例子,構(gòu)造如下信號(hào)驗(yàn)證所寫(xiě)函數(shù)的正確性:

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

其中,包括常數(shù)項(xiàng),周期項(xiàng)和趨勢(shì)項(xiàng),理論上該信號(hào)的頻率應(yīng)該為0Hz、100Hz、200Hz(具體怎么算的補(bǔ)一補(bǔ)書(shū)知識(shí))。在這里,我設(shè)置采樣頻率 fs=10000,產(chǎn)生10000個(gè)數(shù)據(jù)點(diǎn),時(shí)域圖如下:

在這里插入圖片描述

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

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

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

在這里插入圖片描述

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

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

在這里插入圖片描述

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

采用實(shí)際的振動(dòng)信號(hào)對(duì)比兩種語(yǔ)言fftlw效果

數(shù)據(jù)來(lái)源于西儲(chǔ)大學(xué)轉(zhuǎn)子實(shí)驗(yàn)臺(tái)振動(dòng)信號(hào),采樣頻率為12000Hz,現(xiàn)取正常狀態(tài)下、轉(zhuǎn)速1796 rpm軸承振動(dòng)信號(hào)1000個(gè)點(diǎn)如下。粗略的觀察,有一個(gè)低頻信號(hào)大概周期為0.035 s,頻率大概 29Hz。

在這里插入圖片描述

Matlab畫(huà)頻譜圖

Matlab畫(huà)頻譜圖

Python畫(huà)頻譜圖

在這里插入圖片描述

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

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

相關(guān)文章

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

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

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

    python集合類(lèi)型用法分析

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

    Python with關(guān)鍵字,上下文管理器,@contextmanager文件操作示例

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

    總結(jié)python實(shí)現(xiàn)父類(lèi)調(diào)用兩種方法的不同

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

    使用python編寫(xiě)批量卸載手機(jī)中安裝的android應(yīng)用腳本

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

    如何用python合并多個(gè)excel文件

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

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

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

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

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

    如何用python繪制散點(diǎn)圖

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

    利用Python腳本批量生成SQL語(yǔ)句

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

最新評(píng)論