% 设置参数bitrate = 10; % 比特率T = 1 / bitrate; % 采样时间fs = 100 * bitrate; % 采样频率L = 1000; % 仿真时间% 生成比特流bits = randi([0, 1], 1, L * bitrate);% NRZ 编码signal = 2 * bits - 1;% 绘制波形图和频谱图t = 0 : T : L - T;subplot(2, 1, 1);plot(t, signal);title('NRZ Waveform');xlabel('Time (s)');ylabel('Amplitude');ylim([-1.5, 1.5]);subplot(2, 1, 2);f = -fs / 2 : fs / (L - 1) : fs / 2;plot(f, abs(fftshift(fft(signal))));title('NRZ Spectrum');xlabel('Frequency (Hz)');ylabel('Magnitude');ylim([0, L/4]);哪边有问题
时间: 2024-02-20 18:58:49 浏览: 95
不同samplerate 8k、32k、48k,位深16bit 单声道pcm和wav音频测试文件
代码本身没有问题,但是需要注意两点:
1. 在绘制频谱图时,使用了`abs`函数来计算幅度谱,这样会使得频谱图上下翻转。应该使用`fftshift`函数将零频率分量移到频谱图中央。
2. 在绘制频谱图时,振幅应该除以采样点数`L`,而不是除以4,这样才能得到正确的归一化幅度谱。
修改后的代码如下:
```matlab
% 设置参数
bitrate = 10; % 比特率
T = 1 / bitrate; % 采样时间
fs = 100 * bitrate; % 采样频率
L = 1000; % 仿真时间
% 生成比特流
bits = randi([0, 1], 1, L * bitrate);
% NRZ 编码
signal = 2 * bits - 1;
% 绘制波形图和频谱图
t = 0 : T : L - T;
subplot(2, 1, 1);
plot(t, signal);
title('NRZ Waveform');
xlabel('Time (s)');
ylabel('Amplitude');
ylim([-1.5, 1.5]);
subplot(2, 1, 2);
f = -fs / 2 : fs / (L - 1) : fs / 2;
plot(f, abs(fftshift(fft(signal))) / L);
title('NRZ Spectrum');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
```
注意,为了得到更好的频谱图,可以考虑在生成比特流时,使用更长的仿真时间`L`,这样可以得到更高分辨率的频谱图。
阅读全文