2

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

我需要它的形式:

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

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

代码如下:

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

谁能帮我这个?非常感谢 :)

4

1 回答 1

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)
于 2013-09-22T11:58:22.203 回答