学习目标:
MATLAB调用fdatool设计的FIR滤波器
学习内容:
FIR_data_in_32bits.m
clc
clear all
close all
load FIR.mat %FIR为上面的系数名称
f1 = 0.5; %信号1频率为500kHz
f2 = 5; %信号2频率为5MHz
Fs = 32; %采样频率为32MHz
N = 16;%量化位数
%产生信号
t = 0:1/Fs:5;
c1 = 2*pi*f1*t;
c2 = 2*pi*f2*t;
s1 = sin(c1); %产生正弦波
s2 = sin(c2); %产生正弦波
s = s1 + s2; %产生两个单载波合成后的信号
s = s/max(abs(s));
%% MATLAB中调用fdatool实现低通滤波的功能
filter_s = filter(LP,1,s);
filter_s_fft = fft(filter_s,161*5); %对回波信号进行快速傅里叶变换到频域
figure(4)
plot(abs(filter_s_fft));
xlabel('频域(采样点)');
ylabel('幅度');
figure(5)
plot(20*log10(abs(filter_s_fft)));
xlabel('频域(采样点)');
ylabel('幅度(dB)');
%% 对信号在MATLAB中进行时域、频域分析
figure(1)
plot(s);
xlabel('时域(采样点)');
ylabel('幅度');
s_fft=fft(s,161*5); %对回波信号进行快速傅里叶变换到频域
figure(2)
plot(abs(s_fft));
xlabel('频域(采样点)');
ylabel('幅度');
figure(3)
plot(20*log10(abs(s_fft)));
xlabel('频域(采样点)');
ylabel('幅度(dB)');
%% 对信号进行量化取整,并调用gen_data_file_bin_32函数将量化后的数据写入txt文本,其中负数转化为其二进制补码对应的数进行写入
% 量化取整
lfm=round(2147483647*s); %最大为2147483647,量化为32位
lfm(find(lfm<0))=lfm(find(lfm<0))+4294967296; %为何加4294967296,把负数转化为其补码对应的数
gen_data_file_bin_32(lfm,'D:\Desktop\206FPGAcode\FIR_32bits_to_32bits\MATLAB\in_data.txt');
学习时间:
20200904下午
学习产出(仿真结果):
滤波后幅频特性图
滤波后幅频特性dB图