fft画图出现乱直线情况

信号处理小白肯定开始用matlab画图时,y=f(x),上来就k=fft(y)和plot(k)了,
但画出图来发现,,,,,,,,,,

在这里插入图片描述
**What is are?**遇到的同学举个手。。。。。。。
这其实是横坐标t的取值以及abs问题,并不是FFT的问题,当t取值不当及abs没加时,确实会出现直线乱跳的图,那时间怎么取呢?
%采样频率
fs=1024;/自己定
%采样间隔
Ts=1/fs;
%信号
N=2048;/这个很清楚你采多少时间,乘以采样率即为N
t=(0:N-1)/fs;,这就是横坐标t了,,,,,,,,,,,,
**第二问题fft后必须加abs,否则无法作图,因为fft后是复数,必须取模,给大家个例子看下吧,可以把时间和abs改下自己研究

close all;
clear all;
clc;
%采样频率   
fs=1024;
%采样间隔
Ts=1/fs;
%信号
N=2048;
t=(0:N-1)/fs;
S=sin(2*pi*50*t)+sin(2*pi*100*t)+sin(2*pi*200*t);
k=fft(S);
figure(1)
plot(abs(k))

运行代码你会发现这里还存在一个频谱横坐标和搬移的问题,下一篇博文再说吧。。。。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的NumPy库来实现FFT(快速傅里叶变换)并绘制图形。首先,导入NumPy和Matplotlib库,并定义一些参数和信号。可以参考以下代码实现FFT和绘图: ```python import numpy as np from matplotlib import pyplot as plt # 定义参数和信号 pi = np.pi # 圆周率 fs = 1000 # 采样频率 dt = 1/fs # 采样周期 f1 = 10 # 信号的特征频率1 f2 = 100 # 信号的特征频率2 f3 = 200 # 信号的特征频率3 N = 2**12 # 离散信号的长度 tn = np.arange(0, dt*N, dt) # 时间序列 x = 2*np.cos(2*pi*f1*tn) + 2*np.cos(2*pi*f2*tn) + 2*np.cos(2*pi*f3*tn) # 生成离散信号 # FFT计算函数 def fft_calc(x, f_s, x_size, nfft): w = np.hanning(nfft) # 加汉宁窗 cnt = x_size // nfft # 计算数据长度可以覆盖几个窗口 if cnt == 0: # 用0在数据尾部补齐 x_pad = np.pad(x, (0, nfft - x_size)) else: x_pad = np.pad(x, (0, x_size - cnt * nfft)) cnt = len(x_pad) // nfft # 更新补齐的数据长度可以覆盖几个窗口 tmp = [] for i in range(cnt): # 窗与窗之间数据不重叠 p = np.fft.fft(w * x_pad[i * nfft:(i + 1) * nfft]) # 计算加窗的FFT并乘以调整系数 tmp.append(p) # 每个窗的结果 fft_result = np.mean(tmp, axis=0) # 将所有窗平均得到最终结果 amp = abs(fft_result)*2 / (nfft / 2) # 根据采样宽度计算幅值 amp /= 2 # 对直流分量额外调整 amp_half = amp[:int(len(amp) / 2) + 1 # 根据FFT特性,取一半频谱即可 freq = np.arange(int(len(amp) / 2) + 1) * f_s/nfft # 根据采样频率和采样点数,计算频率分辨率,并得到对应的频率坐标 return amp_half, freq # 使用FFT计算函数并绘图 nfft = fs # FFT的窗长 (amp, freq) = fft_calc(x, fs, N, nfft) # 绘制FFT结果图 fig = plt.figure(figsize=(12, 8)) plt.plot(freq, amp, color="blue") plt.title('FFT result') plt.xlabel('Freq /Hz') plt.ylabel('urad/Hz') ax = plt.gca() plt.grid(which='both', axis='both') plt.show() ``` 以上代码将生成一个包含FFT结果图的图形窗口,横轴为频率(Hz),纵轴为幅度(urad/Hz)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值