资源简介
在matlab中不使用函数,根据短时傅里叶变换公式及定义,对输入的正弦信号手动实现STFT,画出频谱图等
代码片段和文件信息
%短时傅里叶变换STFT
%依据FFT手动实现STFT
clear
clc
close all
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
S = 20*cos(100*2*pi*t)+40*cos(50*2*pi*t);%0.2-0.7*cos(2*pi*50*t+20/180*pi) + 0.2*cos(2*pi*100*t+70/180*pi) ;
%% 所需参数
%主要包含:信号分割长度(默认分割8个窗口),海明窗口,重叠率,N点采样
%默认设置:
% nsc=floor(L/4.5);%海明窗的长度
% nov=floor(nsc/2);%重叠率
% nff=max(2562^nextpow2(nsc));%N点采样长度
%也可手动设置
nsc=100;%海明窗的长度即每个窗口的长度
nov=0;%重叠率
nff=max(2562^nextpow2(nsc));%N点采样长度
%% 手动实现STFT
h=hamming(nsc ‘periodic‘);%计算海明窗的数值,给窗口内的信号加权重
coln = 1+fix((L-nsc)/(nsc-nov));%信号被分成了多少个片段
%如果nfft为偶数,则S的行数为(nfft/2+1),如果nfft为奇数,则行数为(nfft+1)/2
%因为matlab的FFT结果是对称的,只需要一半
rown=nff/2+1;
STFT_X=zeros(rowncoln);%初始化最终结果
%对每个片段进行fft变换
index=1;%当前片段第一个信号位置在原始信号中的索引
for i=1:coln
%提取当前片段信号值并用海明窗进行加权
temp_S=S(index:index+nsc-1).*h‘;
%进行N点FFT变换
temp_X=fft(temp_Snff);
%取一半
STFT_X(:i)=temp_X(1:rown)‘;
%将索引后移
index=index+(nsc-nov);
end
%% matlab自带函数
spectrogram(Shamming(nsc ‘periodic‘)novnffFs);
title(‘spectro
- 上一篇:投影寻踪优化模型Matlab源代码
- 下一篇:DPSK的MATLAB实现53470
相关资源
- IPIX雷达STFT
- Matlab时频分析工具箱及仿真案例
- 线性调频信号短时傅里叶时频分析
- STFT的matlab实现
- 短时傅里叶变换Matlab程序
- 短时傅里叶变换,画出时间频率图L
- stft和逆stft变换的Matlab代码
- 短时傅里叶变换的matlab实现
- stft短时傅里叶变换函数
- WVD和stft的matlab程序
- 高斯窗的短时傅里叶变换变换程序
- 短时傅里叶变换的MATLAB代码
- matlab PROPACK函数库 包含短时傅里叶变
- Stft短时傅里叶变换matlab实现
- tfristft 令x(n)=5exp(j*0.15*n*n)+6exp(
- 短时傅里叶和魏格纳变换的matlab函数
- STFT 短时傅里叶变换的一些简单的演示
评论
共有 条评论