提示错误,错误使用 reshape 已知维度的乘积 8 不能被元素总数 1 整除。 出错 Untitled15 (line 9) watermark_bits = reshape(str2num(bits(:)'), [], 8);
时间: 2024-02-27 16:59:25 浏览: 393
这个错误提示是因为 `bits` 变量的大小不是 8 的倍数,无法使用 `reshape` 函数将其转换为指定大小的矩阵。在这段代码中,`bits` 变量的大小应该是 `8 x N` 的矩阵,其中 `N` 是采样点的总数,因此,如果 `bits` 变量的大小不是 `8 x N`,就会出现这个错误。
尝试将 `reshape` 函数的第二个参数改为 `size(bits, 1)`,即将矩阵的列数设置为 `bits` 变量的行数,这样就可以确保转换后的矩阵大小是 `8 x N`。修改后的代码如下所示:
```
clc
clear
% 读取音频文件A和水印音频
[audio_A, Fs] = audioread('D:/school/毕业设计/音频回声3.wav');
watermark_audio = audioread('D:/school/毕业设计/1/shuiyin1.wav', 'double'); % 将水印音频读取为双精度浮点数
% 将水印音频转换为二进制数
bits = dec2bin(uint8(watermark_audio), 8)';
watermark_bits = reshape(str2num(bits(:)'), size(bits, 1), []);
% 提取水印音频的LSB算法嵌入的水印信息
watermark = watermark_bits(:, end);
% 使用 LSB 算法将水印信息嵌入到水印音频中
watermark_audio_LSB = watermark_audio;
watermark_audio_LSB = bitset(watermark_audio_LSB, 1, watermark); % 将水印信息嵌入到最低有效位上
audiowrite('D:/school/毕业设计/1/shuiyin_LSB.wav', watermark_audio_LSB, Fs); % 保存嵌入水印后的水印音频
```
这个修改的主要思路是将 `reshape` 函数的第二个参数改为 `size(bits, 1)`,这样就可以确保转换后的矩阵大小是 `8 x N`。
阅读全文