求用matlab或者C语言实现的FFT变换程序

供稿:hz-xin.com     日期:2025-01-15
如何用matlab实现码型变换

  有两种方法可以实现: 转置矩阵: B = A'; 通用方法:reshape()函数 示例如下: 说明:reshape(A,m,n) 表示将矩阵A变换为m行n列的矩阵,通常用于矩阵形状的改变,例如下面代码将原来的1行4列矩阵转换为2行2列矩阵:
  用MATLAB 实现傅里叶变换:
  用户任意输入一个函数,然后,输出函数的傅里叶变换函数,然后输出振幅频率 。
  x=sin(2*pi*t); %任意输入一个函数。
  y=fft(x); %傅里叶变换函数。
  plot(abs(y)); %振幅频率。
  函数(function)表示每个输入值对应唯一输出值的一种对应关系。这种关系使一个集合里的每一个元素对应到另一个(可能相同的)集合里的唯一元素。函数f中对应输入值的输出值x的标准符号为f(x)。包含某个函数所有的输入值的集合被称作这个函数的定义域,包含所有的输出值的集合被称作值域。若先定义映射的概念,可以简单定义函数为,定义在非空数集之间的映射称为函数。
  傅里叶变换能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。

你好,这是我的回答,希望可以帮到你。

1)结果讨论

一,如果对信号进行同样点数N的FFT变换,采样频率fs越高,则可以分析越高频的信号;与此同时,采样频率越低,对于低频信号的频谱分辨率则越好。

二,假设采样点不在正弦信号的波峰、波谷、以及0电压处,频谱则会产生泄露(leakage)。

三,对于同样的采样率fs,提高FFT的点数N,则可提高频谱的分辨率。

四,如果采样频率fs小于2倍信号频率2*fs(奈圭斯特定理),则频谱分析结果会出错。

五,对于(二)中泄露现象,可以通过在信号后面补零点解决。

2)程序及注解如下

%清除命令窗口及变量
clc;
clear all;

%输入f、N、T、是否补零(补几个零)
f=input('Input frequency of the signal: f\n');
N=input('Input number of pointsl: N\n');
T=input('Input sampling time: T\n');
flag=input('Add zero too sampling signal or not? yes=1 no=0\n');
if(flag)
ZeroNum=input('Input nmber of zeros\n');
else
ZeroNum=0;
end

%生成信号,signal是原信号。signal为采样信号。
fs=1/T;
t=0:0.00001:T*(N+ZeroNum-1);
signal=sin(2*pi*f*t);
t2=0:T:T*(N+ZeroNum-1);
signal2=sin(2*pi*f*t2);
if (flag)
signal2=[signal2 zeros(1, ZeroNum)];
end

%画出原信号及采样信号。
figure;
subplot(2,1,1);
plot(t,signal);
xlabel('Time(s)');
ylabel('Amplitude(volt)');
title('Singnal');
hold on;
subplot(2,1,1);
stem(t2,signal2,'r');
axis([0 T*(N+ZeroNum) -1 1]);

%作FFT变换,计算其幅值,归一化处理,并画出频谱。
Y = fft(signal2,N);
Pyy = Y.* conj(Y) ;
Pyy=(Pyy/sum(Pyy))*2;
f=0:fs/(N-1):fs/2;4
subplot(2,1,2);
bar(f,Pyy(1:N/2));
xlabel('Frequency(Hz)');
ylabel('Amplitude');
title('Frequency compnents of signal');
axis([0 fs/2 0 ceil(max(Pyy))])
grid on;

祝你好运!

matlab与c 混编,已经分别实现了c 和matlab的功能,需要两者结合起来做 ...
实现Matlab与C语言的混编,通常涉及使用mex文件。mex文件是Matlab与C\/C++之间的桥梁,允许Matlab调用C函数。要创建mex文件,首先需要编写C代码实现所需功能,然后使用mex命令将C代码编译为mex文件。mex文件可以是mexw32或mexw64文件,具体取决于目标平台是32位还是64位。另一方面,C语言调用Matlab可以通过将...

matlab或者C语言产生(1,28)中的5个随机数
代码1:\/\/随即出来的5个数,有可能重复#include<stdio.h>int main(){int num[5];int i;for(i=0;i<5;i++){int temp = rand();while(temp>28||temp<1){temp = rand();}num[i] = temp;printf("%d\\n",num[i]);}}代码2:\/\/随机出来的数,保证不重复!#include<stdio.h>int ...

如何让matlab的数据边计算边存入磁盘,或者导入excel
跟数据无关,要看你的代码。看你这里这样,估计是用disp之类的输出 你用fpintf函数可以实现,具体的可以查看help fprintf 跟C语言差不多。PI=3.14;Cd=0.6;z=1.297;fid=fopen('zdData.txt','w');for w=1000:100:2500 for t=0.1:0.05:0.5 for b=0.2:0.05:0.5 for a=0:5:...

求FFT的c语言程序
快速傅里叶变换 要用C++ 才行吧 你可以用MATLAB来实现更方便点啊此FFT 是用VC6.0编写,由FFT.CPP;STDAFX.H和STDAFX.CPP三个文件组成,编译成功。程序可以用文件输入和输出为文件。文件格式为TXT文件。测试结果如下:输入文件:8.TXT 或手动输入8 \/\/N1 2 3 4 5 6 7 8 输出结果为:或保存为TXT文件。(8OUT...

matlab怎么调用函数
通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度。Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或WatcomC中的一种。如果你在安装Matlab时已经设置过编译器,那么现在你应该就可以使用mex命令来编译c语言的程序了。如果当时没有选,就在Matlab里键入mex-setup,下面只要根据提示...

matlab中的fprintf使用问题
怎么会不知道n是多少呢,length一下或size一下不就知道了。只是'%10d %10d %10d %10d\\n'这样写n个比较麻烦,用循环就可以了。如 fid = fopen('Y2.txt','w');for i=1:n fprintf(fid,'%10d',aa(i));end fprintf(fid,'\\n');fclose(fid);还有一种方法是用dlmwrite 如 dlmwrite('Y2....

matlab filter怎么写成C语言?求教
代码前人肯定有的,例如http:\/\/mechatronics.ece.usu.edu\/yqchen\/filter.c\/:注意需要适当改写,另外参数名跟你不同,建议你用matlab给的参数名,能给转换带来方便 \/* FILTER.C An ANSI C implementation of MATLAB FILTER.M (built-in)Written by Chen Yangquan <elecyq@nus.edu.sg>1998-11-11*...

Matlab中怎么利用for循环操作函数?
为您推荐: c语言for循环 while循环 for(:)循环 for循环 详解 为什么要有for循环 什么是for循环 for循环语句 for 循环 for循环格式 用for循环理解 其他类似问题2010-05-27 MATLAB中的for循环怎么用 7 2014-04-28 请介绍一下matlab中for循环的怎么使用?我不会那个he... 11 2014-04-17 ...

...3x+10的一优化搜索区间[a,b]. 用C语言和MATLAB分别编一段程序_百...
http:\/\/www.soso.com\/q?w=%C5%C5%C3%FB%D3%C5%BB%AF%C8%ED%BC%FE%CD%FA%B5%C0&sc=web&ch=w.h&gid=&cin=&num=10&lr=&htn=8&bs=%CD%FA%B5%C0%D3%C5%BB%AF%C8%ED%BC%FE

MATLAB 比较 大小
按理说这个不应该报错,但是用法确实不对的 matlab中-1<a<1这个表达式是这样被运算的 首先算两个<号是同等优先级,所以依次计算 先算-1<a的值,比如a=0时-1<a是真,值为1,a=-1时-1<a是假,值为0 然后用0和1比,也就是说-1<a<1变成比较1<1或0<1了 ...