N = 8192; Nfft = 8192; n0 = 1000;r = zeros(2*N/2-1, 1); for k = 1 : N/2 x1 = x(k : N); x2 = x(1 : N+1-k); r(N/2+k-1) = x1' * x2 / N; r(N/2-k+1) = r(N/2+k-1); %r(-k) = r(k) endf = (0 : Nfft/2-1)*fs / Nfft / 1000; rx = r ; Sxz1 = fft(rx, Nfft); Sxdbz1 = 10*log10(abs(Sxz1(1 : Nfft/2))); subplot(4,1,1); plot(f, Sxdbz1); ylabel('强度 (dB)'); xlabel('频率 (kHz)'); title('相关图 (矩形窗)功率谱');这段代码存在错误:无法执行赋值,因为左侧和右侧的元素数目不同
时间: 2024-02-25 16:58:27 浏览: 158
这段代码存在语法错误,没有给变量x赋值。应该先读入音频文件,并将其赋值给变量x。修改后的代码如下:
```
[s, fs] = audioread('voice.wav');
N = 8192;
Nfft = 8192;
n0 = 1000;
x = s(n0 : n0+N-1);
r = zeros(2*N/2-1, 1);
for k = 1 : N/2
x1 = x(k : N);
x2 = x(1 : N+1-k);
r(N/2+k-1) = x1' * x2 / N;
r(N/2-k+1) = r(N/2+k-1); %r(-k) = r(k)
end
f = (0 : Nfft/2-1)*fs / Nfft / 1000;
rx = r;
Sxz1 = fft(rx, Nfft);
Sxdbz1 = 10*log10(abs(Sxz1(1 : Nfft/2)));
subplot(4,1,1); plot(f, Sxdbz1); ylabel('强度 (dB)');
xlabel('频率 (kHz)'); title('相关图 (矩形窗)功率谱');
```
这样,就能够正确地将rx进行FFT计算,并绘制出功率谱图。
相关问题
close all;clear all; % read speech waveform from a file [s, fs] = audioread('voice.wav'); % set analysis parameters, pre-emphasise and windowing N = 8192; Nfft = 8192; n0 = 1000; x = s(n0 : n0+N-1);r = zeros(2*N/2-1, 1); for k = 1 : N/2 x1 = x(k : N); x2 = x(1 : N+1-k); r(N/2+k-1) = x1'* x2 / N; r(N/2-k+1) = r(N/2+k-1); %r(-k) = r(k) end f = (0 : Nfft/2-1)*fs / Nfft / 1000; rx = r ; Sxz1 = fft(rx, Nfft); Sxdbz1 = 10*log10(abs(Sxz1(1 : Nfft/2))); subplot(4,1,1); plot(f, Sxdbz1); ylabel('强度 (dB)'); xlabel('频率 (kHz)'); title('相关图 (矩形窗)功率谱');这段代码存在错误:无法执行赋值,因为左侧和右侧的元素数目不同
这段代码存在错误,因为r的尺寸为(2*N/2-1,1),而Sxz1的尺寸为(Nfft,1)。在将rx进行FFT计算时,应该将其补零以匹配FFT的长度,而不是直接使用rx的长度。修改代码的方式如下:
```
rx = r;
rx = [rx; zeros(Nfft-2*N/2+1, 1)]; % 补零以匹配FFT的长度
Sxz1 = fft(rx, Nfft);
Sxdbz1 = 10*log10(abs(Sxz1(1 : Nfft/2)));
subplot(4,1,1); plot(f, Sxdbz1); ylabel('强度 (dB)');
xlabel('频率 (kHz)'); title('相关图 (矩形窗)功率谱');
```
这样,就能够正确地将rx进行FFT计算,并绘制出功率谱图。
;r = zeros(2N/2-1, 1); for k = 1 : N/2 x1 = x(k : N); x2 = x(1 : N+1-k); r(N/2+k-1) = x1' x2 / N; r(N/2-k+1) = r(N/2+k-1); %r(-k) = r(k) end f = (0 : Nfft/2-1)fs / Nfft / 1000; rx = r ; Sxz1 = fft(rx, Nfft); Sxdbz1 = 10log10(abs(Sxz1(1 : Nfft/2))); subplot(4,1,1); plot(f, Sxdbz1); ylabel('强度 (dB)'); xlabel('频率 (kHz)'); title('相关图 (矩形窗)功率谱');这段代码存在错误:无法执行赋值,因为左侧和右侧的元素数目不同
这段代码存在语法错误,应该将“x1' x2”修改为“x1' * x2”。修改后的代码如下:
```
r = zeros(2*N/2-1, 1);
for k = 1 : N/2
x1 = x(k : N);
x2 = x(1 : N+1-k);
r(N/2+k-1) = x1' * x2 / N;
r(N/2-k+1) = r(N/2+k-1); %r(-k) = r(k)
end
f = (0 : Nfft/2-1)*fs / Nfft / 1000;
rx = r;
Sxz1 = fft(rx, Nfft);
Sxdbz1 = 10*log10(abs(Sxz1(1 : Nfft/2)));
subplot(4,1,1); plot(f, Sxdbz1); ylabel('强度 (dB)');
xlabel('频率 (kHz)'); title('相关图 (矩形窗)功率谱');
```
这样,就能够正确地将rx进行FFT计算,并绘制出功率谱图。
阅读全文