Matlab中IFFT/FFT注意事项及在OFDM仿真中的应用问题
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仿真中的应用问题相关推荐
- OFDM 中的 IFFT/FFT 注意事项
在做 OFDM 项目时,发现一个容易犯错的地方:IFFT/FFT. 调制/解调所做的运算的形式和 IFFT/FFT 是相同的,但是有一个功率归一化的系数的差别. 很多书(通信原理)都给出了公式推导,然 ...
- pmsm matlab模型,Simulink中PMSM模型的改进在电机控制仿真中的工程应用
引言本文引用地址:http://www.eepw.com.cn/article/233863.htm 近年来,随着电力电子技术和稀土永磁材料的快速发展,永磁同步电机(permanent magnet ...
- matlab用ifft,ifft(matlab中ifft是什么意思)
设SLM是一个128*8的矩阵,那么Y=ifft(SLM,[],2)和Y=ifft(SLM,128)一样吗?对. Y=ifft(SLM,[],1)和Y=ifft(SLM,128)才是一样的.第一种用法 ...
- matlab的fft与ifft,fft与ifft区别
OFDM是如何利用FFT和IFFT技术实现的_信息与通信_工程科技_专业资料.1.LTE 在广义上说只有一个载波,FDD 是上行和下行的载波分配在不同的频点,TDD 是在 同一个...... Matl ...
- 在iview中使用ref主要事项:
在iview中使用ref主要事项: 在我开发中遇到一个需求:在2个表格嵌套的情况下按下回车键获取下一个input框的焦点 案例: ref的深入理解: //js document.getElements ...
- matlab ifft频率分辨率,[FFT] matlab中关于FFT的使用(理解频率分辨率、补零问题)
[FFT] matlab中关于FFT的使用(理解频率分辨率.补零问题).txt我这人从不记仇,一般有 仇当场我就报了.没什么事不要找我,有事更不用找我!就算是believe中间也藏了一个lie! 我那 ...
- matlab中频域信号IFFT,MATLAB中ifft函数用法、性质、特性-以及与fft的组合应用全面深入解析(含程序)...
MATLAB中ifft函数用法.性质.特性,以及与fft的组合应用全面深入解析(含程序) 前言 在我之前的<MATLAB中fft函数用法.性质.特性.缺陷全面深入解析(含程序)>中,我已经 ...
- fftw3/gsl/kissfft/OouraFFT库中傅里叶变换/反傅里叶变换函数和Matlab中的fft/ifft的对应关系
先分析一维度的 一.fftw_plan_dft_1d 正变换: fftw_complex *in = fftw_malloc ( sizeof ( fftw_complex ) * n ); fftw ...
- matlab ifft取实部,[合集] matlab中IFFT的问题
发信人: goodspeed (LIP & BCI & LT-WMN), 信区: Signal 标 题: [合集] matlab中IFFT的问题 发信站: BBS 水木清华站 (Sa ...
最新文章
- 与众不同 windows phone (15) - Media(媒体)之后台播放音频
- 1.6-1.7配置IP1.8网络问题排查
- centos-7.2 node.js免编译安装
- c语言程序设计案例教程肖利群,C语言程序设计案例教程
- php mysql百万级数据_PHP+MySQL百万级数据插入的优化
- 2010年的最后一天,我又辞工(日记)
- linux安装之后缺少命令,linux下rarlinux安装后找不到rar命令处理方法
- window环境mysql卸载不干净
- python nlpir_NLPIR(ICTCLAS 2013)分词工具Python封装
- 三星有钱还是阿里有钱?
- 计算方法--解线性方程组的直接法
- 安全渗透测试工具--Burpsuite的爬虫功能
- 【地图】高德静态地图(页面展示和导出Word)
- 大鱼号怎么赚钱,95%的新手都不知道这样做!
- linux开机出现initramfs无法进入系统
- IT人士必去的10个网站 .
- MGD 调试 Lives2d 文字破碎问题 (MX2)
- vue移动端禁止双击放大
- 编程小题目之01:从键盘输入一数字a,求S=a+aa+aaa+aaaa+aa...a的值,例如:a=2,S=2+22; a=4,S=4+44+444+4444
- Swift基于ARKit的仿抖音潜水艇小游戏
热门文章
- Android Handler机制(一) 为什么设计Handler
- 完数(难度系数:半颗星)
- .net 4.0 ValidateRequest=false 无效解决方法
- Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
- 网络营销中的几个常见基本术语
- Java等额本息实现
- JVM: PermGen space
- do_syscall_64 函数
- 3.1递归实现逆序输出整数
- stm32f103c8t6调试-while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET );卡死