我使用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
任何人都可以帮我这个吗? 非常感谢:)
答案 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
以使您的频率和幅度正确排列。
您可以使用save
或fprintf
写入文件,例如如下(您需要更改格式字符串以匹配数据列的数量):
fid=fopen('test.dat','w')
fprintf(fid,'%f %f %f \n',[f ; real(FR)' ; imag(FR)'])
fclose(fid)