matlab中生成基4FFT然后输入信号频率为2KHz的方波信号生成至少5次谐波,计算谐波失真度和谐波的归一化振幅,打印和生成失真度和归一化振幅图像
时间: 2024-02-24 17:56:44 浏览: 93
matlab_神经网络处理信号,能提取出谐波频率和幅值
好的,我来解答您的问题。
首先,生成基4FFT需要用到matlab中的fft()函数,代码如下:
```matlab
N = 1024; %采样点数
fs = 4e3; %采样频率
t = 0:1/fs:(N-1)/fs; %时间序列
f = 2e3; %信号频率
x = square(2*pi*f*t); %方波信号
X = fft(x)/N; %基4FFT
```
其中,N为采样点数,fs为采样频率,t为时间序列,f为信号频率,x为方波信号,X为基4FFT结果。
接下来,计算谐波失真度和谐波的归一化振幅,代码如下:
```matlab
k = 1:5; %计算前5次谐波
h = zeros(size(k));
a = zeros(size(k));
for i = 1:length(k)
h(i) = abs(X(k(i)+1)); %谐波振幅
a(i) = h(i)/h(1); %归一化振幅
end
THD = sqrt(sum(h(2:end).^2))/h(1); %谐波失真度
```
其中,k为计算的谐波次数,h为每个谐波的振幅,a为每个谐波的归一化振幅,THD为谐波失真度。
最后,打印和生成失真度和归一化振幅图像,代码如下:
```matlab
figure;
subplot(2,1,1);
stem(k, a);
title('谐波归一化振幅');
xlabel('谐波次数');
ylabel('归一化振幅');
subplot(2,1,2);
bar(1, THD);
title('谐波失真度');
xlabel('失真度');
```
其中,subplot()函数用于在一张图中绘制多个子图,stem()函数用于绘制离散的谐波归一化振幅曲线,bar()函数用于绘制谐波失真度柱状图。
阅读全文