首页 > 其他分享 >傅里叶变换

傅里叶变换

时间:2022-10-29 22:57:34浏览次数:60  
标签:Hz fs 信号 变换 频率 傅里叶

原文:https://blog.csdn.net/jk_101/article/details/124803761

傅里叶变换是将按时间或空间采样的信号与按频率采样的相同信号进行关联的数学公式。在信号处理中,傅里叶变换可以揭示信号的重要特征(即其频率分量)。

对于包含 n 个均匀采样点的向量 x,其傅里叶变换定义为

 

是 n 个复单位根之一,其中 i 是虚数单位。对于 x 和 y,索引 j 和 k 的范围为 0 到 n−1。

MATLAB® 中的fft函数使用快速傅里叶变换算法来计算数据的傅里叶变换。以正弦信号x为例,该信号是时间t的函数,频率分量为 15 Hz 和 20 Hz。使用在 10 秒周期内以 1/50 秒为增量进行采样的时间向量。

Ts = 1/50;
t = 0:Ts:10-Ts;
x = sin(2*pi*15*t) + sin(2*pi*20*t);
plot(t,x)
xlabel('Time (seconds)')
ylabel('Amplitude')
如图所示:

 

计算信号的傅里叶变换,并在频率空间创建对应于信号采样的向量f。

y = fft(x);
fs = 1/Ts;
f = (0:length(y)-1)*fs/length(y);
以频率函数形式绘制信号幅值时,幅值尖峰对应于信号的 15 Hz 和 20 Hz 频率分量。

plot(f,abs(y))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title('Magnitude')
如图所示:

 

该变换还会生成尖峰的镜像副本,该副本对应于信号的负频率。为了更好地以可视化方式呈现周期性,可以使用 fftshift 函数对变换执行以零为中心的循环平移。

n = length(x);
fshift = (-n/2:n/2-1)*(fs/n);
yshift = fftshift(y);
plot(fshift,abs(yshift))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
如图所示:

 

含噪信号
在科学应用中,信号经常遭到随机噪声破坏,掩盖其频率分量。傅里叶变换可以清除随机噪声并显现频率。例如,通过在原始信号 x 中注入高斯噪声,创建一个新信号 xnoise。

rng('default')
xnoise = x + 2.5*randn(size(t));
频率函数形式的信号功率是信号处理中的一种常用度量。功率是信号的傅里叶变换按频率样本数进行归一化后的平方幅值。计算并绘制以零频率为中心的含噪信号的功率谱。尽管存在噪声,仍可以根据功率中的尖峰辨识出信号的频率。

ynoise = fft(xnoise);
ynoiseshift = fftshift(ynoise);
power = abs(ynoiseshift).^2/n;
plot(fshift,power)
title('Power')
xlabel('Frequency (Hz)')
ylabel('Power')
如图所示:

 

计算效率
直接使用傅里叶变换公式分别计算 y 的 n 个元素需要数量级的浮点运算。使用快速傅里叶变换算法,则只需要 nlogn 数量级的运算。在处理包含成百上千万个数据点的数据时,这一计算效率会带来很大的优势。在 n 为 2 的幂时,许多专门的快速傅里叶变换实现可进一步提高效率。

以加利福尼亚海岸的水下麦克风所收集的音频数据为例。在康奈尔大学生物声学研究项目维护的库中可以找到这些数据。载入包含太平洋蓝鲸鸣声的文件 bluewhale.au,并对其中一部分数据进行格式化。由于蓝鲸的叫声是低频声音,人类几乎听不到。数据中的时间标度压缩了 10 倍,以便提高音调并使叫声更清晰可闻。可使用命令 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);

plot(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 vector
power = abs(y).^2/n; % power spectrum
plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency (Hz)')
ylabel('Power')
如图所示:


————————————————
版权声明:本文为CSDN博主「jk_101」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jk_101/article/details/124803761

标签:Hz,fs,信号,变换,频率,傅里叶
From: https://www.cnblogs.com/bruce1992/p/16840104.html

相关文章

  • LeetCode 题解|6. Z 字形变换
    /***@param{string}s*@param{number}numRows*@return{string}*/varconvert=function(s,numRows){//存储结果constrows=[];//指针下一......
  • matlab练习程序(box-cox变换)
    box-cox变换可以将非正态分布的数据变换到正态分布。变换公式如下:其中lambda是待求参数。这里就遍历可能的lambda值,得到变换后的数据,再通过sw正态分布检验,选取最好的la......
  • 2021 icpc 沈阳 I 【分式线性变换的保交比性】
    分式线性变换的保交比性对于分式线性变换,具有保交比性应用在复数域下,存在分式线性变换,给定三个输入和输出,再给定第四个输入,求其在这个分式线性变换下的输出。https:/......
  • 【线性代数】抽丝剥茧系列之通过初等变换求逆的原理
    正文相信大家都懂得怎么用矩阵求逆,但是知道为什么通过初等行变换可以求逆吗?对于:$$\begin{bmatrix}A&E\end{bmatrix}\Longrightarrow\begin{bmatrix}E&A^{-1}\end{bma......
  • DP--字符串变换
    给定两个字符串,已知可以使用三种方式进行变换1.插入一个字符2.删除一个字符3.更改一个字符请设计一个算法,找到两个字符串之间的经历几次最小变换,可以字符串1转换成字......
  • 考试 数组,指针变换易混淆
    #define_CRT_SECURE_NO_WARNINGS1//将数组作为参数传给函数#include<stdio.h>//数组名是什么?//数组名是数组首元素的地址//但是又两个例外://1.......
  • 6. Z字形变换
    将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行 Z字形排列。比如输入字符串为"PAYPALISHIRING" 行数为3时,排列如下:PAHNAPLSIIGY......
  • 转载-傅里叶级数的几何意义 – 巧妙记忆公式的方法
    转自: http://blog.renren.com/share/343320656/15540620254 最近我在重新学习偏微分方程的时候又遇到“傅里叶级数”了,我曾经觉得这个公式非常繁琐,用到的时候就去翻书......
  • (算法课)大整数相乘 |向量卷积|多项式相乘| 快速傅里叶变换FFT
    D(1021):很大的ABTimeLimit:1SecMemoryLimit:256MbSubmitted:6Solved:0Description如题,计算AB的值并输出。Input两行,分别代表A和B。A和B......
  • BZOJ 4036([HAOI2015]按位或-子集和变换)
    Description刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or)操作。选择数字i的概率是p[i]。保证0<=p[i]<=1,Σp[i]=......