当前位置:首页 » 操作系统 » matlabfft源码

matlabfft源码

发布时间: 2022-06-15 06:49:48

A. 快速傅立叶变换FFT的matlab源程序

function X=myfft(x)
%myfft函数 用递归实现
N=length(x);
t=log2(N);
t1=floor(t);
t2=ceil(t);
if t1~=t2; %若x的长度N不为2的整数次幂,则补0至最接近的2的整数次幂
x=[x zeros(1,2^t2-N)];
N=2^t2;
end
w0=exp(-j*2*pi/N);
X=zeros(1,N);
if N==2
X(1)=x(1)+x(2);
X(2)=x(1)-x(2);
else
n=1:N/2;
xe(n)=x(2*n-1);
xo(n)=x(2*n);
XE=myfft(xe); %递归调用
XO=myfft(xo);
for n=1:N/2
X(n)=XE(n)+XO(n)*(w0^(n-1));
X(n+N/2)=XE(n)-XO(n)*(w0^(n-1));
end
end

先输入x的值,如x=[1,2,3,4,5,6,7,8]
将文件名改为myfft,再调用myfft(x),比较与fft(x)的结果。

B. 16点基四fft算法编程MATLAB程序,MATLAB源代码列出如下,运行出错,请问问题出在哪里

Attempt to execute SCRIPT lab_3_fft_4_16 as a function.
你把脚本用成了函数,
你把文件名改一下,并且文件要放在MATLAB工作目录。

C. 求matlab中fft函数的源代码

一般是用:type 函数名,但有些是看不到的比如fft,sin等。
给你个c++实现的fft
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
const double PI = 3.14159265358979323846;
int n; // 数据个数 = 2的logn次方
int logn;
/// 复数结构体
struct stCompNum
{
double re;
double im;
};
stCompNum* pData1 = NULL;
stCompNum* pData2 = NULL;
/// Examda提示: 正整数位逆序后输出
int reverseBits(int value, int bitCnt)
{
int i;
int ret = 0;
for(i=0; i<bitCnt; i++)
{
ret |= (value & 0x1) << (bitCnt - 1 - i);
value >>= 1;
}
return ret;
}
void main()
{
ifstream fin("data.txt");
int i,j,k;
// input logn
fin>>logn;
// calculate n
for(i=0, n=1; i<logn; i++) n *= 2;
// malloc memory space
pData1 = new stCompNum[n];
pData2 = new stCompNum[n];
// input raw data
for(i=0; i<n; i++) fin>>pData1[i].re;
for(i=0; i<n; i++) fin>>pData1[i].im;
// FFT transform
int cnt = 1;
for(k=0; k<logn; k++)
{
for(j=0; j<cnt; j++)
{
int len = n / cnt;
double c = - 2 * PI / len;
for(i=0; i<len/2; i++)
{
int idx = len * j + i;
pData2[idx].re = pData1[idx].re + pData1[idx + len/2].re;
pData2[idx].im = pData1[idx].im + pData1[idx + len/2].im;
}
for(i=len/2; i<len; i++)
{
double wcos = cos(c * (i - len/2));
double wsin = sin(c * (i - len/2));
int idx = len * j + i;
stCompNum tmp;
tmp.re = pData1[idx - len/2].re - pData1[idx].re;
tmp.im = pData1[idx - len/2].im - pData1[idx].im;
pData2[idx].re = tmp.re * wcos - tmp.im * wsin;
pData2[idx].im = tmp.re * wsin + tmp.im * wcos;
}
}
cnt <<= 1;
stCompNum* pTmp = NULL;
pTmp = pData1;
pData1 = pData2;
pData2 = pTmp;
}
// resort
for(i=0; i<n; i++)
{
int rev = reverseBits(i, logn);
stCompNum tmp;
if(rev > i)
{
tmp = pData1[i];
pData1[i] = pData1[rev];
pData1[rev] = tmp;
}
}
// output result data
for(i=0; i<n; i++) cout<<pData1[i].re<<"\t";
cout<<endl;
for(i=0; i<n; i++) cout<<pData1[i].im<<"\t";
cout<<endl;
// free memory space
delete []pData1;
delete []pData2;
fin.close();
system("pause");
}

D. 如何查看matlab fft函数源代码

function xn=myfft(x) N=length(x); M=log2(N); xtmp=zeros(1,N); value=zeros(1,M); for i=0:N-1 repr=i; for t=1:1:M repr=bitshift(i,1-t); value(t)=bitand(repr,1); end pos=0; for k=1:1:M pos=pos+value(k)*2^(M-k); end xtmp(pos+1)=x(i...

E. 如何在matlab上实现FFT

fft是内建函数,不是matlab写的,看不到源代码的
下面是我写的一个fft,可以用
function xn=myfft(x)
N=length(x);
M=log2(N);
xtmp=zeros(1,N);
value=zeros(1,M);
for i=0:N-1
repr=i;
for t=1:1:M
repr=bitshift(i,1-t);
value(t)=bitand(repr,1);
end
pos=0;
for k=1:1:M
pos=pos+value(k)*2^(M-k);
end
xtmp(pos+1)=x(i+1);
end

for i=1:M
deepth=2^(i-1);
width=2^(M-i);
for t=1:2^i:N
for k=1:deepth
tmp=xtmp(t+k-1);
wn=width*(k-1);
xtmp(t+k-1)=tmp+exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1);
xtmp(t+k+deepth-1)=tmp-exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1);
end
end
end
xn=xtmp;

望采纳!

F. 悬赏20分,寻fft2()源码,matlab中对任意不等宽高矩阵进行二维傅立叶变换,无2的整数幂限制

command window 输入:edit fft2即可看到源码。
非2整次幂规格默认填充

G. MATLAB中fft、qr等函数的源文件怎么查看

这些应该不是.m文件,比如matlab的fft就是基于fftw的,应该是用c写的,我猜qr也是用c写的

H. 要怎么看Matlab自带函数的源代码

MATALB属于半开源软件,其中很多函数可以通过“open/edit/type+filename”命令进行编辑和查看源代码。但是有一些函数仅仅可以找到它的帮助文档,却无法看到具体的源代码,比如min,fft,sum等函数,因为这些函数属于MATLAB的built-in function(内置函数),即MATLAB的built-in
function的代码是不公开的,有人说这些函数的算法是最优化的,保证较低的时间复杂度提高效率,所以,我感觉写一个算法优先考虑调用MATLAB自带函数,自带函数解决不了的情况下,再自己去写,毕竟自己写的代码的效率无法达到最优。

I. 用matlab编写实现fft的程序。

function y=myditfft(x)
%本程序对输入序列实现DIT-FFT基2算法,点数取大于等于长度的2的幂次
%------------------------------------
%

myditfft.c
%------------------------------------
m=nextpow2(x);

%求的x长度对应的2的最低幂次m
N=2^m;
if length(x)<N

x=[x,zeros(1,N-length(x))];

%若的长度不是2的幂,补0到2的整数幂
end
nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1;
%求1:2^m数列的倒序
y=x(nxd);

%将倒序排列作为的初始值
for mm=1:m

%将DFT做m次基2分解,从左到右,对每次分解作DFT运算

Nmr=2^mm;

u=1;

%旋转因子u初始化

WN=exp(-i*2*pi/Nmr);

%本次分解的基本DFT因子WN=exp(-i*2*pi/Nmr)

for j=1:Nmr/2

%本次跨越间隔内的各次碟形运算

for k=j:Nmr:N

%本次碟形运算的跨越间隔为Nmr=2^mm

kp=k+Nmr/2;

%确定碟形运算的对应单元下标

t=y(kp)*u;

%碟形运算的乘积项

y(kp)=y(k)-t;

%碟形运算的加法项

y(k)=y(k)+t;

end

u=u*WN;

%修改旋转因子,多乘一个基本DFT因子WN

end
end

J. 哪位大神知道matlab中的do-fft函数的代码是什么啊

matlab的fft代码用的是fftw的库,是看不到的,不过网上有开源的fftw源代码。调用例子可以看matlab的帮助。

热点内容
江苏云服务器散热器定制 发布:2024-11-05 18:50:15 浏览:718
投资分红网站源码 发布:2024-11-05 18:36:38 浏览:502
我的世界推荐适合萌新的服务器 发布:2024-11-05 18:30:03 浏览:576
c语言考级 发布:2024-11-05 18:16:54 浏览:503
易语言不能编译安卓app吗 发布:2024-11-05 18:14:11 浏览:835
c语言重点知识 发布:2024-11-05 18:04:53 浏览:640
算法分家 发布:2024-11-05 17:55:39 浏览:469
手游云顶怎么确定服务器 发布:2024-11-05 17:52:03 浏览:777
天籁选哪个配置2021 发布:2024-11-05 17:50:26 浏览:812
rust怎么找服务器 发布:2024-11-05 17:49:45 浏览:487