以表格形式在多个点上打印FFT(矩阵形式)

时间:2013-09-22 11:38:23

标签: matlab matrix export fft transpose

我使用C ++模拟了时域中多个点的电压。输出以表格形式打印出来(即第一列中的时间和后面一列中每个点的电压) 我是Matlab的新手,但是使用它来获取前一个文件,我需要在第一列中获得一个频率表,然后是每个点的频域值(在同一个文件中)。
我已经尝试了所有方法来生成这样的表,但它总是显示在一个列矩阵中(即所有数据都设置在一个列矩阵中)。

我需要它的形式:

╔═══════════════════════════════════════════════╗
║     *f     V1(f)     V2(f)    .....    Vn(f)* ║
╠═══════════════════════════════════════════════╣
║                                               ║
║     f1      ..        ..               ..     ║
║                                               ║
║     f2      ..        ..               ..     ║
║                                               ║
║     f3      ..        ..               ..     ║
╚═══════════════════════════════════════════════╝

另外,如果我能够创建这样的矩阵,我怎样才能获得它的转置(再次将它转换为空格)?

代码如下:

itr=importdata('filename.itr');

L=length(itr);             

T=itr(L,1);                

dt=itr(2,1);   

t=(0:dt:T-dt);

fs=1/dt;

FR_length=L;

[M,N]=size(itr(1:end,1:end));

f=-FR_length/2:FR_length/2-1;

f=f3.*(fs/FR_length);

for n=2:N

   FR=fft(itr(:,n),FR_length);   

end

任何人都可以帮我这个吗? 非常感谢:)

1 个答案:

答案 0 :(得分:0)

我根据输入itr的结构改变了一些代码:

[L,N]=size(itr);                  
dt=itr(2,1);       
fs=1/dt;        
f=-L/2:L/2-1;    
f=f*(fs/L);    
FR =fftshift(fft(itr(:,2:end)));   
disp([f' FR])

最后一行将在命令窗口中将数据显示为表格。 请注意,我删除了循环,因为matlab允许矢量化表示法。还添加了fftshift以使您的频率和幅度正确排列。 您可以使用savefprintf写入文件,例如如下(您需要更改格式字符串以匹配数据列的数量):

fid=fopen('test.dat','w')
fprintf(fid,'%f %f %f \n',[f ; real(FR)' ; imag(FR)'])
fclose(fid)