1.Matlab里的IFFT/FFT函数系数的问题

  • Matlab里的ifft函数会在做完正常的变换后除以ifft变换的点数,而fft函数中没有系数。

  • Matlab里的IFFT变换及FFT变换:

  • 因此在Matlab上,利用fft函数做频谱分析,应注意以下几点:

  • (1)应对FFT的结果除以FFT点数,才能得到各频点的真实幅值。

  • (2)FFT的频率分辨力等于采样频率除以FFT点数,即:

  • (3)对实序列进行FFT,结果的前半部分,对应正频率,后半部分对应负频率,这样比较符合习惯。即前N/2个点对应频率,或者表示为。后N/2个点对应频率,或者表示为

  • (4)在Matlab中可以直接利用fftshift函数对fft的结果进行变换。另外,如果只画出半谱图,则需对除直流分量(fft的第一个结果)以外的其他分量幅值乘上2。

  • clc
    clear all
    close all
    fs= 200;%采样频率
    N = 256;%采样点数
    t = (0:N-1)/fs;%各采样点
    a = cos(2*pi*50*t)+cos(2*pi*75*t);
    b = fft(a);
    f = 0:fs/N:(N-1)/N*fs;
    figure
    subplot(211)
    plot(f,abs(b));title('直接FFT结果')
    subplot(212)
    plot(f,abs(b)/N);title('除以FFT点数得到的真实值')
    figure
    subplot(211)
    plot((0:fs/N:fs/2),abs(b(1:N/2+1))/N*2);title('半谱图')
    c = fftshift(b);%使用fftshift函数得到全谱图
    f1= -fs/2:fs/N:fs/2-fs/N;
    subplot(212)
    plot(f1,abs(c/N));title('正负频率半轴表示的全谱图')

    运行结果如下所示:


  • 更多关于这个问题,以下这篇文章讲的很详细:https://blog.csdn.net/qq_39297053/article/details/113916666

  • 2.用IFFT/FFT实现OFDM系统中的调制解调应注意的问题

  • OFDM利用IFFT/FFT调制解调的公式如下所示,其中为准备调制的符号,为接收到采样序列:
  • OFDM对PSK或QAM符号调制过程:
  • OFDM对接收采样信号解调过程:

对照以上公式和公式(1.1-1.2),可以看出,两者只是系数1/N存在的位置不同。在简单的OFDM仿真中直接使用ifft函数调制及fft函数解调,对仿真结果是没有影响的。但是仔细考虑会发现,对PSK或QAM符号进行ifft调制得到的序列的能量会变小,再进行fft解调能量会变大。因此,在进一步的仿真中,为了使得频域和时域上能量的一致,一般需在IFFT后乘上,解调处理的时候先对接收序列除以再进行FFT变换。因此式(2.1-2.2)变为如下形式,其中也被称为功率归一化因子:

对功率归一化的理解:

调制之前各个符号能量为,符号的总能量为,在经过式(1.1)所示的N点的IFFT变换调制到各个子载波上后,各个子载波上的能量为,总的子载波上的能量为。由此,对IFFT结果乘上后,各个子载波上的能量为,总的子载波上的能量为。这样就实现了频域上和时域上能量的一致,使得在仿真中更加方便地进行各种计算。另外需要注意的是功率归一化因子中的N应该是IFFT/FFT的点数,而不是有效子载波数(网上浏览时看到有些人弄混淆了)。

3.在IFFT之前对序列进行共轭对称处理的作用

对要调制的序列进行共轭对称处理,再分别调制到相应载波上是为了得到实的OFDM信号。在1中说过,FFT的前半结果表示正频率部分,后半结果表示负频率部分,这在IFFT过程中也是类似的。在进行N点的IFFT时,序列的第一个数定义直流成分,第个数定义最高频率成分,再后面的即为负频率部分。

例如,若对采样频率为1kHz,长度为17的某个序列(序列长度要小于128/2)进行128点的IFFT变换,这个序列在做IFFT前存放在128个数中33-49的位置上,即。取该序列共轭存在第97-81的位置,这样正负频率对应共轭,ifft后就能得到一个实序列。而其他位置的值置零,即为空载波。(注:以上参数设置是为了解释方便。)

clc
close all
clear all
%% 参数设置
fs=1000;%采样频率
carrier_count=17;%调制符号数或有效子载波数
ifft_length=128;%FFT长度
M=4;%调制阶数
%% 产生随机序列
bit_per_symbol=log2(M); %每个子载波调制的比特数
bit_length=carrier_count*bit_per_symbol;%所有比特数
bit_sequence=randi([0 1],bit_length,1);%产生随机比特序列(列向量)
%% QAM调制
bit_moded=qammod(bit_sequence,M,'InputType','bit','UnitAveragePower',true);%QPSK调制并归一化
%% IFFT
carrier_position=33:49;%对应频段250Hz-375kHz
conj_position=97:-1:81;
ifft_position=zeros(ifft_length,1);
ifft_position(carrier_position)=bit_moded;%将调制符号存入33-49行
ifft_position(conj_position)=conj(bit_moded);%将调制符号取共轭存入97-81行
signal_time=ifft(ifft_position,ifft_length);
signal_time=signal_time*sqrt(ifft_length);%对经过IFFT的信号功率归一化
%% FFT
Rx_signal=signal_time/sqrt(ifft_length);
fft_sig=fft(Rx_signal,ifft_length);%FFT
Rx_bit_moded=fft_sig(carrier_position);%提取载波调制符号33-49
%% 能量计算
E_bit_moded=2*sum(sum(abs(bit_moded).^2))
E_ifft=sum(abs(signal_time).^2)
E_fft=sum(abs(fft_sig).^2)

运行结果可以看到IFFT后的结果signal_time为实序列,且能量在频域和时域上相等,证明了2中的结论。需要注意的是,在进行共轭对称处理后,序列能量翻倍了。

Matlab中IFFT/FFT注意事项及在OFDM仿真中的应用问题相关推荐

  1. OFDM 中的 IFFT/FFT 注意事项

    在做 OFDM 项目时,发现一个容易犯错的地方:IFFT/FFT. 调制/解调所做的运算的形式和 IFFT/FFT 是相同的,但是有一个功率归一化的系数的差别. 很多书(通信原理)都给出了公式推导,然 ...

  2. pmsm matlab模型,Simulink中PMSM模型的改进在电机控制仿真中的工程应用

    引言本文引用地址:http://www.eepw.com.cn/article/233863.htm 近年来,随着电力电子技术和稀土永磁材料的快速发展,永磁同步电机(permanent magnet ...

  3. matlab用ifft,ifft(matlab中ifft是什么意思)

    设SLM是一个128*8的矩阵,那么Y=ifft(SLM,[],2)和Y=ifft(SLM,128)一样吗?对. Y=ifft(SLM,[],1)和Y=ifft(SLM,128)才是一样的.第一种用法 ...

  4. matlab的fft与ifft,fft与ifft区别

    OFDM是如何利用FFT和IFFT技术实现的_信息与通信_工程科技_专业资料.1.LTE 在广义上说只有一个载波,FDD 是上行和下行的载波分配在不同的频点,TDD 是在 同一个...... Matl ...

  5. 在iview中使用ref主要事项:

    在iview中使用ref主要事项: 在我开发中遇到一个需求:在2个表格嵌套的情况下按下回车键获取下一个input框的焦点 案例: ref的深入理解: //js document.getElements ...

  6. matlab ifft频率分辨率,[FFT] matlab中关于FFT的使用(理解频率分辨率、补零问题)

    [FFT] matlab中关于FFT的使用(理解频率分辨率.补零问题).txt我这人从不记仇,一般有 仇当场我就报了.没什么事不要找我,有事更不用找我!就算是believe中间也藏了一个lie! 我那 ...

  7. matlab中频域信号IFFT,MATLAB中ifft函数用法、性质、特性-以及与fft的组合应用全面深入解析(含程序)...

    MATLAB中ifft函数用法.性质.特性,以及与fft的组合应用全面深入解析(含程序) 前言 在我之前的<MATLAB中fft函数用法.性质.特性.缺陷全面深入解析(含程序)>中,我已经 ...

  8. fftw3/gsl/kissfft/OouraFFT库中傅里叶变换/反傅里叶变换函数和Matlab中的fft/ifft的对应关系

    先分析一维度的 一.fftw_plan_dft_1d 正变换: fftw_complex *in = fftw_malloc ( sizeof ( fftw_complex ) * n ); fftw ...

  9. matlab ifft取实部,[合集] matlab中IFFT的问题

    发信人: goodspeed (LIP & BCI & LT-WMN), 信区: Signal 标  题: [合集] matlab中IFFT的问题 发信站: BBS 水木清华站 (Sa ...

最新文章

  1. 与众不同 windows phone (15) - Media(媒体)之后台播放音频
  2. 1.6-1.7配置IP1.8网络问题排查
  3. centos-7.2 node.js免编译安装
  4. c语言程序设计案例教程肖利群,C语言程序设计案例教程
  5. php mysql百万级数据_PHP+MySQL百万级数据插入的优化
  6. 2010年的最后一天,我又辞工(日记)
  7. linux安装之后缺少命令,linux下rarlinux安装后找不到rar命令处理方法
  8. window环境mysql卸载不干净
  9. python nlpir_NLPIR(ICTCLAS 2013)分词工具Python封装
  10. 三星有钱还是阿里有钱?
  11. 计算方法--解线性方程组的直接法
  12. 安全渗透测试工具--Burpsuite的爬虫功能
  13. 【地图】高德静态地图(页面展示和导出Word)
  14. 大鱼号怎么赚钱,95%的新手都不知道这样做!
  15. linux开机出现initramfs无法进入系统
  16. IT人士必去的10个网站 .
  17. MGD 调试 Lives2d 文字破碎问题 (MX2)
  18. vue移动端禁止双击放大
  19. 编程小题目之01:从键盘输入一数字a,求S=a+aa+aaa+aaaa+aa...a的值,例如:a=2,S=2+22; a=4,S=4+44+444+4444
  20. Swift基于ARKit的仿抖音潜水艇小游戏

热门文章

  1. Android Handler机制(一) 为什么设计Handler
  2. 完数(难度系数:半颗星)
  3. .net 4.0 ValidateRequest=false 无效解决方法
  4. Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
  5. 网络营销中的几个常见基本术语
  6. Java等额本息实现
  7. JVM: PermGen space
  8. do_syscall_64 函数
  9. 3.1递归实现逆序输出整数
  10. stm32f103c8t6调试-while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET );卡死