matlab常用函数通俗解释(fft2和fftshift函数设置问题等)

本文是作者在自己使用matlab过程中,针对用到的函数,试图用自己的理解去通俗解释这个函数用途的过程,如有错误,欢迎留言交流。

1. peaks函数

生成由峰峰值组成的矩阵,峰峰值由peaks函数的内在函数决定。也就是说, 当指定峰值的数量,生成的矩阵是相同的。

2. Mesh函数

按照高度分配颜色生成3D图像,颜色与曲面高度成比例。

3. Meshc函数

在mesh函数基础上+等高线图。

meshc 调用 mesh,打开 hold,然后调用 contour 并将等高线放在 x-y 平面上。

4. imshow函数

显示图像功能。可用来显示灰度图像(unit8,0~255),RGB图像(‘可以直接显示已有图片’),二进制图像(double,0~1)。

5. floor函数

向下取整。

6. ceil函数

向上取整。

7.mat2gray函数

将矩阵中的值首先归一化,然后转化为灰度图像(0.0为黑,1.0为白)。

8. fft2函数和fftshift函数

二维快速傅里叶变换函数,常与fftshift函数一起使用。

在实际绘制频谱时,如果不与fftshift一起使用,一般以(0:length(x)-1)*fs/length(x)(单位Hz)或者(0:length(x)-1)/length(x)为横坐标;如果与fftshift一起使用,也就是将频谱图中心移到频率0的谱图,横坐标应该是:-length(x)/2:(length(x)/2-1)*fs/length(x).

纵坐标需要用fft(x)*2/N进行修正。

参考文献:https://www.ilovematlab.cn/thread-38878-1-1.html 2009.05.28

 

### Matlab 中 `fft` 和 `fftshift` 函数的区别及使用方法 #### 1. 傅里叶变换 (`fft`)作用 `fft` 函数用于执行快速傅里叶变换 (Fast Fourier Transform),该算法能够高效地将时域信号转换为频域信号。这意味着输入的时间序列数据被映射成一系列复数,这些复数值代表不同频率下的振幅和相位信息。 对于长度为 N 的离散时间序列 x[n], 其 DFT 定义如下: \[X[k]=\sum_{n=0}^{N-1}{x[n]\cdot e^{-j2πkn/N}} \quad k=0,...,N−1\] 其中 \( j=\sqrt{-1}\), 并且 n 表示样本索引而 k 则对应于各个频率成分[^2]。 ```matlab Fs = 100; % Sampling frequency T = 1/Fs; % Sample time L = 1000; % Length of signal t = (0:L-1)*T; % Time vector f = Fs*(0:(L/2))/L; % Frequency domain % Create a sample sine wave with two frequencies. SineWave = sin(2*pi*50*t)+sin(2*pi*120*t); Y = fft(SineWave); P2 = abs(Y/L); % Two-sided spectrum P2 P1 = P2(1:L/2+1); % Single-sided spectrum P1 P1(2:end-1) = 2*P1(2:end-1); % Double non-DC components. figure; subplot(2,1,1) plot(t,SineWave) title('Time Domain Signal') xlabel('Time / s') ylabel('Amplitude') subplot(2,1,2) plot(f,P1,'r') % Plot single-sided amplitude spectrum. title('Single-Sided Amplitude Spectrum of Sine Wave') xlabel('Frequency / Hz') ylabel('|P1(f)|'); ``` 此代码片段展示了如何创建一个包含两个频率分量的正弦波并对其进行FFT分析,在不应用任何额外处理的情况下绘制原始幅度谱图。 #### 2. 零频移位 (`fftshift`) 功能描述 当利用 `fft` 对实数或复数序列做变换之后,默认情况下得到的结果是以直流偏置项为中心排列的;即低频位于数组两端而非中间位置。这使得解释结果变得困难,尤其是在可视化方面。为了改善这一点,MATLAB 提供了 `fftshift` 来调整输出顺序,使零频率(也称为 DC 组件)处于中心处,从而更直观地展示双侧对称特性[^4]。 具体来说: - 当传入的是矢量时,它会把左半边与右半边互换; - 若是矩阵形式,则涉及四个象限之间的交换——第一同第三、第二配第四; - 处理多维情况同样遵循这一原则,只是扩展到了更高维度上而已。 下面是修改后的绘图命令来显示经过 `fftshift` 调整过后的单边功率谱密度估计值: ```matlab Fshft = (-L/2:L/2-1)*(Fs/L); % Shifted frequency axis Y_shifted = fftshift(Y); % Apply fftshift to the FFT result P2_shifted = abs(Y_shifted)/L; figure; plot(Fshft, fftshift(P2)) % Use fftshift on magnitude before plotting title('Double-Sided Magnitude Spectrum after Applying fftshift') xlabel('Frequency / Hz') ylabel('|P2|'); grid on ``` 这段脚本先构建了一个新的频率轴 Fshft ,再调用了 `fftshift()` 方法改变 Y 数组内部元素的位置关系,最后再次作图以便对比查看效果差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值