Porject_Kiwi
离线式数字信号处理(一)
使用Matlab读取TXT数据文件并做FFT分析
在我群项目Project_Kiwi中,LTC2208的评估已经圆满完成,现在开始下一步的工作。
今天要来测试的,是使用matlab对数据进行简单处理。
因为考虑到目前FPGA到PC的数据链路仍然还没有搭建,所以暂时先搭建一个离线式测试平台。等待我们的算法逐渐完整,可以正常运行时,再来调试其到PC的链路,可能是USB,甚至可能是PCIE(先画个饼)
萌新起步,大佬勿喷。
第一步的想法是使用SD卡来存取采集的数据,使用FATFS可以迅速在各种平台移植(STM32等ARM平台),SD卡也可以存储大量的数据,随后可以接入电脑使用matlab等工具对数据进行读取并作进一步的处理。
为了测试matlab程序,我们需要先生成一个.txt文件,STM32的程序已经叫学弟在写了,我们先用Matlab生成一个先跑着。(学弟好像还在调车)
我的程序基于这位大佬的程序进行轻微修改
%=============设置系统参数==============%
f1=5e6; %设置波形频率
f2=500e3;
f3=800e3;
Fs=40e6; %设置采样频率
L=2048; %数据长度
N=8; %数据位宽
%=============产生输入信号==============%
t=0:1/Fs:(1/Fs)*(L-1);
y1=sin(2*pi*f1*t);
y2=sin(2*pi*f2*t);
y3=sin(2*pi*f3*t);
y4=y1+y2+y3;
y5 = y4 + 1*randn(size(t));
y_n=round(y5*(2^(N-3)-1)); %N比特量化;如果有n个信号相加,则设置(N-n)
%=================画图==================%
a=10; %改变系数可以调整显示周期
%stem(t,y_n);
plot(t,y_n);
axis([0 L/Fs/a -2^N 2^N]); %显示
%=============写入外部文件==============%
fid=fopen(‘D:OneDriveProjectMathWorks 1_helloworld_fftsin_data_dec.txt’,‘w’); %把数据写入sin_data.txt文件中,如果没有就创建该文件
for k=1:length(y_n)
tb=y_n(k);
fprintf(fid,‘%d’,tb);
fprintf(fid,‘rn’);
end
fprintf(fid,‘;’);
fclose(fid);
修改了一下采样频率,到40Msps,修改数据宽度到2048获取更多的采样点。图形绘制修改成plot函数,这样画出来的图会好看些。因为原本是在vivado仿真运行的,所有的数据被储存成了14位BIN格式,修改成了DEC,方便观察数据和matlab读取。而且考虑到后期我们的程序直接运行在PS内部,也不需要存储成二进制数,方便了数据处理。
程序中还使用用均值为零、方差为 1 的白噪声扰乱该信号。以此来观察FFT。
运行结果如图所示
运行得到的TXT文件如图。
好了,现在我们有了测试用的TXT文件,就可以开始运行处理程序了。
目前处理程序还非常的简陋,之后会继续往里面添加更多的东西。
%读取txt格式的波点数据到数组并绘图
%信号的参数
Fs = 40e6; % 采样频率
T = 1/Fs; % 采样周期(周期=1/频率)
L = 2048; % 信号长度,2048
t = (0:L-1)*T; % 时间向量
wave_data=importdata(‘K:OneDriveProjectMathWorks 1_helloworld_fftsin_data_dec.txt’);
subplot(2,1,1);plot(wave_data) ;
Y = fft(wave_data);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
subplot(2,1,2);plot(f,P1) ;
title(‘X(t)单边幅度频谱’);
xlabel(‘f (Hz)’);
ylabel(‘|P1(f)|’);
运行结果如图:
可以在单边幅度谱中看到我们刚才生成的500Hz、800Hz、5MHz的三个峰值。
以上desu。
Porject_Kiwi
离线式数字信号处理(一)
使用Matlab读取TXT数据文件并做FFT分析
在我群项目Project_Kiwi中,LTC2208的评估已经圆满完成,现在开始下一步的工作。
今天要来测试的,是使用matlab对数据进行简单处理。
因为考虑到目前FPGA到PC的数据链路仍然还没有搭建,所以暂时先搭建一个离线式测试平台。等待我们的算法逐渐完整,可以正常运行时,再来调试其到PC的链路,可能是USB,甚至可能是PCIE(先画个饼)
萌新起步,大佬勿喷。
第一步的想法是使用SD卡来存取采集的数据,使用FATFS可以迅速在各种平台移植(STM32等ARM平台),SD卡也可以存储大量的数据,随后可以接入电脑使用matlab等工具对数据进行读取并作进一步的处理。
为了测试matlab程序,我们需要先生成一个.txt文件,STM32的程序已经叫学弟在写了,我们先用Matlab生成一个先跑着。(学弟好像还在调车)
我的程序基于这位大佬的程序进行轻微修改
%=============设置系统参数==============%
f1=5e6; %设置波形频率
f2=500e3;
f3=800e3;
Fs=40e6; %设置采样频率
L=2048; %数据长度
N=8; %数据位宽
%=============产生输入信号==============%
t=0:1/Fs:(1/Fs)*(L-1);
y1=sin(2*pi*f1*t);
y2=sin(2*pi*f2*t);
y3=sin(2*pi*f3*t);
y4=y1+y2+y3;
y5 = y4 + 1*randn(size(t));
y_n=round(y5*(2^(N-3)-1)); %N比特量化;如果有n个信号相加,则设置(N-n)
%=================画图==================%
a=10; %改变系数可以调整显示周期
%stem(t,y_n);
plot(t,y_n);
axis([0 L/Fs/a -2^N 2^N]); %显示
%=============写入外部文件==============%
fid=fopen(‘D:OneDriveProjectMathWorks 1_helloworld_fftsin_data_dec.txt’,‘w’); %把数据写入sin_data.txt文件中,如果没有就创建该文件
for k=1:length(y_n)
tb=y_n(k);
fprintf(fid,‘%d’,tb);
fprintf(fid,‘rn’);
end
fprintf(fid,‘;’);
fclose(fid);
修改了一下采样频率,到40Msps,修改数据宽度到2048获取更多的采样点。图形绘制修改成plot函数,这样画出来的图会好看些。因为原本是在vivado仿真运行的,所有的数据被储存成了14位BIN格式,修改成了DEC,方便观察数据和matlab读取。而且考虑到后期我们的程序直接运行在PS内部,也不需要存储成二进制数,方便了数据处理。
程序中还使用用均值为零、方差为 1 的白噪声扰乱该信号。以此来观察FFT。
运行结果如图所示
运行得到的TXT文件如图。
好了,现在我们有了测试用的TXT文件,就可以开始运行处理程序了。
目前处理程序还非常的简陋,之后会继续往里面添加更多的东西。
%读取txt格式的波点数据到数组并绘图
%信号的参数
Fs = 40e6; % 采样频率
T = 1/Fs; % 采样周期(周期=1/频率)
L = 2048; % 信号长度,2048
t = (0:L-1)*T; % 时间向量
wave_data=importdata(‘K:OneDriveProjectMathWorks 1_helloworld_fftsin_data_dec.txt’);
subplot(2,1,1);plot(wave_data) ;
Y = fft(wave_data);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
subplot(2,1,2);plot(f,P1) ;
title(‘X(t)单边幅度频谱’);
xlabel(‘f (Hz)’);
ylabel(‘|P1(f)|’);
运行结果如图:
可以在单边幅度谱中看到我们刚才生成的500Hz、800Hz、5MHz的三个峰值。
以上desu。
举报