日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021-05-20 Matlab实现傅里叶变换

發布時間:2025/3/21 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-05-20 Matlab实现傅里叶变换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Matlab實現傅里葉變換

傅里葉變換是將按時間或空間采樣的信號與按頻率采樣的相同信號進行關聯的數學公式。在信號處理中,傅里葉變換可以揭示信號的重要特征(即其頻率分量)。

對于包含?n?個均勻采樣點的向量?x,其傅里葉變換定義為

ω=e?2πi/n?是?n?個復單位根之一,其中?i?是虛數單位。對于?x?和?y,索引?j?和?k?的范圍為?0?到?n?1。

MATLAB中的?fft?函數使用快速傅里葉變換算法來計算數據的傅里葉變換。以正弦信號?x?為例,該信號是時間?t?的函數,頻率分量為 15 Hz 和 20 Hz。使用在 10 秒周期內以?150?秒為增量進行采樣的時間向量。

?

t = 0:1/50:10-1/50; x = sin(2*pi*15*t) + sin(2*pi*20*t);figureplot(t,x)

計算信號的傅里葉變換,并在頻率空間創建對應于信號采樣的向量?f。

???????

y = fft(x); f = (0:length(y)-1)*50/length(y);

以頻率函數形式繪制信號幅值時,幅值尖峰對應于信號的 15 Hz 和 20 Hz 頻率分量。

???????

figureplot(f,abs(y))title('Magnitude')

該變換還會生成尖峰的鏡像,對應于信號的負頻率。為了更好地以可視化方式呈現周期性,使用?fftshift?函數對變換執行以零為中心的循環平移。

???????

n = length(x); fshift = (-n/2:n/2-1)*(50/n);yshift = fftshift(y);figureplot(fshift,abs(yshift))

含噪信號

在科學應用中,信號經常遭到隨機噪聲破壞,掩蓋其頻率分量。傅里葉變換可以清除隨機噪聲并顯現頻率。例如,通過在原始信號?x?中注入高斯噪聲,創建一個新信號?xnoise。

???????

rng('default')xnoise = x + 2.5*randn(size(t));

頻率函數形式的信號功率是信號處理中的一種常用度量。功率是信號的傅里葉變換按頻率樣本數進行歸一化后的平方幅值。計算并繪制以零頻率為中心的含噪信號的功率譜。盡管存在噪聲,仍可以根據功率中的尖峰辨識出信號的頻率。???????

ynoise = fft(xnoise);ynoiseshift = fftshift(ynoise); power = abs(ynoiseshift).^2/n; figureplot(fshift,power)title('Power')

計算效率

直接使用傅里葉變換公式分別計算?y?的?n?個元素需要?n平方?數量級的浮點運算。使用快速傅里葉變換算法,則只需要?nlogn?數量級的運算。在處理包含成百上千萬個數據點的數據時,這一計算效率會帶來很大的優勢。在?n?為 2 的冪時,許多專門的快速傅里葉變換實現可進一步提高效率。

以加利福尼亞海岸的水下麥克風所收集的音頻數據為例。在康奈爾大學生物聲學研究項目維護的庫中可以找到這些數據。載入包含太平洋藍鯨鳴聲的文件?bluewhale.au,并對其中一部分數據進行格式化??墒褂妹?sound(x,fs)?來收聽完整的音頻文件。

???????

whaleFile = 'bluewhale.au';[x,fs] = audioread(whaleFile);whaleMoan = x(2.45e4:3.10e4);t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);figureplot(t,whaleMoan)xlabel('Time (seconds)')ylabel('Amplitude')xlim([0 t(end)])

指定新的信號長度,該長度是大于原始長度的最鄰近的 2 的冪。然后使用?fft?和新的信號長度計算傅里葉變換。fft?會自動用零填充數據,以增加樣本大小。此填充操作可以大幅提高變換計算的速度,對于具有較大質因數的樣本大小更是如此。

???????

m = length(whaleMoan); n = pow2(nextpow2(m));y = fft(whaleMoan,n);

繪制信號的功率譜。繪圖指示,鳴聲包含約 17 Hz 的基本頻率和一系列諧波(其中強調了第二個諧波)。

f = (0:n-1)*(fs/n)/10; % frequency vectorpower = abs(y).^2/n; % power spectrum figureplot(f(1:floor(n/2)),power(1:floor(n/2)))xlabel('Frequency')ylabel('Power')

總結

以上是生活随笔為你收集整理的2021-05-20 Matlab实现傅里叶变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。