L=153.6; T1=1.2;N1=128; T2=0.6;N2=256; n1=0:N1-1; n2=0:N2-1; D=2*pi/L; x1=exp (-0.01*n1*T1).*cos (n1*T1) +2*exp(-0.02*n1*T1).*cos(1.1*n1*T1) ; x2=exp(-0.01*n2*T2).*cos (n2*T2) +2*exp(-0.02*n2*T2).*cos (1.1*n2*T2) ; X1=T1*fftshift(fft(x1)); X2=T2*fftshift(fft(x2)); m1=ceil (-(N1-1)/2) :ceil ((N1-1)/2); m2=ceil (-(N2-1)/2) :ceil ((N2-1)/2); plot (m1 *D*T1, abs(X1) , '*-' ,m2*D*T2,abs (X2) , 'O:') ; L=153.6; T1=0.15;N1=1024; T2=0.075;N2=2048; n1=0:N1-1; n2=0:N2-1; D=2*pi/L; x1=exp(-0.01*n1*T1).*cos (n1*T1) +2*exp(-0.02*n1*T1).*cos(1.1*n1*T1) ; x2=exp(-0.01*n2*T2).*cos (n2*T2) +2*exp(-0.02*n2*T2).*cos (1.1*n2*T2) ; X1=T1*shift (fft(x1) ) ; T=0.075; N1=2048; N2=4096; n1=0:N1-1 ; n2=0:N2-1 ; D1=2*pi/(N1*T) ; D2=2*pi/(N2*T) ; x1=exp(-0.01*n1*T).*cos (n1*T)+2*exp(-0.02*n1*T).*cos(1.1*n1*T) ; x2=exp(-0.01*n2*T).*cos (n2*T)+2*exp(-0.02*n2*T).*cos(1.1*n2*T) ; X1=T*shift(fft(x1)) ; X2=T*shift(fft(x2)) ; m1=ceil (-(N1-1)/2) :ceil((N1-1)/2); m2=ceil (-(N2-1)/2) :ceil( (N2-1)/2); plot(m1*D1*T,abs(X1)
时间: 2025-05-26 18:31:05 浏览: 38
### MATLAB FFT频谱图绘制及信号处理代码解释
#### 1. 数据准备阶段
在MATLAB中,为了绘制FFT频谱图,首先需要准备好输入信号的数据。以下是数据准备的核心部分:
- **采样频率 (`fs`)**:定义了每秒采集多少个样本点。例如,在引用[2]中 `fs=500` 表示采样率为500 Hz[^2]。
- **信号长度 (`N`)**:表示信号的总采样点数。例如,`N=128` 表明信号包含128个采样点[^3]。
- **时间向量 (`t`)**:通过公式 `t = (0:N-1)/fs` 计算得到的时间序列用于生成连续信号[^3]。
```matlab
fs = 500; % 采样率
T = 1; % 时宽1s
n = round(T * fs); % 采样点个数
t = linspace(0, T, n); % 时间序列
```
#### 2. 输入信号构建
接下来,基于上述参数可以构造所需的模拟信号。通常情况下,信号是由正弦波叠加而成。例如:
```matlab
x = cos(2 * pi * f1 * t) + sin(2 * pi * f2 * t);
```
其中,`f1` 和 `f2` 分别代表两个不同频率成分。这里需要注意的是,如果存在多个频率分量,则它们会共同决定最终频谱图上的峰值位置及其幅度[^2]。
#### 3. 执行快速傅立叶变换 (FFT)
利用MATLAB内置函数 `fft()` 对信号执行离散傅里叶变换(DFT),从而获得频域信息:
```matlab
X = fft(x, N); % 进行DFT计算
mag = abs(X / N); % 归一化后的振幅大小
```
此处 `/N` 的目的是使结果更加直观地反映实际物理意义下的强度比例关系;而取绝对值是因为复数值的结果只关心模长作为功率指示器[^1]。
另外值得注意的是,对于实数型输入而言,默认返回的是双边谱形式——即包含了负频率区域的信息。因此还需要进一步调整显示方式以便观察更清晰的单边谱特性[^2]:
```matlab
X_shifted = fftshift(X); % 将零频移到中心
freq_axis = (-N/2:(N/2)-1)*(fs/N); % 构建新的频率轴
plot(freq_axis, abs(X_shifted));
```
或者简单截取前一半即可呈现标准意义上的正频率区间内的分布情况:
```matlab
half_N = floor(N/2)+1;
single_side_freq = (0:half_N-1)*fs/N;
plot(single_side_freq , mag(1:half_N))
```
#### 4. 结果可视化
最后一步就是把所得数据绘制成图形展示出来。一般我们会加上标签说明以及网格辅助阅读图表内容:
```matlab
xlabel('Frequency (Hz)');
ylabel('|Amplitude|');
title('Single-Sided Amplitude Spectrum of x(t)');
grid on;
```
以上便是整个流程概述及相关细节解析过程[^2].
---
###
阅读全文
相关推荐








