在FFT中看到,频谱中有不寻常的高频噪声。也会有一个小的噪音峰值与电网的“主嗡嗡声”有关。用matlab编写代码在数据中识别并标记与电网的“主嗡嗡声”有关的噪峰值。
时间: 2023-05-25 13:05:28 浏览: 85
以下是使用matlab识别与电网“主嗡嗡声”相关的噪声峰的代码:
1. 首先,将数据读入matlab中并进行FFT变换:
data = load('data.txt'); %读入数据文件
Fs = 1000; %采样频率(假定为1kHz,根据实际情况进行调整)
N = length(data); %数据点数
f = Fs.*(0:(N-1))/N; %计算频率轴上的各点频率
X = fft(data); %进行FFT变换
2. 然后,找到与电网“主嗡嗡声”频率相关的峰值:
f1 = 50; %电网基频
f2 = 150; %电网2次谐波
f3 = 250; %电网3次谐波
f4 = 350; %电网4次谐波
f5 = 450; %电网5次谐波
f6 = 550; %电网6次谐波
%[注:以上频率以50Hz为基准,根据实际情况可进行调整]
threshold = 10; %设置峰值阈值(根据实际情况进行调整)
[pks,locs] = findpeaks(abs(X(1:N/2)), f(1:N/2),...
'MinPeakHeight', threshold); %使用matlab函数findpeaks找到峰值
ind1 = find(abs(locs-f1)==min(abs(locs-f1))); %找到电网基频的峰值
ind2 = find(abs(locs-f2)==min(abs(locs-f2))); %找到电网2次谐波的峰值
ind3 = find(abs(locs-f3)==min(abs(locs-f3))); %找到电网3次谐波的峰值
ind4 = find(abs(locs-f4)==min(abs(locs-f4))); %找到电网4次谐波的峰值
ind5 = find(abs(locs-f5)==min(abs(locs-f5))); %找到电网5次谐波的峰值
ind6 = find(abs(locs-f6)==min(abs(locs-f6))); %找到电网6次谐波的峰值
inds = [ind1, ind2, ind3, ind4, ind5, ind6]; %将各峰值下标存入数组中
3. 最后,标记“主嗡嗡声”相关的噪声峰值:
hold on %在频谱图上叠加标记
for k = 1:length(inds)
plot(locs(inds(k)), pks(inds(k)), 'r*', 'MarkerSize', 10);
end
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Frequency spectrum');
xlim([0 600]); %设置横坐标范围(根据实际情况进行调整)
ylim([0 max(abs(X(1:N/2)))]); %设置纵坐标范围(根据实际情况进行调整)
阅读全文